From a4454504862d8c26da99cc7c4e0322ad8b63349d Mon Sep 17 00:00:00 2001 From: Mattias Gaertner Date: Sat, 12 May 2018 14:35:03 +0000 Subject: [PATCH] fcl-passrc: resolver: use same msg id as fpc for some hints git-svn-id: trunk@38980 - --- packages/fcl-passrc/src/pasresolveeval.pas | 32 +++++++++++++++------- packages/fcl-passrc/src/pasresolver.pp | 7 +++-- packages/fcl-passrc/src/pasuseanalyzer.pas | 1 + packages/fcl-passrc/tests/tcresolver.pas | 20 ++++++++++++-- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/packages/fcl-passrc/src/pasresolveeval.pas b/packages/fcl-passrc/src/pasresolveeval.pas index 6ce7f4d1a6..9cfa3b277f 100644 --- a/packages/fcl-passrc/src/pasresolveeval.pas +++ b/packages/fcl-passrc/src/pasresolveeval.pas @@ -91,7 +91,7 @@ const nCallingConventionMismatch = 3018; nResultTypeMismatchExpectedButFound = 3019; nFunctionHeaderMismatchForwardVarName = 3020; - nFunctionHidesIdentifier = 3021; + nFunctionHidesIdentifier_NonVirtualMethod = 3021; nNoMethodInAncestorToOverride = 3022; nInheritedOnlyWorksInMethods = 3023; nInheritedNeedsAncestor = 3024; @@ -120,7 +120,7 @@ const nExpectXArrayElementsButFoundY = 3047; nCannotCreateADescendantOfTheSealedXY = 3048; nAncestorIsNotExternal = 3049; - nVirtualMethodXHasLowerVisibility = 3050; // FPC 3250 + // free 3050 nExternalClassInstanceCannotAccessStaticX = 3051; nXModifierMismatchY = 3052; nSymbolCannotBePublished = 3053; @@ -128,12 +128,12 @@ const nTypeIdentifierExpected = 3055; nCannotNestAnonymousX = 3056; nFoundCallCandidateX = 3057; - nSymbolXIsNotPortable = 3058; - nSymbolXIsExperimental = 3059; - nSymbolXIsNotImplemented = 3060; - nSymbolXBelongsToALibrary = 3061; - nSymbolXIsDeprecated = 3062; - nSymbolXIsDeprecatedY = 3063; + // free 3058 + // free 3059 + // free 3060 + // free 3061 + // free 3062 + // free 3063 nRangeCheckError = 3064; nHighRangeLimitLTLowRangeLimit = 3065; nRangeCheckEvaluatingConstantsVMinMax = 3066; @@ -150,7 +150,7 @@ const nMethodHidesMethodOfBaseType = 3077; nContextExpectedXButFoundY = 3078; nContextXInvalidY = 3079; - nConstructingClassXWithAbstractMethodY = 3080; + // free 3080; nXIsNotSupported = 3081; nOperatorIsNotOverloadedAOpB = 3082; nIllegalQualifierAfter = 3084; @@ -171,6 +171,17 @@ const nMissingFieldsX = 3109; nCantAssignValuesToConstVariable = 3110; nIllegalAssignmentToForLoopVar = 3111; + nFunctionHidesIdentifier_NonProc = 3112; + + // using same IDs as FPC + nVirtualMethodXHasLowerVisibility = 3250; + nConstructingClassXWithAbstractMethodY = 4046; + nSymbolXIsDeprecated = 5043; + nSymbolXBelongsToALibrary = 5065; + nSymbolXIsDeprecatedY = 5066; + nSymbolXIsNotPortable = 5076; + nSymbolXIsNotImplemented = 5078; + nSymbolXIsExperimental = 5079; // resourcestring patterns of messages resourcestring @@ -194,7 +205,7 @@ resourcestring sCallingConventionMismatch = 'Calling convention mismatch'; sResultTypeMismatchExpectedButFound = 'Result type mismatch, expected %s, but found %s'; sFunctionHeaderMismatchForwardVarName = 'function header "%s" doesn''t match forward : var name changes %s => %s'; - sFunctionHidesIdentifier = 'function hides identifier at "%s"'; + sFunctionHidesIdentifier = 'function hides identifier at "%s". Use overload or reintroduce'; sNoMethodInAncestorToOverride = 'There is no method in an ancestor class to be overridden "%s"'; sInheritedOnlyWorksInMethods = 'Inherited works only in methods'; sInheritedNeedsAncestor = 'inherited needs an ancestor'; @@ -274,6 +285,7 @@ resourcestring sMissingFieldsX = 'Missing fields: "%s"'; sCantAssignValuesToConstVariable = 'Can''t assign values to const variable'; sIllegalAssignmentToForLoopVar = 'Illegal assignment to for-loop variable "%s"'; + // sFunctionHidesIdentifier_NonProc = sFunctionHidesIdentifier type { TResolveData - base class for data stored in TPasElement.CustomData } diff --git a/packages/fcl-passrc/src/pasresolver.pp b/packages/fcl-passrc/src/pasresolver.pp index 4ce0acf9d5..22868db952 100644 --- a/packages/fcl-passrc/src/pasresolver.pp +++ b/packages/fcl-passrc/src/pasresolver.pp @@ -4030,7 +4030,7 @@ begin [El.Name,GetElementSourcePosStr(El)],Data^.Proc.ProcType) else // give a hint - LogMsg(20171118205344,mtHint,nFunctionHidesIdentifier,sFunctionHidesIdentifier, + LogMsg(20171118205344,mtHint,nFunctionHidesIdentifier_NonProc,sFunctionHidesIdentifier, [GetElementSourcePosStr(El)],Data^.Proc.ProcType); fopkMethod: // method hides a non proc @@ -4125,8 +4125,9 @@ begin [Data^.Proc.Name,Proc.Parent.Name,GetElementSourcePosStr(Proc)],Data^.Proc.ProcType) else // Delphi/FPC do not give a message when hiding a non virtual method - // -> emit only an Info - LogMsg(20171118214523,mtInfo,nFunctionHidesIdentifier,sFunctionHidesIdentifier, + // -> emit Hint with other message id + LogMsg(20171118214523,mtHint, + nFunctionHidesIdentifier_NonVirtualMethod,sFunctionHidesIdentifier, [GetElementSourcePosStr(Proc)],Data^.Proc.ProcType); Abort:=true; end; diff --git a/packages/fcl-passrc/src/pasuseanalyzer.pas b/packages/fcl-passrc/src/pasuseanalyzer.pas index 4298a430d2..2a3c14e456 100644 --- a/packages/fcl-passrc/src/pasuseanalyzer.pas +++ b/packages/fcl-passrc/src/pasuseanalyzer.pas @@ -48,6 +48,7 @@ uses PasTree, PScanner, PasResolveEval, PasResolver; const + // use same IDs as fpc nPAUnitNotUsed = 5023; sPAUnitNotUsed = 'Unit "%s" not used in %s'; nPAParameterNotUsed = 5024; diff --git a/packages/fcl-passrc/tests/tcresolver.pas b/packages/fcl-passrc/tests/tcresolver.pas index bc3c1cf23a..481a1a2690 100644 --- a/packages/fcl-passrc/tests/tcresolver.pas +++ b/packages/fcl-passrc/tests/tcresolver.pas @@ -643,6 +643,7 @@ type Procedure TestClassInterface_MethodVirtualFail; Procedure TestClassInterface_Overloads; Procedure TestClassInterface_OverloadHint; + Procedure TestClassInterface_OverloadNoHint; Procedure TestClassInterface_IntfListClassFail; Procedure TestClassInterface_IntfListDuplicateFail; Procedure TestClassInterface_MissingMethodFail; @@ -7733,7 +7734,8 @@ begin 'begin', ' b.DoIt(3);']); ParseProgram; - CheckResolverHint(mtInfo,nFunctionHidesIdentifier,'function hides identifier at "afile.pp(4,19)"'); + CheckResolverHint(mtHint,nFunctionHidesIdentifier_NonVirtualMethod, + 'function hides identifier at "afile.pp(4,19)". Use overload or reintroduce'); end; procedure TTestResolver.TestClass_MethodReintroduce; @@ -10875,7 +10877,21 @@ begin ' end;', 'begin']); ParseProgram; - CheckResolverHint(mtInfo,nFunctionHidesIdentifier,'function hides identifier at "afile.pp(4,19)"'); + CheckResolverHint(mtHint,nFunctionHidesIdentifier_NonVirtualMethod,'function hides identifier at "afile.pp(4,19)". Use overload or reintroduce'); +end; + +procedure TTestResolver.TestClassInterface_OverloadNoHint; +begin + StartProgram(false); + Add([ + 'type', + ' IUnknown = interface', + ' procedure DoIt;', + ' procedure DoIt(i: longint);', + ' end;', + 'begin']); + ParseProgram; + CheckResolverUnexpectedHints; end; procedure TTestResolver.TestClassInterface_IntfListClassFail;