diff --git a/pkg/front_end/lib/src/fasta/builder/builder_mixins.dart b/pkg/front_end/lib/src/fasta/builder/builder_mixins.dart index 7dc7e0550b0..c757c5c387b 100644 --- a/pkg/front_end/lib/src/fasta/builder/builder_mixins.dart +++ b/pkg/front_end/lib/src/fasta/builder/builder_mixins.dart @@ -49,7 +49,7 @@ mixin DeclarationBuilderMixin implements IDeclarationBuilder { {required bool hasExplicitTypeArguments}) { return buildAliasedTypeWithBuiltArguments( library, - nullabilityBuilder.build(library), + nullabilityBuilder.build(), buildAliasedTypeArguments(library, arguments, hierarchy), typeUse, fileUri, diff --git a/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart index 3a2dc33effe..12d22e4dcf0 100644 --- a/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/builtin_type_declaration_builder.dart @@ -26,7 +26,7 @@ abstract class BuiltinTypeDeclarationBuilder extends TypeDeclarationBuilderImpl int charOffset, ClassHierarchyBase? hierarchy, {required bool hasExplicitTypeArguments}) { - return type.withDeclaredNullability(nullabilityBuilder.build(library)); + return type.withDeclaredNullability(nullabilityBuilder.build()); } @override diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart index 2ef4270d0fc..083b303c114 100644 --- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart @@ -379,7 +379,7 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl } return buildAliasedTypeWithBuiltArguments( library, - nullabilityBuilder.build(library), + nullabilityBuilder.build(), buildAliasedTypeArguments(library, arguments, hierarchy), typeUse, fileUri, diff --git a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart index 1df68baec45..31bea797d5b 100644 --- a/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/function_type_builder.dart @@ -175,8 +175,8 @@ abstract class FunctionTypeBuilderImpl extends FunctionTypeBuilder { t.bound?.build(library, TypeUse.typeParameterBound); } } - return new FunctionType(positionalParameters, builtReturnType, - nullabilityBuilder.build(library), + return new FunctionType( + positionalParameters, builtReturnType, nullabilityBuilder.build(), namedParameters: namedParameters ?? const [], typeParameters: typeParameters ?? const [], requiredParameterCount: requiredParameterCount); diff --git a/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart index 7ed0ed5ddfd..9111653d128 100644 --- a/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/future_or_type_declaration_builder.dart @@ -33,7 +33,7 @@ class FutureOrTypeDeclarationBuilder extends BuiltinTypeDeclarationBuilder { return new FutureOrType( arguments!.single .buildAliased(library, TypeUse.typeArgument, hierarchy), - nullabilityBuilder.build(library)); + nullabilityBuilder.build()); } @override diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart index a90c4339b6f..92eb5663844 100644 --- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart @@ -5,17 +5,11 @@ library fasta.library_builder; import 'package:_fe_analyzer_shared/src/messages/severity.dart' show Severity; - -import 'package:kernel/ast.dart' show Class, Library, Nullability; +import 'package:kernel/ast.dart' show Class, Library; import '../combinator.dart' show CombinatorBuilder; - -import '../problems.dart' show internalProblem; - import '../export.dart' show Export; - import '../loader.dart' show Loader; - import '../messages.dart' show FormattedMessage, @@ -24,9 +18,8 @@ import '../messages.dart' templateInternalProblemConstructorNotFound, templateInternalProblemNotFoundIn, templateInternalProblemPrivateConstructorAccess; - +import '../problems.dart' show internalProblem; import '../scope.dart'; - import '../source/name_scheme.dart'; import '../source/offset_map.dart'; import '../source/source_class_builder.dart'; @@ -39,7 +32,6 @@ import 'inferable_type_builder.dart'; import 'member_builder.dart'; import 'modifier_builder.dart'; import 'name_iterator.dart'; -import 'nullability_builder.dart'; import 'prefix_builder.dart'; import 'type_builder.dart'; @@ -268,17 +260,6 @@ abstract class LibraryBuilder implements Builder { void recordAccess( CompilationUnit accessor, int charOffset, int length, Uri fileUri); - Nullability get nullable; - - Nullability nullableIfTrue(bool isNullable); - - NullabilityBuilder get nullableBuilder; - - NullabilityBuilder get nonNullableBuilder; - - /// Unused in interface; left in on purpose. - NullabilityBuilder nullableBuilderIfTrue(bool isNullable); - /// Returns `true` if [cls] is the 'Function' class defined in [coreLibrary]. static bool isFunction(Class cls, LibraryBuilder coreLibrary) { return cls.name == 'Function' && _isCoreClass(cls, coreLibrary); @@ -474,33 +455,6 @@ abstract class LibraryBuilderImpl extends ModifierBuilderImpl void recordAccess( CompilationUnit accessor, int charOffset, int length, Uri fileUri) {} - @override - Nullability get nullable { - return Nullability.nullable; - } - - @override - Nullability nullableIfTrue(bool isNullable) { - return isNullable ? Nullability.nullable : Nullability.nonNullable; - } - - @override - NullabilityBuilder get nullableBuilder { - return const NullabilityBuilder.nullable(); - } - - @override - NullabilityBuilder get nonNullableBuilder { - return const NullabilityBuilder.omitted(); - } - - @override - NullabilityBuilder nullableBuilderIfTrue(bool isNullable) { - return isNullable - ? const NullabilityBuilder.nullable() - : const NullabilityBuilder.omitted(); - } - @override StringBuffer printOn(StringBuffer buffer) { return buffer..write(isPart || isAugmenting ? fileUri : importUri); diff --git a/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart index b0dcd23b666..bc2b0275807 100644 --- a/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/never_type_declaration_builder.dart @@ -34,7 +34,7 @@ class NeverTypeDeclarationBuilder extends BuiltinTypeDeclarationBuilder { int charOffset, ClassHierarchyBase? hierarchy, {required bool hasExplicitTypeArguments}) { - return type.withDeclaredNullability(nullabilityBuilder.build(library)); + return type.withDeclaredNullability(nullabilityBuilder.build()); } @override diff --git a/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart b/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart index daa11d5e6d4..f0b5ae9dbe0 100644 --- a/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/nullability_builder.dart @@ -4,8 +4,6 @@ import 'package:kernel/ast.dart'; -import 'library_builder.dart'; - /// Represents the nullability modifiers encountered while parsing the types. /// /// The syntactic nullability needs to be interpreted, that is, built, into the @@ -48,7 +46,7 @@ class NullabilityBuilder { } } - Nullability build(LibraryBuilder libraryBuilder) { + Nullability build() { switch (_syntacticNullability) { case SyntacticNullability.nullable: return Nullability.nullable; diff --git a/pkg/front_end/lib/src/fasta/builder/record_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/record_type_builder.dart index 63a55ed1db4..bdc5ddcdea3 100644 --- a/pkg/front_end/lib/src/fasta/builder/record_type_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/record_type_builder.dart @@ -256,8 +256,8 @@ abstract class RecordTypeBuilderImpl extends RecordTypeBuilder { // TODO(johnniwinther): Should we create an [InvalidType] if there is <= 1 // entries? - return new RecordType(positionalEntries, namedEntries ?? [], - nullabilityBuilder.build(library)); + return new RecordType( + positionalEntries, namedEntries ?? [], nullabilityBuilder.build()); } @override diff --git a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart index 74cccab2d84..b70721fa5f3 100644 --- a/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/type_alias_builder.dart @@ -182,7 +182,7 @@ abstract class TypeAliasBuilderImpl extends TypeDeclarationBuilderImpl DartType thisType = buildThisType(); if (thisType is InvalidType) return thisType; - Nullability nullability = nullabilityBuilder.build(library); + Nullability nullability = nullabilityBuilder.build(); return buildAliasedTypeWithBuiltArguments( library, nullability, @@ -373,7 +373,7 @@ abstract class TypeAliasBuilderImpl extends TypeDeclarationBuilderImpl if (typeVariables != null) for (NominalVariableBuilder typeVariable in typeVariables!) new NamedTypeBuilderImpl.fromTypeDeclarationBuilder( - typeVariable, libraryBuilder.nonNullableBuilder, + typeVariable, const NullabilityBuilder.omitted(), arguments: const [], fileUri: fileUri, charOffset: charOffset, diff --git a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart index 36926ce6b9c..de6c07ff927 100644 --- a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart @@ -366,7 +366,7 @@ class NominalVariableBuilder extends TypeVariableBuilderBase { nullability = nullabilityFromParameterBound; } } else { - nullability = nullabilityBuilder.build(library); + nullability = nullabilityBuilder.build(); } TypeParameterType type = buildAliasedTypeWithBuiltArguments( library, nullability, null, typeUse, fileUri, charOffset, @@ -403,7 +403,7 @@ class NominalVariableBuilder extends TypeVariableBuilderBase { if (isAugmenting) return; DartType objectType = object.buildAliasedType( library, - library.nullableBuilder, + const NullabilityBuilder.nullable(), /* arguments = */ null, TypeUse.typeParameterBound, fileUri ?? missingUri, @@ -705,7 +705,7 @@ class StructuralVariableBuilder extends TypeVariableBuilderBase { StructuralParameterType.computeNullabilityFromBound(parameter); } } else { - nullability = nullabilityBuilder.build(library); + nullability = nullabilityBuilder.build(); } StructuralParameterType type = buildAliasedTypeWithBuiltArguments( library, nullability, null, typeUse, fileUri, charOffset, @@ -753,7 +753,7 @@ class StructuralVariableBuilder extends TypeVariableBuilderBase { if (isAugmenting) return; DartType objectType = object.buildAliasedType( library, - library.nullableBuilder, + const NullabilityBuilder.nullable(), /* arguments = */ null, TypeUse.typeParameterBound, fileUri ?? missingUri, diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart index 4283043b967..15696f30997 100644 --- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart +++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart @@ -5052,7 +5052,9 @@ class BodyBuilder extends StackListenerImpl if (prefix is ParserErrorGenerator) { // An error have already been issued. push(prefix.buildTypeWithResolvedArgumentsDoNotAddProblem( - libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable))); + isMarkedAsNullable + ? const NullabilityBuilder.nullable() + : const NullabilityBuilder.omitted())); return; } else if (prefix is Generator) { name = prefix.qualifiedLookup(suffix); @@ -5065,7 +5067,9 @@ class BodyBuilder extends StackListenerImpl message, offset, lengthOfSpan(beginToken, suffix), uri); push(new NamedTypeBuilderImpl.forInvalidType( name, - libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable), + isMarkedAsNullable + ? const NullabilityBuilder.nullable() + : const NullabilityBuilder.omitted(), message.withLocation( uri, offset, lengthOfSpan(beginToken, suffix)))); return; @@ -5080,7 +5084,10 @@ class BodyBuilder extends StackListenerImpl allowPotentiallyConstantType = inIsOrAsOperatorType; } result = name.buildTypeWithResolvedArguments( - libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable), arguments, + isMarkedAsNullable + ? const NullabilityBuilder.nullable() + : const NullabilityBuilder.omitted(), + arguments, allowPotentiallyConstantType: allowPotentiallyConstantType, performTypeCanonicalization: constantContext != ConstantContext.none); } else if (name is ProblemBuilder) { @@ -5089,7 +5096,9 @@ class BodyBuilder extends StackListenerImpl name.message, name.charOffset, name.name.length, name.fileUri); result = new NamedTypeBuilderImpl.forInvalidType( name.name, - libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable), + isMarkedAsNullable + ? const NullabilityBuilder.nullable() + : const NullabilityBuilder.omitted(), name.message .withLocation(name.fileUri, name.charOffset, name.name.length)); } else { @@ -5178,8 +5187,8 @@ class BodyBuilder extends StackListenerImpl positionalFields, namedFields, questionMark != null - ? libraryBuilder.nullableBuilder - : libraryBuilder.nonNullableBuilder, + ? const NullabilityBuilder.nullable() + : const NullabilityBuilder.omitted(), uri, leftBracket.charOffset, )); @@ -5235,7 +5244,9 @@ class BodyBuilder extends StackListenerImpl pop() as List?; TypeBuilder type = formals.toFunctionType( returnType ?? const ImplicitTypeBuilder(), - libraryBuilder.nullableBuilderIfTrue(questionMark != null), + questionMark != null + ? const NullabilityBuilder.nullable() + : const NullabilityBuilder.omitted(), structuralVariableBuilders: typeVariables, hasFunctionFormalParameterSyntax: false); exitLocalScope(); @@ -5547,7 +5558,9 @@ class BodyBuilder extends StackListenerImpl pop() as List?; TypeBuilder type = formals.toFunctionType( returnType ?? const ImplicitTypeBuilder(), - libraryBuilder.nullableBuilderIfTrue(question != null), + question != null + ? const NullabilityBuilder.nullable() + : const NullabilityBuilder.omitted(), structuralVariableBuilders: typeVariables, hasFunctionFormalParameterSyntax: true); exitLocalScope(); @@ -9297,7 +9310,7 @@ class BodyBuilder extends StackListenerImpl expression = new Let( new VariableDeclaration.forValue(argument, isFinal: true, - type: coreTypes.objectRawType(libraryBuilder.nullable)), + type: coreTypes.objectRawType(Nullability.nullable)), expression); } return expression; diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart index 1af39bda4fd..de17c303c5c 100644 --- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart +++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart @@ -3064,7 +3064,7 @@ class TypeUseGenerator extends AbstractReadOnlyAccessGenerator { offsetForToken(token), _helper.buildDartType( buildTypeWithResolvedArguments( - _helper.libraryBuilder.nonNullableBuilder, typeArguments, + const NullabilityBuilder.omitted(), typeArguments, allowPotentiallyConstantType: true, performTypeCanonicalization: true), TypeUse.typeLiteral, diff --git a/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart b/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart index e63aaca9575..7420a64ed0c 100644 --- a/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart +++ b/pkg/front_end/lib/src/fasta/kernel/macro/identifiers.dart @@ -118,7 +118,7 @@ class TypeBuilderIdentifier extends IdentifierImpl { NullabilityBuilder nullabilityBuilder, List typeArguments) { return typeBuilder.declaration!.buildAliasedTypeWithBuiltArguments( libraryBuilder, - nullabilityBuilder.build(libraryBuilder), + nullabilityBuilder.build(), typeArguments, TypeUse.macroTypeArgument, // TODO(johnniwinther): How should handle malbounded types here? Should @@ -180,7 +180,7 @@ class TypeDeclarationBuilderIdentifier extends IdentifierImpl { NullabilityBuilder nullabilityBuilder, List typeArguments) { return typeDeclarationBuilder.buildAliasedTypeWithBuiltArguments( libraryBuilder, - nullabilityBuilder.build(libraryBuilder), + nullabilityBuilder.build(), // TODO(johnniwinther): How should handle malbounded types here? Should // we report an error on the annotation? typeArguments, diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart index ff08984374c..afae9196c04 100644 --- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart @@ -1327,8 +1327,7 @@ class OutlineBuilder extends StackListenerImpl { String classNameForErrors = identifier.name; if (supertype != null) { - if (supertype.nullabilityBuilder.build(libraryBuilder) == - Nullability.nullable) { + if (supertype.nullabilityBuilder.build() == Nullability.nullable) { libraryBuilder.addProblem( templateNullableSuperclassError .withArguments(supertype.fullNameForErrors), @@ -1340,8 +1339,7 @@ class OutlineBuilder extends StackListenerImpl { if (mixinApplication != null) { List? mixins = mixinApplication.mixins; for (TypeBuilder mixin in mixins) { - if (mixin.nullabilityBuilder.build(libraryBuilder) == - Nullability.nullable) { + if (mixin.nullabilityBuilder.build() == Nullability.nullable) { libraryBuilder.addProblem( templateNullableMixinError .withArguments(mixin.fullNameForErrors), @@ -1353,8 +1351,7 @@ class OutlineBuilder extends StackListenerImpl { } if (interfaces != null) { for (TypeBuilder interface in interfaces) { - if (interface.nullabilityBuilder.build(libraryBuilder) == - Nullability.nullable) { + if (interface.nullabilityBuilder.build() == Nullability.nullable) { libraryBuilder.addProblem( templateNullableInterfaceError .withArguments(interface.fullNameForErrors), @@ -1437,8 +1434,7 @@ class OutlineBuilder extends StackListenerImpl { String classNameForErrors = identifier.name; if (supertypeConstraints != null) { for (TypeBuilder supertype in supertypeConstraints) { - if (supertype.nullabilityBuilder.build(libraryBuilder) == - Nullability.nullable) { + if (supertype.nullabilityBuilder.build() == Nullability.nullable) { libraryBuilder.addProblem( templateNullableSuperclassError .withArguments(supertype.fullNameForErrors), @@ -1450,8 +1446,7 @@ class OutlineBuilder extends StackListenerImpl { } if (interfaces != null) { for (TypeBuilder interface in interfaces) { - if (interface.nullabilityBuilder.build(libraryBuilder) == - Nullability.nullable) { + if (interface.nullabilityBuilder.build() == Nullability.nullable) { libraryBuilder.addProblem( templateNullableInterfaceError .withArguments(interface.fullNameForErrors), @@ -2515,8 +2510,7 @@ class OutlineBuilder extends StackListenerImpl { mixinApplication as MixinApplicationBuilder; List mixins = mixinApplicationBuilder.mixins; if (supertype is TypeBuilder && supertype is! MixinApplicationBuilder) { - if (supertype.nullabilityBuilder.build(libraryBuilder) == - Nullability.nullable) { + if (supertype.nullabilityBuilder.build() == Nullability.nullable) { libraryBuilder.addProblem( templateNullableSuperclassError .withArguments(supertype.fullNameForErrors), @@ -2526,8 +2520,7 @@ class OutlineBuilder extends StackListenerImpl { } } for (TypeBuilder mixin in mixins) { - if (mixin.nullabilityBuilder.build(libraryBuilder) == - Nullability.nullable) { + if (mixin.nullabilityBuilder.build() == Nullability.nullable) { libraryBuilder.addProblem( templateNullableMixinError.withArguments(mixin.fullNameForErrors), identifier.nameOffset, @@ -2537,8 +2530,7 @@ class OutlineBuilder extends StackListenerImpl { } if (interfaces != null) { for (TypeBuilder interface in interfaces) { - if (interface.nullabilityBuilder.build(libraryBuilder) == - Nullability.nullable) { + if (interface.nullabilityBuilder.build() == Nullability.nullable) { libraryBuilder.addProblem( templateNullableInterfaceError .withArguments(interface.fullNameForErrors), @@ -2622,7 +2614,9 @@ class OutlineBuilder extends StackListenerImpl { Identifier identifier = name as Identifier; push(libraryBuilder.addNamedType( identifier.typeName, - libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable), + isMarkedAsNullable + ? const NullabilityBuilder.nullable() + : const NullabilityBuilder.omitted(), arguments, identifier.qualifierOffset, instanceTypeVariableAccess: @@ -3059,8 +3053,7 @@ class OutlineBuilder extends StackListenerImpl { } if (interfaces != null) { for (TypeBuilder interface in interfaces) { - if (interface.nullabilityBuilder.build(libraryBuilder) == - Nullability.nullable) { + if (interface.nullabilityBuilder.build() == Nullability.nullable) { libraryBuilder.addProblem( templateNullableInterfaceError .withArguments(interface.fullNameForErrors), @@ -3150,8 +3143,8 @@ class OutlineBuilder extends StackListenerImpl { positionalFields, namedFields, questionMark != null - ? libraryBuilder.nullableBuilder - : libraryBuilder.nonNullableBuilder, + ? const NullabilityBuilder.nullable() + : const NullabilityBuilder.omitted(), uri, leftBracket.charOffset, )); @@ -3208,7 +3201,9 @@ class OutlineBuilder extends StackListenerImpl { returnType ?? const ImplicitTypeBuilder(), typeVariables, formals, - libraryBuilder.nullableBuilderIfTrue(questionMark != null), + questionMark != null + ? const NullabilityBuilder.nullable() + : const NullabilityBuilder.omitted(), uri, functionToken.charOffset, hasFunctionFormalParameterSyntax: false)); @@ -3227,7 +3222,9 @@ class OutlineBuilder extends StackListenerImpl { returnType ?? const ImplicitTypeBuilder(), typeVariables, formals, - libraryBuilder.nullableBuilderIfTrue(question != null), + question != null + ? const NullabilityBuilder.nullable() + : const NullabilityBuilder.omitted(), uri, formalsOffset, hasFunctionFormalParameterSyntax: true)); @@ -3311,8 +3308,7 @@ class OutlineBuilder extends StackListenerImpl { identifier = name as Identifier; if (type is FunctionTypeBuilder && !libraryFeatures.nonfunctionTypeAliases.isEnabled) { - if (type.nullabilityBuilder.build(libraryBuilder) == - Nullability.nullable) { + if (type.nullabilityBuilder.build() == Nullability.nullable) { // The error is reported when the non-nullable experiment is enabled. // Otherwise, the attempt to use a nullable type will be reported // elsewhere. diff --git a/pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart b/pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart index 7c1a3fa17da..a92b8d657d3 100644 --- a/pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart +++ b/pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart @@ -2194,7 +2194,9 @@ class InferenceVisitorImpl extends InferenceVisitorBase element.expression, new InterfaceType( coreTypes.iterableClass, - libraryBuilder.nullableIfTrue(element.isNullAware), + element.isNullAware + ? Nullability.nullable + : Nullability.nonNullable, [inferredTypeArgument]), isVoidAllowed: true); element.expression = spreadResult.expression..parent = element; @@ -2601,8 +2603,9 @@ class InferenceVisitorImpl extends InferenceVisitorBase DartType? spreadType = inferredSpreadTypes[item.expression]; if (spreadType is DynamicType) { Expression expression = ensureAssignable( - coreTypes.iterableRawType( - libraryBuilder.nullableIfTrue(item.isNullAware)), + coreTypes.iterableRawType(item.isNullAware + ? Nullability.nullable + : Nullability.nonNullable), spreadType, item.expression); item.expression = expression..parent = item; @@ -3032,7 +3035,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase temp = _createVariable( value, typeSchemaEnvironment.iterableType( - elementType, libraryBuilder.nullable)); + elementType, Nullability.nullable)); body.add(temp); value = _createNullCheckedVariableGet(temp); } @@ -3059,7 +3062,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase temp = _createVariable( value, typeSchemaEnvironment.iterableType( - const DynamicType(), libraryBuilder.nullable)); + const DynamicType(), Nullability.nullable)); body.add(temp); value = _createNullCheckedVariableGet(temp); } @@ -3382,7 +3385,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase temp = _createVariable( value, typeSchemaEnvironment.mapType( - keyType, valueType, libraryBuilder.nullable)); + keyType, valueType, Nullability.nullable)); body.add(temp); value = _createNullCheckedVariableGet(temp); } @@ -3408,7 +3411,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase temp = _createVariable( value, typeSchemaEnvironment.mapType(const DynamicType(), - const DynamicType(), libraryBuilder.nullable)); + const DynamicType(), Nullability.nullable)); body.add(temp); value = _createNullCheckedVariableGet(temp); } @@ -3510,7 +3513,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase VariableDeclaration temp = _createVariable( spreadExpression, typeSchemaEnvironment.iterableType( - elementType, libraryBuilder.nullable)); + elementType, Nullability.nullable)); parts.add(_createNullAwareGuard(element.fileOffset, temp, makeLiteral(element.fileOffset, []), iterableType)); } else { @@ -3584,7 +3587,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase Expression spreadExpression = entry.expression; if (entry.isNullAware) { VariableDeclaration temp = _createVariable(spreadExpression, - collectionType.withDeclaredNullability(libraryBuilder.nullable)); + collectionType.withDeclaredNullability(Nullability.nullable)); parts.add(_createNullAwareGuard(entry.fileOffset, temp, makeLiteral(entry.fileOffset, []), collectionType)); } else { @@ -4045,11 +4048,11 @@ class InferenceVisitorImpl extends InferenceVisitorBase bool isMap = typeSchemaEnvironment.isSubtypeOf( spreadType, - coreTypes.mapRawType(libraryBuilder.nullable), + coreTypes.mapRawType(Nullability.nullable), SubtypeCheckMode.withNullabilities); bool isIterable = typeSchemaEnvironment.isSubtypeOf( spreadType, - coreTypes.iterableRawType(libraryBuilder.nullable), + coreTypes.iterableRawType(Nullability.nullable), SubtypeCheckMode.withNullabilities); if (isMap && !isIterable) { offsets.mapSpreadOffset = entry.fileOffset; @@ -4530,8 +4533,9 @@ class InferenceVisitorImpl extends InferenceVisitorBase DartType? spreadType = inferredSpreadTypes[entry.expression]; if (spreadType is DynamicType) { Expression expression = ensureAssignable( - coreTypes - .mapRawType(libraryBuilder.nullableIfTrue(entry.isNullAware)), + coreTypes.mapRawType(entry.isNullAware + ? Nullability.nullable + : Nullability.nonNullable), spreadType, entry.expression); entry.expression = expression..parent = entry; @@ -6072,7 +6076,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase DartType rightType = operations.getNullableType(equalsTarget.getBinaryOperandType(this)); DartType contextType = - rightType.withDeclaredNullability(libraryBuilder.nullable); + rightType.withDeclaredNullability(Nullability.nullable); rightResult = ensureAssignableResult(contextType, rightResult, errorTemplate: templateArgumentTypeNotAssignable, nullabilityErrorTemplate: templateArgumentTypeNotAssignableNullability, @@ -8986,7 +8990,7 @@ class InferenceVisitorImpl extends InferenceVisitorBase CheckLibraryIsLoaded node, DartType typeContext) { // TODO(cstefantsova): Figure out the suitable nullability for that. return new ExpressionInferenceResult( - coreTypes.objectRawType(libraryBuilder.nullable), node); + coreTypes.objectRawType(Nullability.nullable), node); } ExpressionInferenceResult visitEquals( diff --git a/pkg/front_end/lib/src/fasta/type_inference/inference_visitor_base.dart b/pkg/front_end/lib/src/fasta/type_inference/inference_visitor_base.dart index bd0d0a006ab..b931f794a73 100644 --- a/pkg/front_end/lib/src/fasta/type_inference/inference_visitor_base.dart +++ b/pkg/front_end/lib/src/fasta/type_inference/inference_visitor_base.dart @@ -2097,7 +2097,7 @@ abstract class InferenceVisitorBase implements InferenceVisitor { formalTypesFromContext[i]!); if (typeSchemaEnvironment.isSubtypeOf(inferredType, const NullType(), SubtypeCheckMode.withNullabilities)) { - inferredType = coreTypes.objectRawType(libraryBuilder.nullable); + inferredType = coreTypes.objectRawType(Nullability.nullable); } } else { inferredType = const DynamicType(); @@ -3381,7 +3381,7 @@ abstract class InferenceVisitorBase implements InferenceVisitor { // operator == always allows nullable arguments. functionType = new FunctionType([ functionType.positionalParameters.single - .withDeclaredNullability(libraryBuilder.nullable) + .withDeclaredNullability(Nullability.nullable) ], functionType.returnType, functionType.declaredNullability); } InvocationInferenceResult result = inferInvocation( diff --git a/pkg/front_end/test/coverage_suite_expected.dart b/pkg/front_end/test/coverage_suite_expected.dart index d15eea477ac..d2fe5f7a4c1 100644 --- a/pkg/front_end/test/coverage_suite_expected.dart +++ b/pkg/front_end/test/coverage_suite_expected.dart @@ -185,9 +185,9 @@ const Map _expect = { hitCount: 17, missCount: 3, ), - // 80.85106382978722%. + // 79.7752808988764%. "package:front_end/src/fasta/builder/library_builder.dart": ( - hitCount: 76, + hitCount: 71, missCount: 18, ), // 97.38562091503267%. @@ -250,9 +250,9 @@ const Map _expect = { hitCount: 151, missCount: 44, ), - // 78.99159663865547%. + // 78.8135593220339%. "package:front_end/src/fasta/builder/type_alias_builder.dart": ( - hitCount: 188, + hitCount: 186, missCount: 50, ), // 77.77777777777779%. @@ -265,9 +265,9 @@ const Map _expect = { hitCount: 9, missCount: 1, ), - // 78.42227378190255%. + // 78.32167832167832%. "package:front_end/src/fasta/builder/type_variable_builder.dart": ( - hitCount: 338, + hitCount: 336, missCount: 93, ), // 100.0%. @@ -421,9 +421,9 @@ const Map _expect = { hitCount: 0, missCount: 128, ), - // 91.26941617568292%. + // 91.24832214765101%. "package:front_end/src/fasta/kernel/body_builder.dart": ( - hitCount: 6816, + hitCount: 6798, missCount: 652, ), // 70.40816326530613%. @@ -471,9 +471,9 @@ const Map _expect = { hitCount: 478, missCount: 163, ), - // 79.56411876184461%. + // 79.54473601011698%. "package:front_end/src/fasta/kernel/expression_generator.dart": ( - hitCount: 2519, + hitCount: 2516, missCount: 647, ), // 100.0%. @@ -589,7 +589,7 @@ const Map _expect = { // 0.0%. "package:front_end/src/fasta/kernel/macro/identifiers.dart": ( hitCount: 0, - missCount: 134, + missCount: 132, ), // 0.0%. "package:front_end/src/fasta/kernel/macro/introspectors.dart": ( @@ -706,9 +706,9 @@ const Map _expect = { hitCount: 118, missCount: 6, ), - // 91.45299145299145%. + // 91.38284776364382%. "package:front_end/src/fasta/source/outline_builder.dart": ( - hitCount: 2247, + hitCount: 2227, missCount: 210, ), // 94.44444444444444%. @@ -827,14 +827,14 @@ const Map _expect = { hitCount: 166, missCount: 29, ), - // 90.25658807212206%. + // 90.25040575005796%. "package:front_end/src/fasta/type_inference/inference_visitor.dart": ( - hitCount: 7809, - missCount: 843, + hitCount: 7785, + missCount: 841, ), - // 84.56303724928367%. + // 84.54088952654233%. "package:front_end/src/fasta/type_inference/inference_visitor_base.dart": ( - hitCount: 2361, + hitCount: 2357, missCount: 431, ), // 80.26509572901325%.