Search code examples
delphioverloadingcompiler-warningsdelphi-2007

Why 'H2219 Private symbol X declared but never used' occurs when using an overloaded procedure only after assigning it to a local variable?


I'm using a private method only after assigning it to a local variable:

  TMyTestWithoutParam = procedure() of object;
  TMyTestIntegerParam = procedure(APar : integer) of object;
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure  Test(); overload;
    procedure  Test(APar : integer); overload;
  end;

...

procedure TForm1.FormCreate(Sender: TObject);
var
  TmpA : TMyTestWithoutParam;
  TmpB : TMyTestIntegerParam;
begin
  TmpA := Test;
  TmpA();

  TmpB := Test;
  TmpB(1);
end;

procedure  TForm1.Test();
begin
  //...
end;

procedure  TForm1.Test(APar : Integer);
begin
  //...
end;

On compile, it raises H2219 warning message:

[DCC Warning] Unit1.pas(16): H2219 Private symbol 'Test' declared but never used

Why does H2219 warning occurs and which is the right way for avoid that?


Solution

  • I've tested it using Delphi XE7 and can't reproduce the problem. I think it has been fixed in newer IDE's versions.

    Under Delphi 2007, the warning can be avoided by turning off/on the hints

      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        {$HINTS OFF}
        procedure  Test(); overload;
        procedure  Test(APar : integer); overload;
        {$HINTS ON}
      end;