Chromium Code Reviews| Index: pkg/analyzer/lib/src/generated/error_verifier.dart |
| diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart |
| index e3cf73c79a4e03debe7da87936ae157efbb8298d..a9f2f6cab01ff22a98e0df4d11b092febf20afe6 100644 |
| --- a/pkg/analyzer/lib/src/generated/error_verifier.dart |
| +++ b/pkg/analyzer/lib/src/generated/error_verifier.dart |
| @@ -497,8 +497,10 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| _initialFieldElementsMap = new HashMap<FieldElement, INIT_STATE>(); |
| for (FieldElement fieldElement in fieldElements) { |
| if (!fieldElement.isSynthetic) { |
| - _initialFieldElementsMap[fieldElement] = fieldElement.initializer == |
| - null ? INIT_STATE.NOT_INIT : INIT_STATE.INIT_IN_DECLARATION; |
| + _initialFieldElementsMap[fieldElement] = |
| + fieldElement.initializer == null |
| + ? INIT_STATE.NOT_INIT |
| + : INIT_STATE.INIT_IN_DECLARATION; |
| } |
| } |
| } |
| @@ -1305,6 +1307,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| } |
| return parameter; |
| } |
| + |
| FormalParameter parameter = baseParameter(formalParameter); |
| if (parameter is FieldFormalParameter) { |
| FieldElement fieldElement = |
| @@ -1413,8 +1416,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| } |
| /** |
| - * Check the given [executableElement] against override-error codes. The |
| - * [overriddenExecutable] is the element that the executable element is |
| + * Check the given [derivedElement] against override-error codes. The |
| + * [baseElement] is the element that the executable element is |
| * overriding. The [parameters] is the parameters of the executable element. |
| * The [errorNameTarget] is the node to report problems on. |
| * |
| @@ -1431,25 +1434,24 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| * [StaticWarningCode.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES]. |
| */ |
| bool _checkForAllInvalidOverrideErrorCodes( |
| - ExecutableElement executableElement, |
| - ExecutableElement overriddenExecutable, |
| + ExecutableElement derivedElement, |
| + ExecutableElement baseElement, |
| List<ParameterElement> parameters, |
| List<AstNode> parameterLocations, |
| SimpleIdentifier errorNameTarget) { |
| bool isGetter = false; |
| bool isSetter = false; |
| - if (executableElement is PropertyAccessorElement) { |
| - isGetter = executableElement.isGetter; |
| - isSetter = executableElement.isSetter; |
| + if (derivedElement is PropertyAccessorElement) { |
| + isGetter = derivedElement.isGetter; |
| + isSetter = derivedElement.isSetter; |
| } |
| - String executableElementName = executableElement.name; |
| - FunctionType overridingFT = executableElement.type; |
| - FunctionType overriddenFT = overriddenExecutable.type; |
| + String executableElementName = derivedElement.name; |
| + FunctionType derivedFT = derivedElement.type; |
|
Jennifer Messerly
2016/08/10 23:50:48
I renamed all of these to make it much easier to e
|
| + FunctionType baseFT = baseElement.type; |
| InterfaceType enclosingType = _enclosingClass.type; |
| - overriddenFT = |
| - _inheritanceManager.substituteTypeArgumentsInMemberFromInheritance( |
| - overriddenFT, executableElementName, enclosingType); |
| - if (overridingFT == null || overriddenFT == null) { |
| + baseFT = _inheritanceManager.substituteTypeArgumentsInMemberFromInheritance( |
| + baseFT, executableElementName, enclosingType); |
| + if (derivedFT == null || baseFT == null) { |
| return false; |
| } |
| @@ -1457,12 +1459,12 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| // TODO(jmesserly): this duplicates some code in isSubtypeOf and most of |
| // _isGenericFunctionSubtypeOf. Ideally, we'd let TypeSystem produce |
| // an error message once it's ready to "return false". |
| - if (!overridingFT.typeFormals.isEmpty) { |
| - if (overriddenFT.typeFormals.isEmpty) { |
| - overridingFT = _typeSystem.instantiateToBounds(overridingFT); |
| + if (!derivedFT.typeFormals.isEmpty) { |
| + if (baseFT.typeFormals.isEmpty) { |
| + derivedFT = _typeSystem.instantiateToBounds(derivedFT); |
| } else { |
| - List<TypeParameterElement> params1 = overridingFT.typeFormals; |
| - List<TypeParameterElement> params2 = overriddenFT.typeFormals; |
| + List<TypeParameterElement> params1 = derivedFT.typeFormals; |
| + List<TypeParameterElement> params2 = baseFT.typeFormals; |
| int count = params1.length; |
| if (params2.length != count) { |
| _errorReporter.reportErrorForNode( |
| @@ -1470,7 +1472,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| errorNameTarget, [ |
| count, |
| params2.length, |
| - overriddenExecutable.enclosingElement.displayName |
| + baseElement.enclosingElement.displayName |
| ]); |
| return true; |
| } |
| @@ -1506,74 +1508,73 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| p1.bound, |
| p2.displayName, |
| p2.bound, |
| - overriddenExecutable.enclosingElement.displayName |
| + baseElement.enclosingElement.displayName |
| ]); |
| return true; |
| } |
| } |
| // Proceed with the rest of the checks, using instantiated types. |
| - overridingFT = overridingFT.instantiate(variablesFresh); |
| - overriddenFT = overriddenFT.instantiate(variablesFresh); |
| + derivedFT = derivedFT.instantiate(variablesFresh); |
| + baseFT = baseFT.instantiate(variablesFresh); |
| } |
| } |
| - DartType overridingFTReturnType = overridingFT.returnType; |
| - DartType overriddenFTReturnType = overriddenFT.returnType; |
| - List<DartType> overridingNormalPT = overridingFT.normalParameterTypes; |
| - List<DartType> overriddenNormalPT = overriddenFT.normalParameterTypes; |
| - List<DartType> overridingPositionalPT = overridingFT.optionalParameterTypes; |
| - List<DartType> overriddenPositionalPT = overriddenFT.optionalParameterTypes; |
| - Map<String, DartType> overridingNamedPT = overridingFT.namedParameterTypes; |
| - Map<String, DartType> overriddenNamedPT = overriddenFT.namedParameterTypes; |
| + DartType derivedFTReturnType = derivedFT.returnType; |
| + DartType baseFTReturnType = baseFT.returnType; |
| + List<DartType> derivedNormalPT = derivedFT.normalParameterTypes; |
| + List<DartType> baseNormalPT = baseFT.normalParameterTypes; |
| + List<DartType> derivedPositionalPT = derivedFT.optionalParameterTypes; |
| + List<DartType> basePositionalPT = baseFT.optionalParameterTypes; |
| + Map<String, DartType> derivedNamedPT = derivedFT.namedParameterTypes; |
| + Map<String, DartType> baseNamedPT = baseFT.namedParameterTypes; |
| // CTEC.INVALID_OVERRIDE_REQUIRED, CTEC.INVALID_OVERRIDE_POSITIONAL and |
| // CTEC.INVALID_OVERRIDE_NAMED |
| - if (overridingNormalPT.length > overriddenNormalPT.length) { |
| + if (derivedNormalPT.length > baseNormalPT.length) { |
| _errorReporter.reportErrorForNode( |
| StaticWarningCode.INVALID_OVERRIDE_REQUIRED, errorNameTarget, [ |
| - overriddenNormalPT.length, |
| - overriddenExecutable, |
| - overriddenExecutable.enclosingElement.displayName |
| + baseNormalPT.length, |
| + baseElement, |
| + baseElement.enclosingElement.displayName |
| ]); |
| return true; |
| } |
| - if (overridingNormalPT.length + overridingPositionalPT.length < |
| - overriddenPositionalPT.length + overriddenNormalPT.length) { |
| + if (derivedNormalPT.length + derivedPositionalPT.length < |
| + basePositionalPT.length + baseNormalPT.length) { |
| _errorReporter.reportErrorForNode( |
| StaticWarningCode.INVALID_OVERRIDE_POSITIONAL, errorNameTarget, [ |
| - overriddenPositionalPT.length + overriddenNormalPT.length, |
| - overriddenExecutable, |
| - overriddenExecutable.enclosingElement.displayName |
| + basePositionalPT.length + baseNormalPT.length, |
| + baseElement, |
| + baseElement.enclosingElement.displayName |
| ]); |
| return true; |
| } |
| // For each named parameter in the overridden method, verify that there is |
| // the same name in the overriding method. |
| - for (String overriddenParamName in overriddenNamedPT.keys) { |
| - if (!overridingNamedPT.containsKey(overriddenParamName)) { |
| + for (String overriddenParamName in baseNamedPT.keys) { |
| + if (!derivedNamedPT.containsKey(overriddenParamName)) { |
| // The overridden method expected the overriding method to have |
| // overridingParamName, but it does not. |
| _errorReporter.reportErrorForNode( |
| StaticWarningCode.INVALID_OVERRIDE_NAMED, errorNameTarget, [ |
| overriddenParamName, |
| - overriddenExecutable, |
| - overriddenExecutable.enclosingElement.displayName |
| + baseElement, |
| + baseElement.enclosingElement.displayName |
| ]); |
| return true; |
| } |
| } |
| // SWC.INVALID_METHOD_OVERRIDE_RETURN_TYPE |
| - if (overriddenFTReturnType != VoidTypeImpl.instance && |
| - !_typeSystem.isAssignableTo( |
| - overridingFTReturnType, overriddenFTReturnType)) { |
| + if (baseFTReturnType != VoidTypeImpl.instance && |
| + !_typeSystem.isAssignableTo(derivedFTReturnType, baseFTReturnType)) { |
| _errorReporter.reportTypeErrorForNode( |
| !isGetter |
| ? StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE |
| : StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE, |
| errorNameTarget, |
| [ |
| - overridingFTReturnType, |
| - overriddenFTReturnType, |
| - overriddenExecutable.enclosingElement.displayName |
| + derivedFTReturnType, |
| + baseFTReturnType, |
| + baseElement.enclosingElement.displayName |
| ]); |
| return true; |
| } |
| @@ -1582,33 +1583,32 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| return false; |
| } |
| int parameterIndex = 0; |
| - for (int i = 0; i < overridingNormalPT.length; i++) { |
| - if (!_typeSystem.isAssignableTo( |
| - overridingNormalPT[i], overriddenNormalPT[i])) { |
| + for (int i = 0; i < derivedNormalPT.length; i++) { |
| + if (!_typeSystem.isAssignableTo(baseNormalPT[i], derivedNormalPT[i])) { |
| _errorReporter.reportTypeErrorForNode( |
| !isSetter |
| ? StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE |
| : StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE, |
| parameterLocations[parameterIndex], |
| [ |
| - overridingNormalPT[i], |
| - overriddenNormalPT[i], |
| - overriddenExecutable.enclosingElement.displayName |
| + derivedNormalPT[i], |
| + baseNormalPT[i], |
| + baseElement.enclosingElement.displayName |
| ]); |
| return true; |
| } |
| parameterIndex++; |
| } |
| // SWC.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE |
| - for (int i = 0; i < overriddenPositionalPT.length; i++) { |
| + for (int i = 0; i < basePositionalPT.length; i++) { |
| if (!_typeSystem.isAssignableTo( |
| - overridingPositionalPT[i], overriddenPositionalPT[i])) { |
| + basePositionalPT[i], derivedPositionalPT[i])) { |
| _errorReporter.reportTypeErrorForNode( |
| StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE, |
| parameterLocations[parameterIndex], [ |
| - overridingPositionalPT[i], |
| - overriddenPositionalPT[i], |
| - overriddenExecutable.enclosingElement.displayName |
| + derivedPositionalPT[i], |
| + basePositionalPT[i], |
| + baseElement.enclosingElement.displayName |
| ]); |
| return true; |
| } |
| @@ -1616,15 +1616,15 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| } |
| // SWC.INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE & |
| // SWC.INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES |
| - for (String overriddenName in overriddenNamedPT.keys) { |
| - DartType overridingType = overridingNamedPT[overriddenName]; |
| - if (overridingType == null) { |
| + for (String overriddenName in baseNamedPT.keys) { |
| + DartType derivedType = derivedNamedPT[overriddenName]; |
| + if (derivedType == null) { |
| // Error, this is never reached- INVALID_OVERRIDE_NAMED would have been |
| // created above if this could be reached. |
| continue; |
| } |
| - DartType overriddenType = overriddenNamedPT[overriddenName]; |
| - if (!_typeSystem.isAssignableTo(overriddenType, overridingType)) { |
| + DartType baseType = baseNamedPT[overriddenName]; |
| + if (!_typeSystem.isAssignableTo(baseType, derivedType)) { |
| // lookup the parameter for the error to select |
| ParameterElement parameterToSelect = null; |
| AstNode parameterLocationToSelect = null; |
| @@ -1641,9 +1641,9 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| _errorReporter.reportTypeErrorForNode( |
| StaticWarningCode.INVALID_METHOD_OVERRIDE_NAMED_PARAM_TYPE, |
| parameterLocationToSelect, [ |
| - overridingType, |
| - overriddenType, |
| - overriddenExecutable.enclosingElement.displayName |
| + derivedType, |
| + baseType, |
| + baseElement.enclosingElement.displayName |
| ]); |
| return true; |
| } |
| @@ -1661,7 +1661,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| List<ParameterElementImpl> parameterElts = new List<ParameterElementImpl>(); |
| List<ParameterElementImpl> overriddenParameterElts = |
| new List<ParameterElementImpl>(); |
| - List<ParameterElement> overriddenPEs = overriddenExecutable.parameters; |
| + List<ParameterElement> overriddenPEs = baseElement.parameters; |
| for (int i = 0; i < parameters.length; i++) { |
| ParameterElement parameter = parameters[i]; |
| if (parameter.parameterKind.isOptional) { |
| @@ -1714,8 +1714,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_NAMED, |
| formalParameters[i], |
| [ |
| - overriddenExecutable.enclosingElement.displayName, |
| - overriddenExecutable.displayName, |
| + baseElement.enclosingElement.displayName, |
| + baseElement.displayName, |
| parameterName |
| ]); |
| foundError = true; |
| @@ -1753,8 +1753,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| .INVALID_OVERRIDE_DIFFERENT_DEFAULT_VALUES_POSITIONAL, |
| formalParameters[i], |
| [ |
| - overriddenExecutable.enclosingElement.displayName, |
| - overriddenExecutable.displayName |
| + baseElement.enclosingElement.displayName, |
| + baseElement.displayName |
| ]); |
| foundError = true; |
| } |
| @@ -2202,6 +2202,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| Element toVariable(Element element) { |
| return element is PropertyAccessorElement ? element.variable : element; |
| } |
| + |
| element = toVariable(element); |
| if (element is VariableElement) { |
| if (element.isConst) { |
| @@ -5813,6 +5814,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
| argument, |
| [argumentType, parameterType]); |
| } |
| + |
| if (element is FunctionTypedElement) { |
| _checkTypeArgumentsAgainstBounds( |
| element.typeParameters, typeArguments, targetType, reportError); |