Index: packages/analyzer/lib/src/generated/error_verifier.dart |
diff --git a/analyzer/lib/src/generated/error_verifier.dart b/packages/analyzer/lib/src/generated/error_verifier.dart |
similarity index 94% |
rename from analyzer/lib/src/generated/error_verifier.dart |
rename to packages/analyzer/lib/src/generated/error_verifier.dart |
index e80e02abdd0c8528ad1717884a64134c084879e3..7c8516e7343bf4a9f0e7f08177a8ee1baaa3c655 100644 |
--- a/analyzer/lib/src/generated/error_verifier.dart |
+++ b/packages/analyzer/lib/src/generated/error_verifier.dart |
@@ -70,6 +70,11 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
final TypeProvider _typeProvider; |
/** |
+ * The type system primitives |
+ */ |
+ TypeSystem _typeSystem; |
+ |
+ /** |
* The manager for the inheritance mappings. |
*/ |
final InheritanceManager _inheritanceManager; |
@@ -255,10 +260,16 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
List<InterfaceType> _DISALLOWED_TYPES_TO_EXTEND_OR_IMPLEMENT; |
/** |
+ * If `true`, mixins are allowed to inherit from types other than Object, and |
+ * are allowed to reference `super`. |
+ */ |
+ final bool enableSuperMixins; |
+ |
+ /** |
* Initialize a newly created error verifier. |
*/ |
ErrorVerifier(this._errorReporter, this._currentLibrary, this._typeProvider, |
- this._inheritanceManager) { |
+ this._inheritanceManager, this.enableSuperMixins) { |
this._isInSystemLibrary = _currentLibrary.source.isInSystemLibrary; |
this._hasExtUri = _currentLibrary.hasExtUri; |
_isEnclosingConstructorConst = false; |
@@ -271,6 +282,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
_boolType = _typeProvider.boolType; |
_intType = _typeProvider.intType; |
_DISALLOWED_TYPES_TO_EXTEND_OR_IMPLEMENT = _typeProvider.nonSubtypableTypes; |
+ _typeSystem = _currentLibrary.context.typeSystem; |
} |
@override |
@@ -578,6 +590,18 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
@override |
+ Object visitEnumDeclaration(EnumDeclaration node) { |
+ ClassElement outerClass = _enclosingClass; |
+ try { |
+ _isInNativeClass = false; |
+ _enclosingClass = node.element; |
+ return super.visitEnumDeclaration(node); |
+ } finally { |
+ _enclosingClass = outerClass; |
+ } |
+ } |
+ |
+ @override |
Object visitExportDirective(ExportDirective node) { |
ExportElement exportElement = node.element; |
if (exportElement != null) { |
@@ -859,9 +883,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
Expression target = node.realTarget; |
SimpleIdentifier methodName = node.methodName; |
if (target != null) { |
- bool isConditional = node.operator.type == sc.TokenType.QUESTION_PERIOD; |
- ClassElement typeReference = |
- ElementResolver.getTypeReference(target, isConditional); |
+ ClassElement typeReference = ElementResolver.getTypeReference(target); |
_checkForStaticAccessToInstanceMember(typeReference, methodName); |
_checkForInstanceAccessToStaticMember(typeReference, methodName); |
} else { |
@@ -898,7 +920,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
Object visitPrefixedIdentifier(PrefixedIdentifier node) { |
if (node.parent is! Annotation) { |
ClassElement typeReference = |
- ElementResolver.getTypeReference(node.prefix, false); |
+ ElementResolver.getTypeReference(node.prefix); |
SimpleIdentifier name = node.identifier; |
_checkForStaticAccessToInstanceMember(typeReference, name); |
_checkForInstanceAccessToStaticMember(typeReference, name); |
@@ -921,9 +943,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
@override |
Object visitPropertyAccess(PropertyAccess node) { |
- bool isConditional = node.operator.type == sc.TokenType.QUESTION_PERIOD; |
ClassElement typeReference = |
- ElementResolver.getTypeReference(node.realTarget, isConditional); |
+ ElementResolver.getTypeReference(node.realTarget); |
SimpleIdentifier propertyName = node.propertyName; |
_checkForStaticAccessToInstanceMember(typeReference, propertyName); |
_checkForInstanceAccessToStaticMember(typeReference, propertyName); |
@@ -1109,7 +1130,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
// report problem |
_errorReporter.reportErrorForNode( |
- StaticTypeWarningCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS, typeArguments, |
+ StaticTypeWarningCode.EXPECTED_TWO_MAP_TYPE_ARGUMENTS, |
+ typeArguments, |
[num]); |
return true; |
} |
@@ -1155,14 +1177,16 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (fieldElement.isFinal || fieldElement.isConst) { |
_errorReporter.reportErrorForNode( |
StaticWarningCode.FINAL_INITIALIZED_IN_DECLARATION_AND_CONSTRUCTOR, |
- formalParameter.identifier, [fieldElement.displayName]); |
+ formalParameter.identifier, |
+ [fieldElement.displayName]); |
foundError = true; |
} |
} else if (state == INIT_STATE.INIT_IN_FIELD_FORMAL) { |
if (fieldElement.isFinal || fieldElement.isConst) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.FINAL_INITIALIZED_MULTIPLE_TIMES, |
- formalParameter.identifier, [fieldElement.displayName]); |
+ formalParameter.identifier, |
+ [fieldElement.displayName]); |
foundError = true; |
} |
} |
@@ -1199,7 +1223,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} else if (state == INIT_STATE.INIT_IN_INITIALIZERS) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.FIELD_INITIALIZED_BY_MULTIPLE_INITIALIZERS, |
- fieldName, [fieldElement.displayName]); |
+ fieldName, |
+ [fieldElement.displayName]); |
foundError = true; |
} |
} |
@@ -1221,7 +1246,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (fieldElement.isConst) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.CONST_NOT_INITIALIZED, |
- constructor.returnType, [fieldElement.name]); |
+ constructor.returnType, |
+ [fieldElement.name]); |
foundError = true; |
} |
} |
@@ -1232,14 +1258,13 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (notInitFinalFields.length == 1) { |
analysisError = _errorReporter.newErrorWithProperties( |
StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_1, |
- constructor.returnType, [notInitFinalFields[0].name]); |
+ constructor.returnType, |
+ [notInitFinalFields[0].name]); |
} else if (notInitFinalFields.length == 2) { |
analysisError = _errorReporter.newErrorWithProperties( |
StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_2, |
- constructor.returnType, [ |
- notInitFinalFields[0].name, |
- notInitFinalFields[1].name |
- ]); |
+ constructor.returnType, |
+ [notInitFinalFields[0].name, notInitFinalFields[1].name]); |
} else { |
analysisError = _errorReporter.newErrorWithProperties( |
StaticWarningCode.FINAL_NOT_INITIALIZED_CONSTRUCTOR_3_PLUS, |
@@ -1276,8 +1301,10 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
*/ |
bool _checkForAllInvalidOverrideErrorCodes( |
ExecutableElement executableElement, |
- ExecutableElement overriddenExecutable, List<ParameterElement> parameters, |
- List<AstNode> parameterLocations, SimpleIdentifier errorNameTarget) { |
+ ExecutableElement overriddenExecutable, |
+ List<ParameterElement> parameters, |
+ List<AstNode> parameterLocations, |
+ SimpleIdentifier errorNameTarget) { |
bool isGetter = false; |
bool isSetter = false; |
if (executableElement is PropertyAccessorElement) { |
@@ -1338,11 +1365,14 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
// SWC.INVALID_METHOD_OVERRIDE_RETURN_TYPE |
if (overriddenFTReturnType != VoidTypeImpl.instance && |
- !overridingFTReturnType.isAssignableTo(overriddenFTReturnType)) { |
- _errorReporter.reportTypeErrorForNode(!isGetter |
+ !_typeSystem.isAssignableTo( |
+ overridingFTReturnType, overriddenFTReturnType)) { |
+ _errorReporter.reportTypeErrorForNode( |
+ !isGetter |
? StaticWarningCode.INVALID_METHOD_OVERRIDE_RETURN_TYPE |
: StaticWarningCode.INVALID_GETTER_OVERRIDE_RETURN_TYPE, |
- errorNameTarget, [ |
+ errorNameTarget, |
+ [ |
overridingFTReturnType, |
overriddenFTReturnType, |
overriddenExecutable.enclosingElement.displayName |
@@ -1355,11 +1385,14 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
int parameterIndex = 0; |
for (int i = 0; i < overridingNormalPT.length; i++) { |
- if (!overridingNormalPT[i].isAssignableTo(overriddenNormalPT[i])) { |
- _errorReporter.reportTypeErrorForNode(!isSetter |
+ if (!_typeSystem.isAssignableTo( |
+ overridingNormalPT[i], overriddenNormalPT[i])) { |
+ _errorReporter.reportTypeErrorForNode( |
+ !isSetter |
? StaticWarningCode.INVALID_METHOD_OVERRIDE_NORMAL_PARAM_TYPE |
: StaticWarningCode.INVALID_SETTER_OVERRIDE_NORMAL_PARAM_TYPE, |
- parameterLocations[parameterIndex], [ |
+ parameterLocations[parameterIndex], |
+ [ |
overridingNormalPT[i], |
overriddenNormalPT[i], |
overriddenExecutable.enclosingElement.displayName |
@@ -1370,8 +1403,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
// SWC.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE |
for (int i = 0; i < overriddenPositionalPT.length; i++) { |
- if (!overridingPositionalPT[i] |
- .isAssignableTo(overriddenPositionalPT[i])) { |
+ if (!_typeSystem.isAssignableTo( |
+ overridingPositionalPT[i], overriddenPositionalPT[i])) { |
_errorReporter.reportTypeErrorForNode( |
StaticWarningCode.INVALID_METHOD_OVERRIDE_OPTIONAL_PARAM_TYPE, |
parameterLocations[parameterIndex], [ |
@@ -1393,7 +1426,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
continue; |
} |
DartType overriddenType = overriddenNamedPT[overriddenName]; |
- if (!overriddenType.isAssignableTo(overridingType)) { |
+ if (!_typeSystem.isAssignableTo(overriddenType, overridingType)) { |
// lookup the parameter for the error to select |
ParameterElement parameterToSelect = null; |
AstNode parameterLocationToSelect = null; |
@@ -1539,8 +1572,10 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
* to report problems on. |
*/ |
bool _checkForAllInvalidOverrideErrorCodesForExecutable( |
- ExecutableElement executableElement, List<ParameterElement> parameters, |
- List<AstNode> parameterLocations, SimpleIdentifier errorNameTarget) { |
+ ExecutableElement executableElement, |
+ List<ParameterElement> parameters, |
+ List<AstNode> parameterLocations, |
+ SimpleIdentifier errorNameTarget) { |
// |
// Compute the overridden executable from the InheritanceManager |
// |
@@ -1653,7 +1688,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (_checkForMixinDeclaresConstructor(mixinName, mixinElement)) { |
problemReported = true; |
} |
- if (_checkForMixinInheritsNotFromObject(mixinName, mixinElement)) { |
+ if (!enableSuperMixins && |
+ _checkForMixinInheritsNotFromObject(mixinName, mixinElement)) { |
problemReported = true; |
} |
if (_checkForMixinReferencesSuper(mixinName, mixinElement)) { |
@@ -1704,10 +1740,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
ErrorCode errorCode = (declaration.constKeyword != null |
? CompileTimeErrorCode.REDIRECT_TO_MISSING_CONSTRUCTOR |
: StaticWarningCode.REDIRECT_TO_MISSING_CONSTRUCTOR); |
- _errorReporter.reportErrorForNode(errorCode, redirectedConstructor, [ |
- constructorStrName, |
- redirectedType.displayName |
- ]); |
+ _errorReporter.reportErrorForNode(errorCode, redirectedConstructor, |
+ [constructorStrName, redirectedType.displayName]); |
return true; |
} |
return false; |
@@ -1719,19 +1753,22 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
// |
FunctionType constructorType = declaration.element.type; |
DartType constructorReturnType = constructorType.returnType; |
- if (!redirectedReturnType.isAssignableTo(constructorReturnType)) { |
+ if (!_typeSystem.isAssignableTo( |
+ redirectedReturnType, constructorReturnType)) { |
_errorReporter.reportErrorForNode( |
StaticWarningCode.REDIRECT_TO_INVALID_RETURN_TYPE, |
- redirectedConstructor, [redirectedReturnType, constructorReturnType]); |
+ redirectedConstructor, |
+ [redirectedReturnType, constructorReturnType]); |
return true; |
} |
// |
// Check parameters |
// |
- if (!redirectedType.isSubtypeOf(constructorType)) { |
+ if (!_typeSystem.isSubtypeOf(redirectedType, constructorType)) { |
_errorReporter.reportErrorForNode( |
StaticWarningCode.REDIRECT_TO_INVALID_FUNCTION_TYPE, |
- redirectedConstructor, [redirectedType, constructorType]); |
+ redirectedConstructor, |
+ [redirectedType, constructorType]); |
return true; |
} |
return false; |
@@ -1774,8 +1811,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
// RETURN_WITHOUT_VALUE |
if (returnExpression == null) { |
if (_inGenerator || |
- _computeReturnTypeForMethod(null) |
- .isAssignableTo(expectedReturnType)) { |
+ _typeSystem.isAssignableTo( |
+ _computeReturnTypeForMethod(null), expectedReturnType)) { |
return false; |
} |
_hasReturnWithoutValue = true; |
@@ -1813,8 +1850,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
Element element = definedNames[name]; |
Element prevElement = _exportedElements[name]; |
if (element != null && prevElement != null && prevElement != element) { |
- _errorReporter.reportErrorForNode(CompileTimeErrorCode.AMBIGUOUS_EXPORT, |
- directive, [ |
+ _errorReporter.reportErrorForNode( |
+ CompileTimeErrorCode.AMBIGUOUS_EXPORT, directive, [ |
name, |
prevElement.library.definingCompilationUnit.displayName, |
element.library.definingCompilationUnit.displayName |
@@ -1844,14 +1881,16 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
* [StaticWarningCode.MAP_KEY_TYPE_NOT_ASSIGNABLE], and |
* [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE]. |
*/ |
- bool _checkForArgumentTypeNotAssignable(Expression expression, |
- DartType expectedStaticType, DartType actualStaticType, |
+ bool _checkForArgumentTypeNotAssignable( |
+ Expression expression, |
+ DartType expectedStaticType, |
+ DartType actualStaticType, |
ErrorCode errorCode) { |
// |
// Warning case: test static type information |
// |
if (actualStaticType != null && expectedStaticType != null) { |
- if (!actualStaticType.isAssignableTo(expectedStaticType)) { |
+ if (!_typeSystem.isAssignableTo(actualStaticType, expectedStaticType)) { |
_errorReporter.reportTypeErrorForNode( |
errorCode, expression, [actualStaticType, expectedStaticType]); |
return true; |
@@ -1896,8 +1935,10 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
* [StaticWarningCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE]. |
*/ |
bool _checkForArgumentTypeNotAssignableWithExpectedTypes( |
- Expression expression, DartType expectedStaticType, |
- ErrorCode errorCode) => _checkForArgumentTypeNotAssignable( |
+ Expression expression, |
+ DartType expectedStaticType, |
+ ErrorCode errorCode) => |
+ _checkForArgumentTypeNotAssignable( |
expression, expectedStaticType, getStaticType(expression), errorCode); |
/** |
@@ -1938,7 +1979,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (expressionType == null) { |
return false; |
} |
- if (expressionType.isAssignableTo(type)) { |
+ if (_typeSystem.isAssignableTo(expressionType, type)) { |
return false; |
} |
_errorReporter.reportErrorForNode(errorCode, expression, arguments); |
@@ -1982,7 +2023,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
element.setter == null && |
element.isSynthetic) { |
_errorReporter.reportErrorForNode( |
- StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER, highlightedNode, |
+ StaticWarningCode.ASSIGNMENT_TO_FINAL_NO_SETTER, |
+ highlightedNode, |
[element.name, element.enclosingElement.displayName]); |
return true; |
} |
@@ -2117,10 +2159,9 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
if (overriddenMember == null) { |
_errorReporter.reportErrorForNode( |
- StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, nameNode, [ |
- memberName, |
- _enclosingClass.displayName |
- ]); |
+ StaticWarningCode.CONCRETE_CLASS_WITH_ABSTRACT_MEMBER, |
+ nameNode, |
+ [memberName, _enclosingClass.displayName]); |
return true; |
} |
} |
@@ -2155,7 +2196,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_DEFAULT, constructor); |
} else { |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, constructor, |
+ CompileTimeErrorCode.DUPLICATE_CONSTRUCTOR_NAME, |
+ constructor, |
[name]); |
} |
return true; |
@@ -2170,7 +2212,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (field != null) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_FIELD, |
- constructor, [name]); |
+ constructor, |
+ [name]); |
return true; |
} |
// methods |
@@ -2178,7 +2221,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (method != null) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.CONFLICTING_CONSTRUCTOR_NAME_AND_METHOD, |
- constructor, [name]); |
+ constructor, |
+ [name]); |
return true; |
} |
} |
@@ -2208,9 +2252,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
// report problem |
hasProblem = true; |
- _errorReporter.reportErrorForOffset( |
- CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD, method.nameOffset, |
- name.length, [ |
+ _errorReporter.reportErrorForElement( |
+ CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD, method, [ |
_enclosingClass.displayName, |
inherited.enclosingElement.displayName, |
name |
@@ -2230,9 +2273,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
// report problem |
hasProblem = true; |
- _errorReporter.reportErrorForOffset( |
- CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER, |
- accessor.nameOffset, name.length, [ |
+ _errorReporter.reportErrorForElement( |
+ CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER, accessor, [ |
_enclosingClass.displayName, |
inherited.enclosingElement.displayName, |
name |
@@ -2298,11 +2340,13 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (getter) { |
_errorReporter.reportErrorForElement( |
StaticWarningCode.CONFLICTING_INSTANCE_GETTER_AND_SUPERCLASS_MEMBER, |
- accessor, [superElementType.displayName]); |
+ accessor, |
+ [superElementType.displayName]); |
} else { |
_errorReporter.reportErrorForElement( |
StaticWarningCode.CONFLICTING_INSTANCE_SETTER_AND_SUPERCLASS_MEMBER, |
- accessor, [superElementType.displayName]); |
+ accessor, |
+ [superElementType.displayName]); |
} |
} |
// done |
@@ -2384,10 +2428,9 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
!conflictingMethod.isGetter) { |
// report problem |
_errorReporter.reportErrorForNode( |
- StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2, name, [ |
- _enclosingClass.displayName, |
- name.name |
- ]); |
+ StaticWarningCode.CONFLICTING_INSTANCE_METHOD_SETTER2, |
+ name, |
+ [_enclosingClass.displayName, name.name]); |
foundError = true; |
addThisMemberToTheMap = false; |
} |
@@ -2443,7 +2486,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
// report problem |
_errorReporter.reportErrorForNode( |
StaticWarningCode.CONFLICTING_STATIC_GETTER_AND_INSTANCE_SETTER, |
- nameNode, [setterType.displayName]); |
+ nameNode, |
+ [setterType.displayName]); |
return true; |
} |
@@ -2491,7 +2535,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
// report problem |
_errorReporter.reportErrorForNode( |
StaticWarningCode.CONFLICTING_STATIC_SETTER_AND_INSTANCE_MEMBER, |
- nameNode, [memberType.displayName]); |
+ nameNode, |
+ [memberType.displayName]); |
return true; |
} |
@@ -2509,18 +2554,20 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
String name = typeParameter.name; |
// name is same as the name of the enclosing class |
if (_enclosingClass.name == name) { |
- _errorReporter.reportErrorForOffset( |
+ _errorReporter.reportErrorForElement( |
CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS, |
- typeParameter.nameOffset, name.length, [name]); |
+ typeParameter, |
+ [name]); |
problemReported = true; |
} |
// check members |
if (_enclosingClass.getMethod(name) != null || |
_enclosingClass.getGetter(name) != null || |
_enclosingClass.getSetter(name) != null) { |
- _errorReporter.reportErrorForOffset( |
+ _errorReporter.reportErrorForElement( |
CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER, |
- typeParameter.nameOffset, name.length, [name]); |
+ typeParameter, |
+ [name]); |
problemReported = true; |
} |
} |
@@ -2559,7 +2606,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER, |
- superInvocation, [element.enclosingElement.displayName]); |
+ superInvocation, |
+ [element.enclosingElement.displayName]); |
return true; |
} |
} |
@@ -2582,7 +2630,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
// default constructor is not 'const', report problem |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER, |
- constructor.returnType, [supertype.displayName]); |
+ constructor.returnType, |
+ [supertype.displayName]); |
return true; |
} |
@@ -2623,7 +2672,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
ConstructorName constructorName, TypeName typeName) { |
if (typeName.isDeferred) { |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.CONST_DEFERRED_CLASS, constructorName, |
+ CompileTimeErrorCode.CONST_DEFERRED_CLASS, |
+ constructorName, |
[typeName.name.name]); |
return true; |
} |
@@ -2670,7 +2720,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
* [StaticWarningCode.NEW_WITH_ABSTRACT_CLASS]. |
*/ |
bool _checkForConstOrNewWithAbstractClass( |
- InstanceCreationExpression expression, TypeName typeName, |
+ InstanceCreationExpression expression, |
+ TypeName typeName, |
InterfaceType type) { |
if (type.element.isAbstract) { |
ConstructorElement element = expression.staticElement; |
@@ -2774,7 +2825,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
* [CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT]. |
*/ |
bool _checkForConstWithUndefinedConstructor( |
- InstanceCreationExpression expression, ConstructorName constructorName, |
+ InstanceCreationExpression expression, |
+ ConstructorName constructorName, |
TypeName typeName) { |
// OK if resolved |
if (expression.staticElement != null) { |
@@ -2793,14 +2845,14 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
SimpleIdentifier name = constructorName.name; |
if (name != null) { |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR, name, [ |
- className, |
- name |
- ]); |
+ CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR, |
+ name, |
+ [className, name]); |
} else { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, |
- constructorName, [className]); |
+ constructorName, |
+ [className]); |
} |
return true; |
} |
@@ -2949,9 +3001,10 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
displayName = enclosingElement.getExtendedDisplayName(null); |
} |
// report problem |
- _errorReporter.reportErrorForOffset( |
+ _errorReporter.reportErrorForElement( |
CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE, |
- staticMember.nameOffset, name.length, [name, displayName]); |
+ staticMember, |
+ [name, displayName]); |
return true; |
} |
@@ -2970,7 +3023,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
// report problem |
_errorReporter.reportErrorForNode( |
- StaticTypeWarningCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS, typeArguments, |
+ StaticTypeWarningCode.EXPECTED_ONE_LIST_TYPE_ARGUMENTS, |
+ typeArguments, |
[num]); |
return true; |
} |
@@ -2994,13 +3048,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
LibraryElement prevLibrary = _nameToExportElement[name]; |
if (prevLibrary != null) { |
if (prevLibrary != exportedLibrary) { |
- if (name.isEmpty) { |
- _errorReporter.reportErrorForNode( |
- StaticWarningCode.EXPORT_DUPLICATED_LIBRARY_UNNAMED, directive, [ |
- prevLibrary.definingCompilationUnit.displayName, |
- exportedLibrary.definingCompilationUnit.displayName |
- ]); |
- } else { |
+ if (!name.isEmpty) { |
_errorReporter.reportErrorForNode( |
StaticWarningCode.EXPORT_DUPLICATED_LIBRARY_NAMED, directive, [ |
prevLibrary.definingCompilationUnit.displayName, |
@@ -3042,7 +3090,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
// report problem |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY, directive, |
+ CompileTimeErrorCode.EXPORT_INTERNAL_LIBRARY, |
+ directive, |
[directive.uri]); |
return true; |
} |
@@ -3143,6 +3192,11 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (typeName.isSynthetic) { |
return false; |
} |
+ // The SDK implementation may implement disallowed types. For example, |
+ // JSNumber in dart2js and _Smi in Dart VM both implement int. |
+ if (_currentLibrary.source.isInSystemLibrary) { |
+ return false; |
+ } |
DartType superType = typeName.type; |
for (InterfaceType disallowedType |
in _DISALLOWED_TYPES_TO_EXTEND_OR_IMPLEMENT) { |
@@ -3202,7 +3256,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (staticType == null) { |
return false; |
} |
- if (staticType.isAssignableTo(fieldType)) { |
+ if (_typeSystem.isAssignableTo(staticType, fieldType)) { |
return false; |
} |
// report problem |
@@ -3211,13 +3265,13 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
// constant, not the static type. See dartbug.com/21119. |
_errorReporter.reportTypeErrorForNode( |
CheckedModeCompileTimeErrorCode.CONST_FIELD_INITIALIZER_NOT_ASSIGNABLE, |
- expression, [staticType, fieldType]); |
+ expression, |
+ [staticType, fieldType]); |
} |
_errorReporter.reportTypeErrorForNode( |
- StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, expression, [ |
- staticType, |
- fieldType |
- ]); |
+ StaticWarningCode.FIELD_INITIALIZER_NOT_ASSIGNABLE, |
+ expression, |
+ [staticType, fieldType]); |
return true; |
// TODO(brianwilkerson) Define a hint corresponding to these errors and |
// report it if appropriate. |
@@ -3297,11 +3351,13 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (variable.initializer == null) { |
if (list.isConst) { |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.CONST_NOT_INITIALIZED, variable.name, |
+ CompileTimeErrorCode.CONST_NOT_INITIALIZED, |
+ variable.name, |
[variable.name.name]); |
} else if (list.isFinal) { |
_errorReporter.reportErrorForNode( |
- StaticWarningCode.FINAL_NOT_INITIALIZED, variable.name, |
+ StaticWarningCode.FINAL_NOT_INITIALIZED, |
+ variable.name, |
[variable.name.name]); |
} |
foundError = true; |
@@ -3350,22 +3406,22 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
if (_enclosingFunction.isAsynchronous) { |
if (_enclosingFunction.isGenerator) { |
- if (!_enclosingFunction.returnType |
- .isAssignableTo(_typeProvider.streamDynamicType)) { |
+ if (!_typeSystem.isAssignableTo( |
+ _enclosingFunction.returnType, _typeProvider.streamDynamicType)) { |
_errorReporter.reportErrorForNode( |
StaticTypeWarningCode.ILLEGAL_ASYNC_GENERATOR_RETURN_TYPE, |
returnType); |
} |
} else { |
- if (!_enclosingFunction.returnType |
- .isAssignableTo(_typeProvider.futureDynamicType)) { |
+ if (!_typeSystem.isAssignableTo( |
+ _enclosingFunction.returnType, _typeProvider.futureDynamicType)) { |
_errorReporter.reportErrorForNode( |
StaticTypeWarningCode.ILLEGAL_ASYNC_RETURN_TYPE, returnType); |
} |
} |
} else if (_enclosingFunction.isGenerator) { |
- if (!_enclosingFunction.returnType |
- .isAssignableTo(_typeProvider.iterableDynamicType)) { |
+ if (!_typeSystem.isAssignableTo( |
+ _enclosingFunction.returnType, _typeProvider.iterableDynamicType)) { |
_errorReporter.reportErrorForNode( |
StaticTypeWarningCode.ILLEGAL_SYNC_GENERATOR_RETURN_TYPE, |
returnType); |
@@ -3507,13 +3563,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
LibraryElement prevLibrary = _nameToImportElement[name]; |
if (prevLibrary != null) { |
if (prevLibrary != nodeLibrary) { |
- if (name.isEmpty) { |
- _errorReporter.reportErrorForNode( |
- StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_UNNAMED, directive, [ |
- prevLibrary.definingCompilationUnit.displayName, |
- nodeLibrary.definingCompilationUnit.displayName |
- ]); |
- } else { |
+ if (!name.isEmpty) { |
_errorReporter.reportErrorForNode( |
StaticWarningCode.IMPORT_DUPLICATED_LIBRARY_NAMED, directive, [ |
prevLibrary.definingCompilationUnit.displayName, |
@@ -3555,7 +3605,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
// report problem |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY, directive, |
+ CompileTimeErrorCode.IMPORT_INTERNAL_LIBRARY, |
+ directive, |
[directive.uri]); |
return true; |
} |
@@ -3614,7 +3665,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
// report problem |
_errorReporter.reportErrorForNode( |
- StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, name, |
+ StaticTypeWarningCode.INSTANCE_ACCESS_TO_STATIC_MEMBER, |
+ name, |
[name.name]); |
return true; |
} |
@@ -3655,10 +3707,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (fieldElt.isStatic) { |
_errorReporter.reportErrorForNode( |
StaticWarningCode.INSTANCE_METHOD_NAME_COLLIDES_WITH_SUPERCLASS_STATIC, |
- errorNameTarget, [ |
- executableElementName, |
- fieldElt.enclosingElement.displayName |
- ]); |
+ errorNameTarget, |
+ [executableElementName, fieldElt.enclosingElement.displayName]); |
return true; |
} |
} |
@@ -3744,12 +3794,11 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
? getStaticType(lhs) |
: leftVariableElement.type; |
DartType staticRightType = getStaticType(rhs); |
- if (!staticRightType.isAssignableTo(leftType)) { |
+ if (!_typeSystem.isAssignableTo(staticRightType, leftType)) { |
_errorReporter.reportTypeErrorForNode( |
- StaticTypeWarningCode.INVALID_ASSIGNMENT, rhs, [ |
- staticRightType, |
- leftType |
- ]); |
+ StaticTypeWarningCode.INVALID_ASSIGNMENT, |
+ rhs, |
+ [staticRightType, leftType]); |
return true; |
} |
return false; |
@@ -3779,7 +3828,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (leftType == null || rightType == null) { |
return false; |
} |
- if (!rightType.isAssignableTo(leftType)) { |
+ if (!_typeSystem.isAssignableTo(rightType, leftType)) { |
_errorReporter.reportTypeErrorForNode( |
StaticTypeWarningCode.INVALID_ASSIGNMENT, rhs, [rightType, leftType]); |
return true; |
@@ -3800,15 +3849,18 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (fieldElement.isSynthetic) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD, |
- initializer, [fieldName]); |
+ initializer, |
+ [fieldName]); |
} else if (fieldElement.isStatic) { |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD, initializer, |
+ CompileTimeErrorCode.INITIALIZER_FOR_STATIC_FIELD, |
+ initializer, |
[fieldName]); |
} |
} else { |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD, initializer, |
+ CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD, |
+ initializer, |
[fieldName]); |
return; |
} |
@@ -3880,13 +3932,15 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (literal.constKeyword != null) { |
// TODO(paulberry): this error should be based on the actual type of the |
// list element, not the static type. See dartbug.com/21119. |
- if (_checkForArgumentTypeNotAssignableWithExpectedTypes(element, |
+ if (_checkForArgumentTypeNotAssignableWithExpectedTypes( |
+ element, |
listElementType, |
CheckedModeCompileTimeErrorCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE)) { |
hasProblems = true; |
} |
} |
- if (_checkForArgumentTypeNotAssignableWithExpectedTypes(element, |
+ if (_checkForArgumentTypeNotAssignableWithExpectedTypes( |
+ element, |
listElementType, |
StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE)) { |
hasProblems = true; |
@@ -3927,7 +3981,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
CheckedModeCompileTimeErrorCode.MAP_KEY_TYPE_NOT_ASSIGNABLE)) { |
hasProblems = true; |
} |
- if (_checkForArgumentTypeNotAssignableWithExpectedTypes(value, |
+ if (_checkForArgumentTypeNotAssignableWithExpectedTypes( |
+ value, |
valueType, |
CheckedModeCompileTimeErrorCode.MAP_VALUE_TYPE_NOT_ASSIGNABLE)) { |
hasProblems = true; |
@@ -3963,9 +4018,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
// check accessors |
for (PropertyAccessorElement accessor in _enclosingClass.accessors) { |
if (className == accessor.name) { |
- _errorReporter.reportErrorForOffset( |
- CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME, accessor.nameOffset, |
- className.length); |
+ _errorReporter.reportErrorForElement( |
+ CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME, accessor); |
problemReported = true; |
} |
} |
@@ -4046,11 +4100,12 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
// (if the getter is null, it is dynamic which is assignable to everything). |
if (setterType != null && |
getterType != null && |
- !getterType.isAssignableTo(setterType)) { |
+ !_typeSystem.isAssignableTo(getterType, setterType)) { |
if (enclosingClassForCounterpart == null) { |
_errorReporter.reportTypeErrorForNode( |
StaticWarningCode.MISMATCHED_GETTER_AND_SETTER_TYPES, |
- accessorDeclaration, [accessorTextName, setterType, getterType]); |
+ accessorDeclaration, |
+ [accessorTextName, setterType, getterType]); |
return true; |
} else { |
_errorReporter.reportTypeErrorForNode( |
@@ -4113,8 +4168,12 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
return false; |
} |
for (int i = 0; i < nameCount; i++) { |
- _errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.MISSING_ENUM_CONSTANT_IN_SWITCH, statement, |
+ int offset = statement.offset; |
+ int end = statement.rightParenthesis.end; |
+ _errorReporter.reportErrorForOffset( |
+ CompileTimeErrorCode.MISSING_ENUM_CONSTANT_IN_SWITCH, |
+ offset, |
+ end - offset, |
[constantNames[i]]); |
} |
return true; |
@@ -4158,7 +4217,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
for (ConstructorElement constructor in mixinElement.constructors) { |
if (!constructor.isSynthetic && !constructor.isFactory) { |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR, mixinName, |
+ CompileTimeErrorCode.MIXIN_DECLARES_CONSTRUCTOR, |
+ mixinName, |
[mixinElement.name]); |
return true; |
} |
@@ -4192,7 +4252,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (!mixinSupertype.isObject || |
!mixinElement.isMixinApplication && mixinElement.mixins.length != 0) { |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, mixinName, |
+ CompileTimeErrorCode.MIXIN_INHERITS_FROM_NOT_OBJECT, |
+ mixinName, |
[mixinElement.name]); |
return true; |
} |
@@ -4209,9 +4270,10 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
*/ |
bool _checkForMixinReferencesSuper( |
TypeName mixinName, ClassElement mixinElement) { |
- if (mixinElement.hasReferenceToSuper) { |
+ if (!enableSuperMixins && mixinElement.hasReferenceToSuper) { |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.MIXIN_REFERENCES_SUPER, mixinName, |
+ CompileTimeErrorCode.MIXIN_REFERENCES_SUPER, |
+ mixinName, |
[mixinElement.name]); |
} |
return false; |
@@ -4261,7 +4323,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
* See [StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR]. |
*/ |
bool _checkForNewWithUndefinedConstructor( |
- InstanceCreationExpression expression, ConstructorName constructorName, |
+ InstanceCreationExpression expression, |
+ ConstructorName constructorName, |
TypeName typeName) { |
// OK if resolved |
if (expression.staticElement != null) { |
@@ -4281,14 +4344,14 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
SimpleIdentifier name = constructorName.name; |
if (name != null) { |
_errorReporter.reportErrorForNode( |
- StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR, name, [ |
- className, |
- name |
- ]); |
+ StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR, |
+ name, |
+ [className, name]); |
} else { |
_errorReporter.reportErrorForNode( |
StaticWarningCode.NEW_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT, |
- constructorName, [className]); |
+ constructorName, |
+ [className]); |
} |
return true; |
} |
@@ -4324,7 +4387,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (superUnnamedConstructor != null) { |
if (superUnnamedConstructor.isFactory) { |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR, declaration.name, |
+ CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR, |
+ declaration.name, |
[superUnnamedConstructor]); |
return true; |
} |
@@ -4337,7 +4401,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
// report problem |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_IMPLICIT, |
- declaration.name, [superType.displayName]); |
+ declaration.name, |
+ [superType.displayName]); |
return true; |
} |
@@ -4433,7 +4498,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
FunctionType requiredMemberFT = _inheritanceManager |
.substituteTypeArgumentsInMemberFromInheritance( |
requiredMemberType, memberName, enclosingType); |
- if (foundConcreteFT.isSubtypeOf(requiredMemberFT)) { |
+ if (_typeSystem.isSubtypeOf(foundConcreteFT, requiredMemberFT)) { |
continue; |
} |
} |
@@ -4479,11 +4544,13 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (stringMembersArray.length == 1) { |
analysisError = _errorReporter.newErrorWithProperties( |
StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_ONE, |
- classNameNode, [stringMembersArray[0]]); |
+ classNameNode, |
+ [stringMembersArray[0]]); |
} else if (stringMembersArray.length == 2) { |
analysisError = _errorReporter.newErrorWithProperties( |
StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_TWO, |
- classNameNode, [stringMembersArray[0], stringMembersArray[1]]); |
+ classNameNode, |
+ [stringMembersArray[0], stringMembersArray[1]]); |
} else if (stringMembersArray.length == 3) { |
analysisError = _errorReporter.newErrorWithProperties( |
StaticWarningCode.NON_ABSTRACT_CLASS_INHERITS_ABSTRACT_MEMBER_THREE, |
@@ -4526,7 +4593,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
*/ |
bool _checkForNonBoolCondition(Expression condition) { |
DartType conditionType = getStaticType(condition); |
- if (conditionType != null && !conditionType.isAssignableTo(_boolType)) { |
+ if (conditionType != null && |
+ !_typeSystem.isAssignableTo(conditionType, _boolType)) { |
_errorReporter.reportErrorForNode( |
StaticTypeWarningCode.NON_BOOL_CONDITION, condition); |
return true; |
@@ -4544,7 +4612,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
Expression expression = statement.condition; |
DartType type = getStaticType(expression); |
if (type is InterfaceType) { |
- if (!type.isAssignableTo(_boolType)) { |
+ if (!_typeSystem.isAssignableTo(type, _boolType)) { |
_errorReporter.reportErrorForNode( |
StaticTypeWarningCode.NON_BOOL_EXPRESSION, expression); |
return true; |
@@ -4552,7 +4620,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} else if (type is FunctionType) { |
FunctionType functionType = type; |
if (functionType.typeArguments.length == 0 && |
- !functionType.returnType.isAssignableTo(_boolType)) { |
+ !_typeSystem.isAssignableTo(functionType.returnType, _boolType)) { |
_errorReporter.reportErrorForNode( |
StaticTypeWarningCode.NON_BOOL_EXPRESSION, expression); |
return true; |
@@ -4568,7 +4636,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
*/ |
bool _checkForNonBoolNegationExpression(Expression expression) { |
DartType conditionType = getStaticType(expression); |
- if (conditionType != null && !conditionType.isAssignableTo(_boolType)) { |
+ if (conditionType != null && |
+ !_typeSystem.isAssignableTo(conditionType, _boolType)) { |
_errorReporter.reportErrorForNode( |
StaticTypeWarningCode.NON_BOOL_NEGATION_EXPRESSION, expression); |
return true; |
@@ -4819,7 +4888,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.REDIRECT_GENERATIVE_TO_MISSING_CONSTRUCTOR, |
- invocation, [constructorStrName, enclosingTypeName]); |
+ invocation, |
+ [constructorStrName, enclosingTypeName]); |
} else { |
if (redirectingElement.isFactory) { |
_errorReporter.reportErrorForNode( |
@@ -4963,15 +5033,13 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
]); |
return true; |
} |
- if (staticReturnType.isAssignableTo(expectedReturnType)) { |
+ if (_typeSystem.isAssignableTo(staticReturnType, expectedReturnType)) { |
return false; |
} |
_errorReporter.reportTypeErrorForNode( |
- StaticTypeWarningCode.RETURN_OF_INVALID_TYPE, returnExpression, [ |
- staticReturnType, |
- expectedReturnType, |
- _enclosingFunction.displayName |
- ]); |
+ StaticTypeWarningCode.RETURN_OF_INVALID_TYPE, |
+ returnExpression, |
+ [staticReturnType, expectedReturnType, _enclosingFunction.displayName]); |
return true; |
// TODO(brianwilkerson) Define a hint corresponding to the warning and |
// report it if appropriate. |
@@ -5041,15 +5109,14 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
Expression caseExpression = switchCase.expression; |
DartType caseType = getStaticType(caseExpression); |
// check types |
- if (expressionType.isAssignableTo(caseType)) { |
+ if (_typeSystem.isAssignableTo(expressionType, caseType)) { |
return false; |
} |
// report problem |
_errorReporter.reportErrorForNode( |
- StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE, expression, [ |
- expressionType, |
- caseType |
- ]); |
+ StaticWarningCode.SWITCH_EXPRESSION_NOT_ASSIGNABLE, |
+ expression, |
+ [expressionType, caseType]); |
return true; |
} |
return false; |
@@ -5124,7 +5191,7 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
typeArguments.length == typeParameters.length) { |
boundType = boundType.substitute2(typeArguments, typeParameters); |
} |
- if (!argType.isSubtypeOf(boundType)) { |
+ if (!_typeSystem.isSubtypeOf(argType, boundType)) { |
ErrorCode errorCode; |
if (_isInConstInstanceCreation) { |
errorCode = CompileTimeErrorCode.TYPE_ARGUMENT_NOT_MATCHING_BOUNDS; |
@@ -5176,7 +5243,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
// report problem |
_errorReporter.reportErrorForNode( |
- StaticTypeWarningCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND, parameter, |
+ StaticTypeWarningCode.TYPE_PARAMETER_SUPERTYPE_OF_ITS_BOUND, |
+ parameter, |
[element.displayName]); |
return true; |
} |
@@ -5232,7 +5300,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (superUnnamedConstructor.isFactory) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.NON_GENERATIVE_CONSTRUCTOR, |
- constructor.returnType, [superUnnamedConstructor]); |
+ constructor.returnType, |
+ [superUnnamedConstructor]); |
return true; |
} |
if (!superUnnamedConstructor.isDefaultConstructor || |
@@ -5247,14 +5316,17 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
length = (name != null ? name.end : returnType.end) - offset; |
} |
_errorReporter.reportErrorForOffset( |
- CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT, offset, |
- length, [superType.displayName]); |
+ CompileTimeErrorCode.NO_DEFAULT_SUPER_CONSTRUCTOR_EXPLICIT, |
+ offset, |
+ length, |
+ [superType.displayName]); |
} |
return false; |
} |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.UNDEFINED_CONSTRUCTOR_IN_INITIALIZER_DEFAULT, |
- constructor.returnType, [superElement.name]); |
+ constructor.returnType, |
+ [superElement.name]); |
return true; |
} |
@@ -5283,7 +5355,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} |
_errorReporter.reportErrorForNode( |
StaticTypeWarningCode.UNQUALIFIED_REFERENCE_TO_NON_LOCAL_STATIC_MEMBER, |
- name, [name.name]); |
+ name, |
+ [name.name]); |
return true; |
} |
@@ -5294,7 +5367,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (fieldElement == null || fieldElement.isSynthetic) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD, |
- parameter, [parameter.identifier.name]); |
+ parameter, |
+ [parameter.identifier.name]); |
} else { |
ParameterElement parameterElement = parameter.element; |
if (parameterElement is FieldFormalParameterElementImpl) { |
@@ -5304,27 +5378,32 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (fieldElement.isSynthetic) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD, |
- parameter, [parameter.identifier.name]); |
+ parameter, |
+ [parameter.identifier.name]); |
} else if (fieldElement.isStatic) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD, |
- parameter, [parameter.identifier.name]); |
+ parameter, |
+ [parameter.identifier.name]); |
} else if (declaredType != null && |
fieldType != null && |
- !declaredType.isAssignableTo(fieldType)) { |
+ !_typeSystem.isAssignableTo(declaredType, fieldType)) { |
_errorReporter.reportTypeErrorForNode( |
StaticWarningCode.FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE, |
- parameter, [declaredType, fieldType]); |
+ parameter, |
+ [declaredType, fieldType]); |
} |
} else { |
if (fieldElement.isSynthetic) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD, |
- parameter, [parameter.identifier.name]); |
+ parameter, |
+ [parameter.identifier.name]); |
} else if (fieldElement.isStatic) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_STATIC_FIELD, |
- parameter, [parameter.identifier.name]); |
+ parameter, |
+ [parameter.identifier.name]); |
} |
} |
} |
@@ -5400,14 +5479,16 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (expected != -1 && numParameters != expected) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR, |
- nameNode, [name, expected, numParameters]); |
+ nameNode, |
+ [name, expected, numParameters]); |
return true; |
} |
// check for operator "-" |
if ("-" == name && numParameters > 1) { |
_errorReporter.reportErrorForNode( |
CompileTimeErrorCode.WRONG_NUMBER_OF_PARAMETERS_FOR_OPERATOR_MINUS, |
- nameNode, [numParameters]); |
+ nameNode, |
+ [numParameters]); |
return true; |
} |
// OK |
@@ -5467,12 +5548,11 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
impliedReturnType = |
_typeProvider.iterableType.substitute4(<DartType>[staticYieldedType]); |
} |
- if (!impliedReturnType.isAssignableTo(declaredReturnType)) { |
+ if (!_typeSystem.isAssignableTo(impliedReturnType, declaredReturnType)) { |
_errorReporter.reportTypeErrorForNode( |
- StaticTypeWarningCode.YIELD_OF_INVALID_TYPE, yieldExpression, [ |
- impliedReturnType, |
- declaredReturnType |
- ]); |
+ StaticTypeWarningCode.YIELD_OF_INVALID_TYPE, |
+ yieldExpression, |
+ [impliedReturnType, declaredReturnType]); |
return true; |
} |
if (isYieldEach) { |
@@ -5485,12 +5565,11 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
} else { |
requiredReturnType = _typeProvider.iterableDynamicType; |
} |
- if (!impliedReturnType.isAssignableTo(requiredReturnType)) { |
+ if (!_typeSystem.isAssignableTo(impliedReturnType, requiredReturnType)) { |
_errorReporter.reportTypeErrorForNode( |
- StaticTypeWarningCode.YIELD_OF_INVALID_TYPE, yieldExpression, [ |
- impliedReturnType, |
- requiredReturnType |
- ]); |
+ StaticTypeWarningCode.YIELD_OF_INVALID_TYPE, |
+ yieldExpression, |
+ [impliedReturnType, requiredReturnType]); |
return true; |
} |
} |
@@ -5511,7 +5590,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (classElement == null) { |
return false; |
} |
- if (!classElement.type.isSubtypeOf(_typeProvider.functionType)) { |
+ if (!_typeSystem.isSubtypeOf( |
+ classElement.type, _typeProvider.functionType)) { |
return false; |
} |
// If there is a noSuchMethod method, then don't report the warning, |
@@ -5555,7 +5635,8 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
if (interfaceNode.type == superType) { |
hasProblem = true; |
_errorReporter.reportErrorForNode( |
- CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS, interfaceNode, |
+ CompileTimeErrorCode.IMPLEMENTS_SUPER_CLASS, |
+ interfaceNode, |
[superType.displayName]); |
} |
} |
@@ -5874,20 +5955,17 @@ class ErrorVerifier extends RecursiveAstVisitor<Object> { |
buffer.write(separator); |
} |
buffer.write(element.displayName); |
- _errorReporter.reportErrorForOffset( |
+ _errorReporter.reportErrorForElement( |
CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE, |
- _enclosingClass.nameOffset, enclosingClassName.length, [ |
- enclosingClassName, |
- buffer.toString() |
- ]); |
+ _enclosingClass, |
+ [enclosingClassName, buffer.toString()]); |
return true; |
} else { |
// RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS or |
// RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS or |
// RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH |
- _errorReporter.reportErrorForOffset(_getBaseCaseErrorCode(element), |
- _enclosingClass.nameOffset, enclosingClassName.length, |
- [enclosingClassName]); |
+ _errorReporter.reportErrorForElement(_getBaseCaseErrorCode(element), |
+ _enclosingClass, [enclosingClassName]); |
return true; |
} |
} |