Browse Source

fcl-passrc: useanalyzer: fixed overrides, added test

git-svn-id: trunk@38471 -
Mattias Gaertner 7 years ago
parent
commit
6ac5c55c54

+ 7 - 3
packages/fcl-passrc/src/pasuseanalyzer.pas

@@ -36,9 +36,6 @@ Working:
 - Hint: 'Function result does not seem to be set'
 - TPasArgument: compute the effective Access
 - calls: use the effective Access of arguments
-
-ToDo:
-- Add test: Call Override: e.g. A.Proc, mark only overrides of descendants of A
 }
 unit PasUseAnalyzer;
 
@@ -1391,6 +1388,13 @@ begin
     ImplProc:=ProcScope.ImplProc;
   if ImplProc.Body<>nil then
     UseImplBlock(ImplProc.Body.Body,false);
+
+  if Proc.IsOverride and (ProcScope.OverriddenProc<>nil) then
+    AddOverride(ProcScope.OverriddenProc,Proc);
+
+  // mark overrides
+  if [pmOverride,pmVirtual]*Proc.Modifiers<>[] then
+    UseOverrides(Proc);
 end;
 
 procedure TPasAnalyzer.UseProcedureType(ProcType: TPasProcedureType;

+ 37 - 0
packages/fcl-passrc/tests/tcuseanalyzer.pas

@@ -128,6 +128,7 @@ type
     procedure TestWP_UnitFinalization;
     procedure TestWP_CallInherited;
     procedure TestWP_ProgramPublicDeclarations;
+    procedure TestWP_ClassOverride;
     procedure TestWP_ClassDefaultProperty;
     procedure TestWP_Published;
     procedure TestWP_PublishedSetType;
@@ -1992,6 +1993,42 @@ begin
   AnalyzeWholeProgram;
 end;
 
+procedure TTestUseAnalyzer.TestWP_ClassOverride;
+begin
+  StartProgram(false);
+  Add([
+  'type',
+  '  {#TObject_used}TObject = class',
+  '  protected',
+  '    function {#TObject_getcount_used}GetCount: longint; virtual; abstract;',
+  '  public',
+  '    property {#TObject_count_used}Count: longint read GetCount;',
+  '  end;',
+  '',
+  '  {#tb_used}TB = class(TObject)',
+  '  private',
+  '    {#tb_fcount_used}FCount: longint;',
+  '  protected',
+  '    function {#tb_getcount_used}GetCount: longint; override;',
+  '  end;',
+  '',
+  'function TB.GetCount: longint;',
+  'begin',
+  '  Result:=FCount;',
+  'end;',
+  '',
+  'procedure {#doit_used}DoIt;',
+  'var',
+  '  {#l_used}l: TB;',
+  'begin',
+  '  if l.count=3 then ;',
+  'end;',
+  '',
+  'begin',
+  '  DoIt;']);
+  AnalyzeWholeProgram;
+end;
+
 procedure TTestUseAnalyzer.TestWP_ClassDefaultProperty;
 begin
   StartProgram(false);