Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(658)

Unified Diff: pkg/analyzer/lib/src/generated/error_verifier.dart

Issue 2236763002: fix wrong order to isAssignableTo for override params (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);

Powered by Google App Engine
This is Rietveld 408576698