| 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;
|
| }
|
| }
|
|
|