@@ -291,7 +291,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
291291 /// fixed.
292292 final bool disableConflictingGenericsCheck;
293293
294- bool _isNonNullable = false ;
294+ /// The features enabled in the unit currently being checked for errors.
295+ FeatureSet _featureSet;
295296
296297 /**
297298 * Initialize a newly created error verifier.
@@ -343,6 +344,9 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
343344 _enclosingClass = classElement;
344345 }
345346
347+ bool get _isNonNullable =>
348+ _featureSet? .isEnabled (Feature .non_nullable) ?? false ;
349+
346350 @override
347351 void visitAnnotation (Annotation node) {
348352 _checkForInvalidAnnotationFromDeferredLibrary (node);
@@ -558,11 +562,11 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
558562
559563 @override
560564 void visitCompilationUnit (CompilationUnit node) {
561- _isNonNullable = node.featureSet. isEnabled ( Feature .non_nullable) ;
565+ _featureSet = node.featureSet;
562566 _checkDuplicateUnitMembers (node);
563567 _checkForDeferredPrefixCollisions (node);
564568 super .visitCompilationUnit (node);
565- _isNonNullable = false ;
569+ _featureSet = null ;
566570 }
567571
568572 @override
@@ -2103,8 +2107,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
21032107 FunctionType constructorType =
21042108 resolutionMap.elementDeclaredByConstructorDeclaration (declaration).type;
21052109 DartType constructorReturnType = constructorType.returnType;
2106- if (! _typeSystem.isAssignableTo (
2107- redirectedReturnType, constructorReturnType )) {
2110+ if (! _typeSystem.isAssignableTo (redirectedReturnType, constructorReturnType,
2111+ featureSet : _featureSet )) {
21082112 _errorReporter.reportErrorForNode (
21092113 StaticWarningCode .REDIRECT_TO_INVALID_RETURN_TYPE ,
21102114 redirectedConstructor,
@@ -2323,7 +2327,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
23232327 if (expressionType == null ) {
23242328 return ;
23252329 }
2326- if (_typeSystem.isAssignableTo (expressionType, type)) {
2330+ if (_typeSystem.isAssignableTo (expressionType, type,
2331+ featureSet: _featureSet)) {
23272332 return ;
23282333 }
23292334 _errorReporter.reportErrorForNode (errorCode, expression, arguments);
@@ -2342,7 +2347,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
23422347 DartType actualStaticType,
23432348 DartType expectedStaticType,
23442349 ErrorCode errorCode) {
2345- if (! _typeSystem.isAssignableTo (actualStaticType, expectedStaticType)) {
2350+ if (! _typeSystem.isAssignableTo (actualStaticType, expectedStaticType,
2351+ featureSet: _featureSet)) {
23462352 _errorReporter.reportTypeErrorForNode (
23472353 errorCode, expression, [actualStaticType, expectedStaticType]);
23482354 return false ;
@@ -3049,7 +3055,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
30493055 StaticTypeWarningCode .FOR_IN_OF_INVALID_TYPE ,
30503056 node.iterable,
30513057 [iterableType, loopTypeName]);
3052- } else if (! _typeSystem.isAssignableTo (bestIterableType, variableType)) {
3058+ } else if (! _typeSystem.isAssignableTo (bestIterableType, variableType,
3059+ featureSet: _featureSet)) {
30533060 _errorReporter.reportTypeErrorForNode (
30543061 StaticTypeWarningCode .FOR_IN_OF_INVALID_ELEMENT_TYPE ,
30553062 node.iterable,
@@ -3223,7 +3230,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
32233230 if (staticType == null ) {
32243231 return ;
32253232 }
3226- if (_typeSystem.isAssignableTo (staticType, fieldType)) {
3233+ if (_typeSystem.isAssignableTo (staticType, fieldType,
3234+ featureSet: _featureSet)) {
32273235 return ;
32283236 }
32293237 // report problem
@@ -3847,7 +3855,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
38473855 }
38483856 DartType leftType = getStaticType (lhs);
38493857 DartType rightType = getStaticType (assignment);
3850- if (! _typeSystem.isAssignableTo (rightType, leftType)) {
3858+ if (! _typeSystem.isAssignableTo (rightType, leftType,
3859+ featureSet: _featureSet)) {
38513860 _errorReporter.reportTypeErrorForNode (
38523861 StaticTypeWarningCode .INVALID_ASSIGNMENT , rhs, [rightType, leftType]);
38533862 }
@@ -3960,6 +3969,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
39603969 _checkForUseOfVoidResult,
39613970 forList: true ,
39623971 elementType: listElementType,
3972+ featureSet: _featureSet,
39633973 );
39643974 for (CollectionElement element in literal.elements) {
39653975 verifier.verify (element);
@@ -3995,6 +4005,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
39954005 forMap: true ,
39964006 mapKeyType: keyType,
39974007 mapValueType: valueType,
4008+ featureSet: _featureSet,
39984009 );
39994010 for (CollectionElement element in literal.elements) {
40004011 verifier.verify (element);
@@ -4069,7 +4080,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
40694080 // (if the getter is null, it is dynamic which is assignable to everything).
40704081 if (setterType != null &&
40714082 getterType != null &&
4072- ! _typeSystem.isAssignableTo (getterType, setterType)) {
4083+ ! _typeSystem.isAssignableTo (getterType, setterType,
4084+ featureSet: _featureSet)) {
40734085 _errorReporter.reportTypeErrorForNode (
40744086 StaticWarningCode .MISMATCHED_GETTER_AND_SETTER_TYPES ,
40754087 accessorDeclaration,
@@ -4539,7 +4551,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
45394551 if (! _checkForNullableDereference (condition) &&
45404552 ! _checkForUseOfVoidResult (condition) &&
45414553 conditionType != null &&
4542- ! _typeSystem.isAssignableTo (conditionType, _boolType)) {
4554+ ! _typeSystem.isAssignableTo (conditionType, _boolType,
4555+ featureSet: _featureSet)) {
45434556 _errorReporter.reportErrorForNode (
45444557 StaticTypeWarningCode .NON_BOOL_CONDITION , condition);
45454558 }
@@ -4555,7 +4568,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
45554568 Expression expression = assertion.condition;
45564569 DartType type = getStaticType (expression);
45574570 if (type is InterfaceType ) {
4558- if (! _typeSystem.isAssignableTo (type, _boolType)) {
4571+ if (! _typeSystem.isAssignableTo (type, _boolType,
4572+ featureSet: _featureSet)) {
45594573 _errorReporter.reportErrorForNode (
45604574 StaticTypeWarningCode .NON_BOOL_EXPRESSION , expression);
45614575 }
@@ -4573,7 +4587,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
45734587 void _checkForNonBoolNegationExpression (Expression expression) {
45744588 DartType conditionType = getStaticType (expression);
45754589 if (conditionType != null &&
4576- ! _typeSystem.isAssignableTo (conditionType, _boolType)) {
4590+ ! _typeSystem.isAssignableTo (conditionType, _boolType,
4591+ featureSet: _featureSet)) {
45774592 _errorReporter.reportErrorForNode (
45784593 StaticTypeWarningCode .NON_BOOL_NEGATION_EXPRESSION , expression);
45794594 }
@@ -5162,7 +5177,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
51625177 var checkWithType = (! _inAsync)
51635178 ? fromType
51645179 : _typeProvider.futureType.instantiate (< DartType > [fromType]);
5165- if (_typeSystem.isAssignableTo (checkWithType, expectedType)) {
5180+ if (_typeSystem.isAssignableTo (checkWithType, expectedType,
5181+ featureSet: _featureSet)) {
51665182 return ;
51675183 }
51685184 }
@@ -5200,6 +5216,7 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
52005216 _checkForUseOfVoidResult,
52015217 forSet: true ,
52025218 elementType: setElementType,
5219+ featureSet: _featureSet,
52035220 );
52045221 for (CollectionElement element in literal.elements) {
52055222 verifier.verify (element);
@@ -5266,7 +5283,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
52665283 DartType caseType = getStaticType (caseExpression);
52675284
52685285 // check types
5269- if (! _typeSystem.isAssignableTo (expressionType, caseType)) {
5286+ if (! _typeSystem.isAssignableTo (expressionType, caseType,
5287+ featureSet: _featureSet)) {
52705288 _errorReporter.reportErrorForNode (
52715289 StaticWarningCode .SWITCH_EXPRESSION_NOT_ASSIGNABLE ,
52725290 expression,
@@ -5592,7 +5610,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
55925610 [parameter.identifier.name]);
55935611 } else if (declaredType != null &&
55945612 fieldType != null &&
5595- ! _typeSystem.isAssignableTo (declaredType, fieldType)) {
5613+ ! _typeSystem.isAssignableTo (declaredType, fieldType,
5614+ featureSet: _featureSet)) {
55965615 _errorReporter.reportTypeErrorForNode (
55975616 StaticWarningCode .FIELD_INITIALIZING_FORMAL_NOT_ASSIGNABLE ,
55985617 parameter,
@@ -5741,7 +5760,8 @@ class ErrorVerifier extends RecursiveAstVisitor<void> {
57415760 } else {
57425761 requiredReturnType = _typeProvider.iterableDynamicType;
57435762 }
5744- if (! _typeSystem.isAssignableTo (impliedReturnType, requiredReturnType)) {
5763+ if (! _typeSystem.isAssignableTo (impliedReturnType, requiredReturnType,
5764+ featureSet: _featureSet)) {
57455765 _errorReporter.reportTypeErrorForNode (
57465766 StaticTypeWarningCode .YIELD_OF_INVALID_TYPE ,
57475767 yieldExpression,
0 commit comments