Browse Source

fcl-passrc: useanalyzer: no hint for external var assigned but not used

git-svn-id: trunk@38889 -
Mattias Gaertner 7 years ago
parent
commit
e30da6b412

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

@@ -2176,6 +2176,9 @@ begin
   else if Usage.Access=paiaWrite then
     begin
     // write without read
+    if (vmExternal in El.VarModifiers)
+        or ((El.Parent is TPasClassType) and (TPasClassType(El.Parent).IsExternal)) then
+      exit;
     if El.Visibility in [visPrivate,visStrictPrivate] then
       EmitMessage(20170311234159,mtHint,nPAPrivateFieldIsAssignedButNeverUsed,
         sPAPrivateFieldIsAssignedButNeverUsed,[El.FullName],El)

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

@@ -105,6 +105,7 @@ type
     procedure TestM_Hint_LocalXYNotUsed;
     procedure TestM_Hint_PrivateFieldIsNeverUsed;
     procedure TestM_Hint_PrivateFieldIsAssignedButNeverUsed;
+    procedure TestM_Hint_PrivateFieldExtClassNoIsAssignedButNeverUsed;
     procedure TestM_Hint_PrivateMethodIsNeverUsed;
     procedure TestM_Hint_LocalDestructor_No_IsNeverUsed;
     procedure TestM_Hint_PrivateTypeNeverUsed;
@@ -1669,6 +1670,27 @@ begin
   CheckUseAnalyzerUnexpectedHints;
 end;
 
+procedure TTestUseAnalyzer.
+  TestM_Hint_PrivateFieldExtClassNoIsAssignedButNeverUsed;
+begin
+  StartProgram(false,[]);
+  Add([
+  '{$modeswitch externalclass}',
+  'type',
+  '  TMobile = class external name ''foo''',
+  '  private',
+  '    FA: longint;',
+  '  public',
+  '    property A: longint write FA;',
+  '  end;',
+  'var m: TMobile;',
+  'begin',
+  '  m.A:=3;',
+  '']);
+  AnalyzeProgram;
+  CheckUseAnalyzerUnexpectedHints;
+end;
+
 procedure TTestUseAnalyzer.TestM_Hint_PrivateMethodIsNeverUsed;
 begin
   StartProgram(true,[supTObject]);