From 3171c7cc0eaae3a74a2ec34954fbb83b5f1ccd27 Mon Sep 17 00:00:00 2001 From: Johnni Winther Date: Wed, 6 Oct 2021 07:39:34 +0000 Subject: [PATCH] [cfe] Remove UnresolvedType All NamedTypeBuilder objects from user code contain the needed file uri and char offset. Change-Id: Ia067c5ef740967302aa207eaf2d46fc2f75c1c8f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/215600 Reviewed-by: Jens Johansen Commit-Queue: Johnni Winther --- .../lib/src/parser/stack_listener.dart | 4 +- .../src/fasta/builder/fixed_type_builder.dart | 3 +- .../builder/formal_parameter_builder.dart | 3 +- .../fasta/builder/function_type_builder.dart | 7 +- .../builder/mixin_application_builder.dart | 3 +- .../src/fasta/builder/named_type_builder.dart | 2 +- .../lib/src/fasta/builder/type_builder.dart | 3 +- .../fasta/builder/type_variable_builder.dart | 3 +- .../src/fasta/builder/unresolved_type.dart | 31 ---- .../lib/src/fasta/kernel/body_builder.dart | 169 ++++++++---------- .../fasta/kernel/expression_generator.dart | 107 +++++------ .../kernel/expression_generator_helper.dart | 16 +- pkg/front_end/lib/src/fasta/kernel/utils.dart | 3 - .../lib/src/fasta/source/outline_builder.dart | 26 ++- .../fasta/source/source_library_builder.dart | 157 ++++++++-------- .../lib/src/fasta/source/value_kinds.dart | 9 +- .../lib/src/testing/id_testing_utils.dart | 2 +- .../test/explicit_creation_git_test.dart | 4 +- 18 files changed, 248 insertions(+), 304 deletions(-) delete mode 100644 pkg/front_end/lib/src/fasta/builder/unresolved_type.dart diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart index 1d103e58e10..245bef32a01 100644 --- a/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart +++ b/pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart @@ -65,11 +65,11 @@ enum NullValue { Token, Type, TypeArguments, + TypeBuilder, TypeBuilderList, TypeList, TypeVariable, TypeVariables, - UnresolvedType, VarFinalOrConstToken, WithClause, } @@ -377,7 +377,7 @@ abstract class StackListener extends Listener { @override void handleNoType(Token lastConsumed) { debugEvent("NoType"); - push(NullValue.UnresolvedType); + push(NullValue.TypeBuilder); } @override diff --git a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart index 740fde3f234..74797c3b85d 100644 --- a/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/fixed_type_builder.dart @@ -7,6 +7,7 @@ import 'package:kernel/ast.dart'; import '../problems.dart'; import '../source/source_library_builder.dart'; import 'library_builder.dart'; +import 'named_type_builder.dart'; import 'nullability_builder.dart'; import 'type_builder.dart'; @@ -21,7 +22,7 @@ class FixedTypeBuilder extends TypeBuilder { @override TypeBuilder clone( - List newTypes, + List newTypes, SourceLibraryBuilder contextLibrary, TypeParameterScopeBuilder contextDeclaration) { return this; diff --git a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart index 42c1ce66cfa..3e47192f4a8 100644 --- a/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/formal_parameter_builder.dart @@ -42,6 +42,7 @@ import 'field_builder.dart'; import 'library_builder.dart'; import 'metadata_builder.dart'; import 'modifier_builder.dart'; +import 'named_type_builder.dart'; import 'type_builder.dart'; import 'variable_builder.dart'; @@ -150,7 +151,7 @@ class FormalParameterBuilder extends ModifierBuilderImpl } FormalParameterBuilder clone( - List newTypes, + List newTypes, SourceLibraryBuilder contextLibrary, TypeParameterScopeBuilder contextDeclaration) { // TODO(dmitryas): It's not clear how [metadata] is used currently, and 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 58226d1a11c..d995931c1e8 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 @@ -20,6 +20,7 @@ import '../source/source_library_builder.dart'; import 'formal_parameter_builder.dart'; import 'library_builder.dart'; +import 'named_type_builder.dart'; import 'nullability_builder.dart'; import 'type_builder.dart'; import 'type_variable_builder.dart'; @@ -137,7 +138,7 @@ class FunctionTypeBuilder extends TypeBuilder { @override FunctionTypeBuilder clone( - List newTypes, + List newTypes, SourceLibraryBuilder contextLibrary, TypeParameterScopeBuilder contextDeclaration) { List? clonedTypeVariables; @@ -153,15 +154,13 @@ class FunctionTypeBuilder extends TypeBuilder { return formal.clone(newTypes, contextLibrary, contextDeclaration); }, growable: false); } - FunctionTypeBuilder newType = new FunctionTypeBuilder( + return new FunctionTypeBuilder( returnType?.clone(newTypes, contextLibrary, contextDeclaration), clonedTypeVariables, clonedFormals, nullabilityBuilder, fileUri, charOffset); - newTypes.add(newType); - return newType; } @override diff --git a/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart b/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart index ade332cd307..f6d7e56187e 100644 --- a/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart @@ -10,6 +10,7 @@ import '../problems.dart' show unsupported; import '../source/source_library_builder.dart'; import 'library_builder.dart'; +import 'named_type_builder.dart'; import 'nullability_builder.dart'; import 'type_builder.dart'; import 'type_variable_builder.dart'; @@ -82,7 +83,7 @@ class MixinApplicationBuilder extends TypeBuilder { @override MixinApplicationBuilder clone( - List newTypes, + List newTypes, SourceLibraryBuilder contextLibrary, TypeParameterScopeBuilder contextDeclaration) { int charOffset = -1; // TODO(dmitryas): Provide these. diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart index e6547b94cc6..0bfffd5db68 100644 --- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart @@ -507,7 +507,7 @@ class NamedTypeBuilder extends TypeBuilder { @override NamedTypeBuilder clone( - List newTypes, + List newTypes, SourceLibraryBuilder contextLibrary, TypeParameterScopeBuilder contextDeclaration) { List? clonedArguments; diff --git a/pkg/front_end/lib/src/fasta/builder/type_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_builder.dart index 8fc9d3556d7..73607dd79d3 100644 --- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart +++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart @@ -9,6 +9,7 @@ import 'package:kernel/ast.dart' show DartType, Supertype, TypedefType; import '../scope.dart'; import '../source/source_library_builder.dart'; import 'library_builder.dart'; +import 'named_type_builder.dart'; import 'nullability_builder.dart'; import 'type_declaration_builder.dart'; import 'type_variable_builder.dart'; @@ -62,7 +63,7 @@ abstract class TypeBuilder { /// are added to [newTypes], so that they can be added to a proper scope and /// resolved later. TypeBuilder clone( - List newTypes, + List newTypes, SourceLibraryBuilder contextLibrary, TypeParameterScopeBuilder contextDeclaration); 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 1dd6221c4ab..2430ab7ac02 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 @@ -23,6 +23,7 @@ import 'declaration_builder.dart'; import 'library_builder.dart'; import 'member_builder.dart'; import 'metadata_builder.dart'; +import 'named_type_builder.dart'; import 'nullability_builder.dart'; import 'type_builder.dart'; import 'type_declaration_builder.dart'; @@ -185,7 +186,7 @@ class TypeVariableBuilder extends TypeDeclarationBuilderImpl { } TypeVariableBuilder clone( - List newTypes, + List newTypes, SourceLibraryBuilder contextLibrary, TypeParameterScopeBuilder contextDeclaration) { // TODO(dmitryas): Figure out if using [charOffset] here is a good idea. diff --git a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart b/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart deleted file mode 100644 index 39c5f377a75..00000000000 --- a/pkg/front_end/lib/src/fasta/builder/unresolved_type.dart +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -library fasta.unresolved_type; - -import '../scope.dart'; - -import 'library_builder.dart'; -import 'type_builder.dart'; - -/// A wrapper around a type that is yet to be resolved. -class UnresolvedType { - final TypeBuilder builder; - final int charOffset; - final Uri fileUri; - - UnresolvedType(this.builder, this.charOffset, this.fileUri); - - void resolveIn(Scope scope, LibraryBuilder library) { - builder.resolveIn(scope, charOffset, fileUri, library); - } - - /// Performs checks on the type after it's resolved. - void checkType(LibraryBuilder library) { - return builder.check(library, charOffset, fileUri); - } - - @override - String toString() => "UnresolvedType(@$charOffset, $builder)"; -} 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 ec84e16c1bf..82d3011c27e 100644 --- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart +++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart @@ -71,7 +71,6 @@ import '../builder/type_alias_builder.dart'; import '../builder/type_builder.dart'; import '../builder/type_declaration_builder.dart'; import '../builder/type_variable_builder.dart'; -import '../builder/unresolved_type.dart'; import '../builder/variable_builder.dart'; import '../builder/void_type_declaration_builder.dart'; @@ -868,7 +867,7 @@ class BodyBuilder extends ScopeListener // not calling [buildDartType] leads to a missing compile-time // error. Also, notice that the type of the problematic field isn't // `invalid-type`. - UnresolvedType? type = pop() as UnresolvedType?; + TypeBuilder? type = pop() as TypeBuilder?; if (type != null) { buildDartType(type, allowPotentiallyConstantType: false); } @@ -1851,7 +1850,7 @@ class BodyBuilder extends ScopeListener ])); debugEvent("Send"); Object? arguments = pop(); - List? typeArguments = pop() as List?; + List? typeArguments = pop() as List?; Object receiver = pop()!; // Delay adding [typeArguments] to [forest] for type aliases: They // must be unaliased to the type arguments of the denoted type. @@ -1901,11 +1900,8 @@ class BodyBuilder extends ScopeListener } @override - Expression_Generator_Initializer finishSend( - Object receiver, - List? typeArguments, - ArgumentsImpl arguments, - int charOffset, + Expression_Generator_Initializer finishSend(Object receiver, + List? typeArguments, ArgumentsImpl arguments, int charOffset, {bool isTypeArgumentsInForest = false}) { if (receiver is Generator) { return receiver.doInvocation(charOffset, typeArguments, arguments, @@ -3030,8 +3026,7 @@ class BodyBuilder extends ScopeListener if (!libraryBuilder.isNonNullableByDefault) { reportNonNullableModifierError(lateToken); } - UnresolvedType? unresolvedType = - pop(NullValue.UnresolvedType) as UnresolvedType?; + TypeBuilder? unresolvedType = pop(NullValue.TypeBuilder) as TypeBuilder?; DartType? type = unresolvedType != null ? buildDartType(unresolvedType, allowPotentiallyConstantType: false) : null; @@ -3464,7 +3459,7 @@ class BodyBuilder extends ScopeListener } } - List? typeArguments = pop() as List?; + List? typeArguments = pop() as List?; DartType typeArgument; if (typeArguments != null) { @@ -3496,7 +3491,7 @@ class BodyBuilder extends ScopeListener push(node); } - void buildLiteralSet(List? typeArguments, Token? constKeyword, + void buildLiteralSet(List? typeArguments, Token? constKeyword, Token leftBrace, List? setOrMapEntries) { DartType typeArgument; if (typeArguments != null) { @@ -3565,7 +3560,7 @@ class BodyBuilder extends ScopeListener setOrMapEntries[i] = toValue(elem); } } - List? typeArguments = pop() as List?; + List? typeArguments = pop() as List?; // Replicate existing behavior that has been removed from the parser. // This will be removed once unified collections is implemented. @@ -3632,7 +3627,7 @@ class BodyBuilder extends ScopeListener push(forest.createNullLiteral(offsetForToken(token))); } - void buildLiteralMap(List? typeArguments, Token? constKeyword, + void buildLiteralMap(List? typeArguments, Token? constKeyword, Token leftBrace, List entries) { DartType keyType; DartType valueType; @@ -3740,7 +3735,7 @@ class BodyBuilder extends ScopeListener reportErrorIfNullableType(questionMark); } bool isMarkedAsNullable = questionMark != null; - List? arguments = pop() as List?; + List? arguments = pop() as List?; Object? name = pop(); if (name is QualifiedName) { QualifiedName qualified = name; @@ -3755,19 +3750,16 @@ class BodyBuilder extends ScopeListener Message message = fasta.templateNotAType.withArguments(displayName); libraryBuilder.addProblem( message, offset, lengthOfSpan(beginToken, suffix), uri); - push(new UnresolvedType( - new NamedTypeBuilder.fromTypeDeclarationBuilder( - new InvalidTypeDeclarationBuilder( - name, - message.withLocation( - uri, offset, lengthOfSpan(beginToken, suffix))), - libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable), - fileUri: uri, - charOffset: offset, - instanceTypeVariableAccess: - InstanceTypeVariableAccessState.Unexpected), - offset, - uri)); + push(new NamedTypeBuilder.fromTypeDeclarationBuilder( + new InvalidTypeDeclarationBuilder( + name, + message.withLocation( + uri, offset, lengthOfSpan(beginToken, suffix))), + libraryBuilder.nullableBuilderIfTrue(isMarkedAsNullable), + fileUri: uri, + charOffset: offset, + instanceTypeVariableAccess: + InstanceTypeVariableAccessState.Unexpected)); return; } } @@ -3808,7 +3800,7 @@ class BodyBuilder extends ScopeListener unhandled( "${name.runtimeType}", "handleType", beginToken.charOffset, uri); } - push(new UnresolvedType(result, beginToken.charOffset, uri)); + push(result); } @override @@ -3842,7 +3834,7 @@ class BodyBuilder extends ScopeListener reportErrorIfNullableType(questionMark); } FormalParameters formals = pop() as FormalParameters; - UnresolvedType? returnType = pop() as UnresolvedType?; + TypeBuilder? returnType = pop() as TypeBuilder?; List? typeVariables = pop() as List?; if (typeVariables != null) { @@ -3858,7 +3850,7 @@ class BodyBuilder extends ScopeListener } } } - UnresolvedType type = formals.toFunctionType( + TypeBuilder type = formals.toFunctionType( returnType, libraryBuilder.nullableBuilderIfTrue(questionMark != null), typeVariables); @@ -3871,17 +3863,14 @@ class BodyBuilder extends ScopeListener debugEvent("VoidKeyword"); int offset = offsetForToken(token); // "void" is always nullable. - push(new UnresolvedType( - new NamedTypeBuilder.fromTypeDeclarationBuilder( - new VoidTypeDeclarationBuilder( - const VoidType(), libraryBuilder, offset), - const NullabilityBuilder.nullable(), - fileUri: uri, - charOffset: offset, - instanceTypeVariableAccess: - InstanceTypeVariableAccessState.Unexpected), - offset, - uri)); + push(new NamedTypeBuilder.fromTypeDeclarationBuilder( + new VoidTypeDeclarationBuilder( + const VoidType(), libraryBuilder, offset), + const NullabilityBuilder.nullable(), + fileUri: uri, + charOffset: offset, + instanceTypeVariableAccess: + InstanceTypeVariableAccessState.Unexpected)); } @override @@ -3908,7 +3897,7 @@ class BodyBuilder extends ScopeListener @override void handleAsOperator(Token operator) { debugEvent("AsOperator"); - DartType type = buildDartType(pop() as UnresolvedType, + DartType type = buildDartType(pop() as TypeBuilder, allowPotentiallyConstantType: libraryBuilder.isNonNullableByDefault); libraryBuilder.checkBoundsInType( type, typeEnvironment, uri, operator.charOffset); @@ -3932,7 +3921,7 @@ class BodyBuilder extends ScopeListener @override void handleIsOperator(Token isOperator, Token? not) { debugEvent("IsOperator"); - DartType type = buildDartType(pop() as UnresolvedType, + DartType type = buildDartType(pop() as TypeBuilder, allowPotentiallyConstantType: libraryBuilder.isNonNullableByDefault); Expression operand = popForValue(); Expression isExpression = forest.createIsExpression( @@ -4025,7 +4014,7 @@ class BodyBuilder extends ScopeListener } } Object? nameNode = pop(); - UnresolvedType? type = pop() as UnresolvedType?; + TypeBuilder? type = pop() as TypeBuilder?; if (functionNestingLevel == 0 && type != null) { // TODO(ahe): The type we compute here may be different from what is // computed in the outline phase. We should make sure that the outline @@ -4059,7 +4048,7 @@ class BodyBuilder extends ScopeListener return; } } else { - parameter = new FormalParameterBuilder(null, modifiers, type?.builder, + parameter = new FormalParameterBuilder(null, modifiers, type, name?.name ?? '', libraryBuilder, offsetForToken(nameToken), fileUri: uri) ..hasDeclaredInitializer = (initializerStart != null); @@ -4134,13 +4123,13 @@ class BodyBuilder extends ScopeListener exitLocalScope(); } FormalParameters formals = pop() as FormalParameters; - UnresolvedType? returnType = pop() as UnresolvedType?; + TypeBuilder? returnType = pop() as TypeBuilder?; List? typeVariables = pop() as List?; if (!libraryBuilder.isNonNullableByDefault) { reportErrorIfNullableType(question); } - UnresolvedType type = formals.toFunctionType(returnType, + TypeBuilder type = formals.toFunctionType(returnType, libraryBuilder.nullableBuilderIfTrue(question != null), typeVariables); exitLocalScope(); push(type); @@ -4237,8 +4226,8 @@ class BodyBuilder extends ScopeListener } FormalParameters? catchParameters = popIfNotNull(catchKeyword) as FormalParameters?; - UnresolvedType? unresolvedExceptionType = - popIfNotNull(onKeyword) as UnresolvedType?; + TypeBuilder? unresolvedExceptionType = + popIfNotNull(onKeyword) as TypeBuilder?; DartType exceptionType; if (unresolvedExceptionType != null) { exceptionType = buildDartType(unresolvedExceptionType, @@ -4498,7 +4487,7 @@ class BodyBuilder extends ScopeListener } Identifier? identifier; - List? typeArguments = pop() as List?; + List? typeArguments = pop() as List?; Object? type = pop(); if (type is QualifiedName) { identifier = type; @@ -4888,7 +4877,7 @@ class BodyBuilder extends ScopeListener Identifier? nameLastIdentifier = pop(NullValue.Identifier) as Identifier?; Token nameLastToken = nameLastIdentifier?.token ?? nameToken; String name = pop() as String; - List? typeArguments = pop() as List?; + List? typeArguments = pop() as List?; if (inMetadata && typeArguments != null) { if (!libraryBuilder.enableGenericMetadataInLibrary) { handleRecoverableError(fasta.messageMetadataTypeArguments, @@ -4935,7 +4924,7 @@ class BodyBuilder extends ScopeListener @override Expression createInstantiationAndInvocation( Expression Function() receiverFunction, - List? typeArguments, + List? typeArguments, String className, String constructorName, Arguments arguments, @@ -4985,7 +4974,7 @@ class BodyBuilder extends ScopeListener Token nameLastToken, Arguments? arguments, String name, - List? typeArguments, + List? typeArguments, int charOffset, Constness constness, {bool isTypeArgumentsInForest = false, @@ -5026,8 +5015,8 @@ class BodyBuilder extends ScopeListener usedAsClassFileUri: uri); List typeArgumentBuilders = []; if (typeArguments != null) { - for (UnresolvedType unresolvedType in typeArguments) { - typeArgumentBuilders.add(unresolvedType.builder); + for (TypeBuilder typeBuilder in typeArguments) { + typeArgumentBuilders.add(typeBuilder); } } else { if (aliasBuilder.typeVariablesCount > 0) { @@ -5397,8 +5386,8 @@ class BodyBuilder extends ScopeListener @override void endTypeArguments(int count, Token beginToken, Token endToken) { debugEvent("TypeArguments"); - push(const FixedNullableList() - .popNonNullable(stack, count, dummyUnresolvedType) ?? + push(const FixedNullableList() + .popNonNullable(stack, count, dummyTypeBuilder) ?? NullValue.TypeArguments); } @@ -5562,7 +5551,7 @@ class BodyBuilder extends ScopeListener exitLocalScope(); FormalParameters formals = pop() as FormalParameters; Object? declaration = pop(); - UnresolvedType? returnType = pop() as UnresolvedType?; + TypeBuilder? returnType = pop() as TypeBuilder?; bool hasImplicitReturnType = returnType == null; exitFunction(); List? typeParameters = @@ -6475,13 +6464,13 @@ class BodyBuilder extends ScopeListener void endTypeVariable( Token token, int index, Token? extendsOrSuper, Token? variance) { debugEvent("TypeVariable"); - UnresolvedType? bound = pop() as UnresolvedType?; + TypeBuilder? bound = pop() as TypeBuilder?; // Peek to leave type parameters on top of stack. List typeVariables = peek() as List; TypeVariableBuilder variable = typeVariables[index]; - variable.bound = bound?.builder; + variable.bound = bound; if (variance != null) { if (!libraryBuilder.enableVarianceInLibrary) { reportVarianceModifierNotEnabled(variance); @@ -6845,8 +6834,8 @@ class BodyBuilder extends ScopeListener ValueKinds.TypeArguments, unionOfKinds([ValueKinds.Generator, ValueKinds.Expression]) ])); - List? typeArguments = - pop() as List?; // typeArguments + List? typeArguments = + pop() as List?; // typeArguments if (libraryBuilder.enableConstructorTearOffsInLibrary) { Object? operand = pop(); if (operand is Generator) { @@ -6877,18 +6866,16 @@ class BodyBuilder extends ScopeListener } @override - UnresolvedType validateTypeVariableUse(UnresolvedType unresolved, + TypeBuilder validateTypeVariableUse(TypeBuilder typeBuilder, {required bool allowPotentiallyConstantType}) { // ignore: unnecessary_null_comparison assert(allowPotentiallyConstantType != null); - _validateTypeVariableUseInternal( - unresolved.builder, unresolved.fileUri, unresolved.charOffset, + _validateTypeVariableUseInternal(typeBuilder, allowPotentiallyConstantType: allowPotentiallyConstantType); - return unresolved; + return typeBuilder; } - void _validateTypeVariableUseInternal( - TypeBuilder? builder, Uri fileUri, int charOffset, + void _validateTypeVariableUseInternal(TypeBuilder? builder, {required bool allowPotentiallyConstantType}) { // ignore: unnecessary_null_comparison assert(allowPotentiallyConstantType != null); @@ -6906,7 +6893,9 @@ class BodyBuilder extends ScopeListener !allowPotentiallyConstantType)) { LocatedMessage message = fasta.messageTypeVariableInConstantContext.withLocation( - fileUri, charOffset, typeParameter.name!.length); + builder.fileUri!, + builder.charOffset!, + typeParameter.name!.length); builder.bind(new InvalidTypeDeclarationBuilder( typeParameter.name!, message)); addProblem( @@ -6921,9 +6910,7 @@ class BodyBuilder extends ScopeListener // which seems like an odd prioritization. // TODO: Handle this case. LocatedMessage message = fasta.messageTypeVariableInStaticContext - .withLocation( - builder.fileUri ?? fileUri, - builder.charOffset ?? charOffset, + .withLocation(builder.fileUri!, builder.charOffset!, typeParameter.name!.length); builder.bind(new InvalidTypeDeclarationBuilder( typeParameter.name!, message)); @@ -6941,21 +6928,17 @@ class BodyBuilder extends ScopeListener } if (builder.arguments != null) { for (TypeBuilder typeBuilder in builder.arguments!) { - _validateTypeVariableUseInternal( - typeBuilder, - typeBuilder.fileUri ?? fileUri, - typeBuilder.charOffset ?? charOffset, + _validateTypeVariableUseInternal(typeBuilder, allowPotentiallyConstantType: allowPotentiallyConstantType); } } } else if (builder is FunctionTypeBuilder) { - _validateTypeVariableUseInternal(builder.returnType, fileUri, charOffset, + _validateTypeVariableUseInternal(builder.returnType, allowPotentiallyConstantType: allowPotentiallyConstantType); if (builder.formals != null) { for (FormalParameterBuilder formalParameterBuilder in builder.formals!) { - _validateTypeVariableUseInternal( - formalParameterBuilder.type, fileUri, charOffset, + _validateTypeVariableUseInternal(formalParameterBuilder.type, allowPotentiallyConstantType: allowPotentiallyConstantType); } } @@ -7117,25 +7100,23 @@ class BodyBuilder extends ScopeListener } @override - DartType buildDartType(UnresolvedType unresolvedType, + DartType buildDartType(TypeBuilder typeBuilder, {required bool allowPotentiallyConstantType}) { - return validateTypeVariableUse(unresolvedType, + return validateTypeVariableUse(typeBuilder, allowPotentiallyConstantType: allowPotentiallyConstantType) - .builder .build(libraryBuilder); } @override - DartType buildTypeLiteralDartType(UnresolvedType unresolvedType, + DartType buildTypeLiteralDartType(TypeBuilder typeBuilder, {required bool allowPotentiallyConstantType}) { - return validateTypeVariableUse(unresolvedType, + return validateTypeVariableUse(typeBuilder, allowPotentiallyConstantType: allowPotentiallyConstantType) - .builder .buildTypeLiteralType(libraryBuilder); } @override - List buildDartTypeArguments(List? unresolvedTypes, + List buildDartTypeArguments(List? unresolvedTypes, {required bool allowPotentiallyConstantType}) { if (unresolvedTypes == null) return []; return new List.generate( @@ -7363,14 +7344,13 @@ class FormalParameters { FunctionNode buildFunctionNode( SourceLibraryBuilder library, - UnresolvedType? returnType, + TypeBuilder? returnType, List? typeParameters, AsyncMarker asyncModifier, Statement body, int fileEndOffset) { FunctionType type = toFunctionType( returnType, const NullabilityBuilder.omitted(), typeParameters) - .builder .build(library) as FunctionType; List positionalParameters = []; List namedParameters = []; @@ -7397,14 +7377,11 @@ class FormalParameters { ..fileEndOffset = fileEndOffset; } - UnresolvedType toFunctionType( - UnresolvedType? returnType, NullabilityBuilder nullabilityBuilder, + TypeBuilder toFunctionType( + TypeBuilder? returnType, NullabilityBuilder nullabilityBuilder, [List? typeParameters]) { - return new UnresolvedType( - new FunctionTypeBuilder(returnType?.builder, typeParameters, parameters, - nullabilityBuilder, uri, charOffset), - charOffset, - uri); + return new FunctionTypeBuilder(returnType, typeParameters, parameters, + nullabilityBuilder, uri, charOffset); } Scope computeFormalParameterScope( 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 d3f4eec325a..a9c9d65e74f 100644 --- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart +++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart @@ -27,7 +27,6 @@ import '../builder/type_alias_builder.dart'; import '../builder/type_builder.dart'; import '../builder/type_declaration_builder.dart'; import '../builder/type_variable_builder.dart'; -import '../builder/unresolved_type.dart'; import '../constant_context.dart' show ConstantContext; @@ -217,7 +216,7 @@ abstract class Generator { /// If the invocation has explicit type arguments /// [buildTypeWithResolvedArguments] called instead. Expression_Generator_Initializer doInvocation( - int offset, List? typeArguments, ArgumentsImpl arguments, + int offset, List? typeArguments, ArgumentsImpl arguments, {bool isTypeArgumentsInForest = false}); Expression_Generator buildSelectorAccess( @@ -258,7 +257,7 @@ abstract class Generator { } Expression_Generator applyTypeArguments( - int fileOffset, List? typeArguments) { + int fileOffset, List? typeArguments) { return new Instantiation( buildSimpleRead(), _helper.buildDartTypeArguments(typeArguments, @@ -272,7 +271,7 @@ abstract class Generator { /// The type arguments have not been resolved and should be resolved to /// create a [TypeBuilder] for a valid type. TypeBuilder buildTypeWithResolvedArguments( - NullabilityBuilder nullabilityBuilder, List? arguments, + NullabilityBuilder nullabilityBuilder, List? arguments, {required bool allowPotentiallyConstantType}) { // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here? NamedTypeBuilder result = new NamedTypeBuilder( @@ -295,7 +294,7 @@ abstract class Generator { } Expression invokeConstructor( - List? typeArguments, + List? typeArguments, String name, Arguments arguments, Token nameToken, @@ -413,7 +412,7 @@ class VariableUseGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return _helper.forest.createExpressionInvocation( adjustForImplicitCall(_plainNameForRead, offset), @@ -475,7 +474,7 @@ class PropertyAccessGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return _helper.buildMethodInvocation(receiver, name, arguments, offset); } @@ -705,7 +704,7 @@ class ThisPropertyAccessGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return _helper.buildMethodInvocation( _forest.createThisExpression(fileOffset), name, arguments, offset); @@ -813,7 +812,7 @@ class NullAwarePropertyAccessGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return unsupported("doInvocation", offset, _uri); } @@ -920,7 +919,7 @@ class SuperPropertyAccessGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { if (_helper.constantContext != ConstantContext.none) { // TODO(brianwilkerson) Fix the length @@ -1083,7 +1082,7 @@ class IndexedAccessGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return _helper.forest.createExpressionInvocation( arguments.fileOffset, buildSimpleRead(), arguments); @@ -1206,7 +1205,7 @@ class ThisIndexedAccessGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return _helper.forest .createExpressionInvocation(offset, buildSimpleRead(), arguments); @@ -1311,7 +1310,7 @@ class SuperIndexedAccessGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return _helper.forest .createExpressionInvocation(offset, buildSimpleRead(), arguments); @@ -1502,7 +1501,7 @@ class StaticAccessGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { if (_helper.constantContext != ConstantContext.none && !_helper.isIdentical(readTarget) && @@ -1775,7 +1774,7 @@ class ExtensionInstanceAccessGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, ArgumentsImpl arguments, + int offset, List? typeArguments, ArgumentsImpl arguments, {bool isTypeArgumentsInForest = false}) { if (invokeTarget != null) { return _helper.buildExtensionMethodInvocation( @@ -2185,7 +2184,7 @@ class ExplicitExtensionInstanceAccessGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { VariableDeclarationImpl? receiverVariable; Expression receiverExpression = receiver; @@ -2506,7 +2505,7 @@ class ExplicitExtensionIndexedAccessGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return _helper.forest .createExpressionInvocation(offset, buildSimpleRead(), arguments); @@ -2678,7 +2677,7 @@ class ExplicitExtensionAccessGenerator extends Generator { @override Expression_Generator_Initializer doInvocation( - int offset, List? typeArguments, ArgumentsImpl arguments, + int offset, List? typeArguments, ArgumentsImpl arguments, {bool isTypeArgumentsInForest = false}) { Generator generator = _createInstanceAccess(token, callName); return generator.doInvocation(offset, typeArguments, arguments, @@ -2792,7 +2791,7 @@ class LoadLibraryGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { if (_forest.argumentsPositional(arguments).length > 0 || _forest.argumentsNamed(arguments).length > 0) { @@ -2902,7 +2901,7 @@ class DeferredAccessGenerator extends Generator { @override TypeBuilder buildTypeWithResolvedArguments( - NullabilityBuilder nullabilityBuilder, List? arguments, + NullabilityBuilder nullabilityBuilder, List? arguments, {required bool allowPotentiallyConstantType}) { String name = "${prefixGenerator._plainNameForRead}." "${suffixGenerator._plainNameForRead}"; @@ -2919,7 +2918,7 @@ class DeferredAccessGenerator extends Generator { int charOffset = offsetForToken(prefixGenerator.token); message = templateDeferredTypeAnnotation .withArguments( - _helper.buildDartType(new UnresolvedType(type, charOffset, _uri), + _helper.buildDartType(type, allowPotentiallyConstantType: allowPotentiallyConstantType), prefixGenerator._plainNameForRead, _helper.libraryBuilder.isNonNullableByDefault) @@ -2938,7 +2937,7 @@ class DeferredAccessGenerator extends Generator { @override Expression_Generator_Initializer doInvocation( - int offset, List? typeArguments, ArgumentsImpl arguments, + int offset, List? typeArguments, ArgumentsImpl arguments, {bool isTypeArgumentsInForest = false}) { Object suffix = suffixGenerator.doInvocation( offset, typeArguments, arguments, @@ -2954,7 +2953,7 @@ class DeferredAccessGenerator extends Generator { @override Expression invokeConstructor( - List? typeArguments, + List? typeArguments, String name, Arguments arguments, Token nameToken, @@ -3008,7 +3007,7 @@ class DeferredAccessGenerator extends Generator { /// class TypeUseGenerator extends AbstractReadOnlyAccessGenerator { final TypeDeclarationBuilder declaration; - List? typeArguments; + List? typeArguments; @override final String targetName; @@ -3031,7 +3030,7 @@ class TypeUseGenerator extends AbstractReadOnlyAccessGenerator { @override TypeBuilder buildTypeWithResolvedArguments( - NullabilityBuilder nullabilityBuilder, List? arguments, + NullabilityBuilder nullabilityBuilder, List? arguments, {required bool allowPotentiallyConstantType}) { if (declaration.isExtension && !_helper.enableExtensionTypesInLibrary) { // Extension declarations cannot be used as types. @@ -3058,10 +3057,8 @@ class TypeUseGenerator extends AbstractReadOnlyAccessGenerator { if (arguments != null) { argumentBuilders = new List.generate(arguments.length, (int i) { - return _helper - .validateTypeVariableUse(arguments![i], - allowPotentiallyConstantType: allowPotentiallyConstantType) - .builder; + return _helper.validateTypeVariableUse(arguments![i], + allowPotentiallyConstantType: allowPotentiallyConstantType); }, growable: false); } return new NamedTypeBuilder( @@ -3072,7 +3069,7 @@ class TypeUseGenerator extends AbstractReadOnlyAccessGenerator { @override Expression invokeConstructor( - List? typeArguments, + List? typeArguments, String name, Arguments arguments, Token nameToken, @@ -3111,13 +3108,9 @@ class TypeUseGenerator extends AbstractReadOnlyAccessGenerator { _expression = _forest.createTypeLiteral( offsetForToken(token), _helper.buildTypeLiteralDartType( - new UnresolvedType( - buildTypeWithResolvedArguments( - _helper.libraryBuilder.nonNullableBuilder, - typeArguments, - allowPotentiallyConstantType: true), - fileOffset, - _uri), + buildTypeWithResolvedArguments( + _helper.libraryBuilder.nonNullableBuilder, typeArguments, + allowPotentiallyConstantType: true), allowPotentiallyConstantType: _helper.enableConstructorTearOffsInLibrary)); } @@ -3147,10 +3140,8 @@ class TypeUseGenerator extends AbstractReadOnlyAccessGenerator { _helper.enableConstructorTearOffsInLibrary && declarationBuilder is ClassBuilder; List? aliasedTypeArguments = typeArguments - ?.map((unknownType) => _helper - .validateTypeVariableUse(unknownType, - allowPotentiallyConstantType: isConstructorTearOff) - .builder) + ?.map((unknownType) => _helper.validateTypeVariableUse(unknownType, + allowPotentiallyConstantType: isConstructorTearOff)) .toList(); if (aliasedTypeArguments != null && aliasedTypeArguments.length != aliasBuilder.typeVariablesCount) { @@ -3367,7 +3358,7 @@ class TypeUseGenerator extends AbstractReadOnlyAccessGenerator { @override Expression_Generator_Builder doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { if (declaration.isExtension) { ExtensionBuilder extensionBuilder = declaration as ExtensionBuilder; @@ -3404,7 +3395,7 @@ class TypeUseGenerator extends AbstractReadOnlyAccessGenerator { @override Expression_Generator applyTypeArguments( - int fileOffset, List? typeArguments) { + int fileOffset, List? typeArguments) { return new TypeUseGenerator(_helper, token, declaration, targetName) ..typeArguments = typeArguments; } @@ -3551,7 +3542,7 @@ abstract class AbstractReadOnlyAccessGenerator extends Generator { @override Expression_Generator_Initializer doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return _helper.forest.createExpressionInvocation( adjustForImplicitCall(targetName, offset), _createRead(), arguments); @@ -3606,7 +3597,7 @@ abstract class ErroneousExpressionGenerator extends Generator { @override Expression_Generator_Initializer doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return buildError(arguments, charOffset: offset, kind: UnresolvedKind.Method); @@ -3682,7 +3673,7 @@ abstract class ErroneousExpressionGenerator extends Generator { @override Expression invokeConstructor( - List? typeArguments, + List? typeArguments, String name, Arguments arguments, Token nameToken, @@ -3734,7 +3725,7 @@ class UnresolvedNameGenerator extends ErroneousExpressionGenerator { @override Expression doInvocation( - int charOffset, List? typeArguments, Arguments arguments, + int charOffset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return buildError(arguments, charOffset: charOffset, kind: UnresolvedKind.Method); @@ -3811,7 +3802,7 @@ abstract class ContextAwareGenerator extends Generator { @override Never doInvocation( - int charOffset, List? typeArguments, Arguments arguments, + int charOffset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return unhandled("${runtimeType}", "doInvocation", charOffset, _uri); } @@ -4057,7 +4048,7 @@ class PrefixUseGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return _helper.wrapInLocatedProblem( _helper.evaluateArgumentsBefore( @@ -4160,7 +4151,7 @@ class UnexpectedQualifiedUseGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return _helper.buildUnresolvedError(_forest.createNullLiteral(offset), _plainNameForRead, arguments, fileOffset, @@ -4169,7 +4160,7 @@ class UnexpectedQualifiedUseGenerator extends Generator { @override TypeBuilder buildTypeWithResolvedArguments( - NullabilityBuilder nullabilityBuilder, List? arguments, + NullabilityBuilder nullabilityBuilder, List? arguments, {required bool allowPotentiallyConstantType}) { Template template = isUnresolved ? templateUnresolvedPrefixInTypeAnnotation @@ -4282,7 +4273,7 @@ class ParserErrorGenerator extends Generator { @override Expression doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { return buildProblem(); } @@ -4295,7 +4286,7 @@ class ParserErrorGenerator extends Generator { @override TypeBuilder buildTypeWithResolvedArguments( - NullabilityBuilder nullabilityBuilder, List? arguments, + NullabilityBuilder nullabilityBuilder, List? arguments, {required bool allowPotentiallyConstantType}) { // TODO(johnniwinther): Could we use a FixedTypeBuilder(InvalidType()) here? NamedTypeBuilder result = new NamedTypeBuilder( @@ -4318,7 +4309,7 @@ class ParserErrorGenerator extends Generator { @override Expression invokeConstructor( - List? typeArguments, + List? typeArguments, String name, Arguments arguments, Token nameToken, @@ -4503,7 +4494,7 @@ class ThisAccessGenerator extends Generator { @override Expression_Generator_Initializer doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) { if (isInitializer) { return buildConstructorInitializer(offset, new Name(""), arguments); @@ -4704,7 +4695,7 @@ class IncompleteErrorGenerator extends ErroneousExpressionGenerator { @override Generator doInvocation( - int offset, List? typeArguments, Arguments arguments, + int offset, List? typeArguments, Arguments arguments, {bool isTypeArgumentsInForest = false}) => this; @@ -4820,7 +4811,7 @@ abstract class Selector { Expression_Generator withReceiver(Object? receiver, int operatorOffset, {bool isNullAware: false}); - List? get typeArguments => null; + List? get typeArguments => null; bool get isTypeArgumentsInForest => true; @@ -4857,7 +4848,7 @@ class InvocationSelector extends Selector { final Name name; @override - final List? typeArguments; + final List? typeArguments; @override final bool isTypeArgumentsInForest; diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart index d0aaf1fbb51..0bd29ce4871 100644 --- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart +++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart @@ -13,8 +13,8 @@ import '../builder/builder.dart'; import '../builder/formal_parameter_builder.dart'; import '../builder/named_type_builder.dart'; import '../builder/prefix_builder.dart'; +import '../builder/type_builder.dart'; import '../builder/type_declaration_builder.dart'; -import '../builder/unresolved_type.dart'; import '../constant_context.dart' show ConstantContext; import '../fasta_codes.dart' show LocatedMessage; @@ -70,7 +70,7 @@ abstract class ExpressionGeneratorHelper implements InferenceHelper { {bool isQualified: false, PrefixBuilder? prefix}); Expression_Generator_Initializer finishSend(Object receiver, - List? typeArguments, ArgumentsImpl arguments, int offset, + List? typeArguments, ArgumentsImpl arguments, int offset, {bool isTypeArgumentsInForest = false}); Initializer buildInvalidInitializer(Expression expression, @@ -126,14 +126,14 @@ abstract class ExpressionGeneratorHelper implements InferenceHelper { Token nameLastToken, Arguments? arguments, String name, - List? typeArguments, + List? typeArguments, int charOffset, Constness constness, {bool isTypeArgumentsInForest = false, TypeDeclarationBuilder? typeAliasBuilder, required UnresolvedKind unresolvedKind}); - UnresolvedType validateTypeVariableUse(UnresolvedType unresolved, + TypeBuilder validateTypeVariableUse(TypeBuilder typeBuilder, {required bool allowPotentiallyConstantType}); void addProblemErrorIfConst(Message message, int charOffset, int length); @@ -156,13 +156,13 @@ abstract class ExpressionGeneratorHelper implements InferenceHelper { Expression evaluateArgumentsBefore( Arguments arguments, Expression expression); - DartType buildDartType(UnresolvedType unresolvedType, + DartType buildDartType(TypeBuilder typeBuilder, {required bool allowPotentiallyConstantType}); - DartType buildTypeLiteralDartType(UnresolvedType unresolvedType, + DartType buildTypeLiteralDartType(TypeBuilder typeBuilder, {required bool allowPotentiallyConstantType}); - List buildDartTypeArguments(List? unresolvedTypes, + List buildDartTypeArguments(List? typeArguments, {required bool allowPotentiallyConstantType}); void reportDuplicatedDeclaration( @@ -205,7 +205,7 @@ abstract class ExpressionGeneratorHelper implements InferenceHelper { /// creating the instantiation and invocation. Expression createInstantiationAndInvocation( Expression Function() receiverFunction, - List? typeArguments, + List? typeArguments, String className, String constructorName, Arguments arguments, diff --git a/pkg/front_end/lib/src/fasta/kernel/utils.dart b/pkg/front_end/lib/src/fasta/kernel/utils.dart index ad50b91b997..3a85b466787 100644 --- a/pkg/front_end/lib/src/fasta/kernel/utils.dart +++ b/pkg/front_end/lib/src/fasta/kernel/utils.dart @@ -20,7 +20,6 @@ import '../builder/formal_parameter_builder.dart'; import '../builder/metadata_builder.dart'; import '../builder/type_builder.dart'; import '../builder/type_variable_builder.dart'; -import '../builder/unresolved_type.dart'; import '../combinator.dart'; import '../configuration.dart'; import '../identifiers.dart'; @@ -213,5 +212,3 @@ final TypeVariableBuilder dummyTypeVariableBuilder = final Label dummyLabel = new Label('', -1); final FieldInfo dummyFieldInfo = new FieldInfo('', -1, null, dummyToken, -1); final Configuration dummyConfiguration = new Configuration(-1, '', '', ''); -final UnresolvedType dummyUnresolvedType = - new UnresolvedType(dummyTypeBuilder, -1, dummyUri); 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 77966dfe4ca..902f60be30d 100644 --- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart @@ -41,7 +41,6 @@ import '../builder/named_type_builder.dart'; import '../builder/nullability_builder.dart'; import '../builder/type_builder.dart'; import '../builder/type_variable_builder.dart'; -import '../builder/unresolved_type.dart'; import '../combinator.dart' show CombinatorBuilder; @@ -856,7 +855,7 @@ class OutlineBuilder extends StackListenerImpl { // Resolve unresolved types from the class header (i.e., superclass, mixins, // and implemented types) before adding members from the class body which // should not shadow these unresolved types. - libraryBuilder.currentTypeParameterScopeBuilder.resolveTypes( + libraryBuilder.currentTypeParameterScopeBuilder.resolveNamedTypes( libraryBuilder.currentTypeParameterScopeBuilder.typeVariables, libraryBuilder); } @@ -1016,7 +1015,7 @@ class OutlineBuilder extends StackListenerImpl { libraryBuilder .endNestedDeclaration( TypeParameterScopeKind.classDeclaration, "") - .resolveTypes(typeVariables, libraryBuilder); + .resolveNamedTypes(typeVariables, libraryBuilder); } else { final int startCharOffset = metadata == null ? beginToken.charOffset : metadata.first.charOffset; @@ -1105,7 +1104,7 @@ class OutlineBuilder extends StackListenerImpl { libraryBuilder .endNestedDeclaration( TypeParameterScopeKind.mixinDeclaration, "") - .resolveTypes(typeVariables, libraryBuilder); + .resolveNamedTypes(typeVariables, libraryBuilder); } else { int startOffset = metadata == null ? mixinToken.charOffset : metadata.first.charOffset; @@ -1345,7 +1344,7 @@ class OutlineBuilder extends StackListenerImpl { checkEmpty(beginToken.charOffset); libraryBuilder .endNestedDeclaration(TypeParameterScopeKind.topLevelMethod, "#method") - .resolveTypes(typeVariables, libraryBuilder); + .resolveNamedTypes(typeVariables, libraryBuilder); if (name is! ParserRecovery) { final int startCharOffset = metadata == null ? beginToken.charOffset : metadata.first.charOffset; @@ -1676,7 +1675,7 @@ class OutlineBuilder extends StackListenerImpl { if (name is ParserRecovery) { nativeMethodName = null; inConstructor = false; - declarationBuilder.resolveTypes(typeVariables, libraryBuilder); + declarationBuilder.resolveNamedTypes(typeVariables, libraryBuilder); } else { String? constructorName; switch (methodKind) { @@ -1725,14 +1724,13 @@ class OutlineBuilder extends StackListenerImpl { List synthesizedFormals = []; TypeBuilder thisType = extension.extensionThisType; if (substitution != null) { - List unboundTypes = []; + List unboundTypes = []; List unboundTypeVariables = []; thisType = substitute(thisType, substitution, unboundTypes: unboundTypes, unboundTypeVariables: unboundTypeVariables)!; - for (TypeBuilder unboundType in unboundTypes) { - extension.addType(new UnresolvedType( - unboundType, thisType.charOffset!, thisType.fileUri!)); + for (NamedTypeBuilder unboundType in unboundTypes) { + extension.registerUnresolvedNamedType(unboundType); } libraryBuilder.unboundTypeVariables.addAll(unboundTypeVariables); } @@ -1745,7 +1743,7 @@ class OutlineBuilder extends StackListenerImpl { formals = synthesizedFormals; } - declarationBuilder.resolveTypes(typeVariables, libraryBuilder); + declarationBuilder.resolveNamedTypes(typeVariables, libraryBuilder); if (constructorName != null) { if (isConst && bodyKind != MethodBody.Abstract && @@ -1842,7 +1840,7 @@ class OutlineBuilder extends StackListenerImpl { libraryBuilder .endNestedDeclaration( TypeParameterScopeKind.namedMixinApplication, "") - .resolveTypes(typeVariables, libraryBuilder); + .resolveNamedTypes(typeVariables, libraryBuilder); } else { if (libraryBuilder.isNonNullableByDefault) { String classNameForErrors = "${name}"; @@ -2265,7 +2263,7 @@ class OutlineBuilder extends StackListenerImpl { libraryBuilder .endNestedDeclaration( TypeParameterScopeKind.typedef, "") - .resolveTypes(typeVariables, libraryBuilder); + .resolveNamedTypes(typeVariables, libraryBuilder); popDeclarationContext(DeclarationContext.Typedef); return; } @@ -2285,7 +2283,7 @@ class OutlineBuilder extends StackListenerImpl { libraryBuilder .endNestedDeclaration( TypeParameterScopeKind.functionType, "") - .resolveTypes(typeVariables, libraryBuilder); + .resolveNamedTypes(typeVariables, libraryBuilder); popDeclarationContext(DeclarationContext.Typedef); return; } diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart index 39420c48e84..19782a3aa57 100644 --- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart +++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart @@ -64,7 +64,6 @@ import '../builder/type_alias_builder.dart'; import '../builder/type_builder.dart'; import '../builder/type_declaration_builder.dart'; import '../builder/type_variable_builder.dart'; -import '../builder/unresolved_type.dart'; import '../builder/void_type_declaration_builder.dart'; import '../combinator.dart' show CombinatorBuilder; @@ -134,7 +133,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { @override final SourceLoader loader; - final TypeParameterScopeBuilder libraryDeclaration; + final TypeParameterScopeBuilder _libraryTypeParameterScopeBuilder; final List constructorReferences = []; @@ -284,18 +283,18 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { this.fileUri, this._packageUri, this.packageLanguageVersion, - this.libraryDeclaration, + this._libraryTypeParameterScopeBuilder, this.importScope, this.actualOrigin, this.library, this._nameOrigin, this.referencesFrom) : _languageVersion = packageLanguageVersion, - currentTypeParameterScopeBuilder = libraryDeclaration, + currentTypeParameterScopeBuilder = _libraryTypeParameterScopeBuilder, referencesFromIndexed = referencesFrom == null ? null : new IndexedLibrary(referencesFrom), - super( - fileUri, libraryDeclaration.toScope(importScope), new Scope.top()) { + super(fileUri, _libraryTypeParameterScopeBuilder.toScope(importScope), + new Scope.top()) { assert( _packageUri == null || importUri.scheme != 'package' || @@ -308,6 +307,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { "'${importUri}'."); } + TypeParameterScopeBuilder get libraryTypeParameterScopeBuilderForTesting => + _libraryTypeParameterScopeBuilder; + bool? _enableConstFunctionsInLibrary; bool? _enableVarianceInLibrary; bool? _enableNonfunctionTypeAliasesInLibrary; @@ -451,14 +453,14 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { @override bool get isPart => partOfName != null || partOfUri != null; - List get types => libraryDeclaration.types; + List get unresolvedNamedTypes => + _libraryTypeParameterScopeBuilder.unresolvedNamedTypes; @override bool get isSynthetic => accessProblem != null; - T addType(T type, int charOffset) { - currentTypeParameterScopeBuilder - .addType(new UnresolvedType(type, charOffset, fileUri)); + NamedTypeBuilder registerUnresolvedNamedType(NamedTypeBuilder type) { + currentTypeParameterScopeBuilder.registerUnresolvedNamedType(type); return type; } @@ -812,7 +814,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { if (setterReference != null) { loader.buildersCreatedWithReferences[setterReference] = declaration; } - if (currentTypeParameterScopeBuilder == libraryDeclaration) { + if (currentTypeParameterScopeBuilder == _libraryTypeParameterScopeBuilder) { if (declaration is MemberBuilder) { declaration.parent = this; } else if (declaration is TypeDeclarationBuilder) { @@ -824,7 +826,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { "${declaration.runtimeType}", "addBuilder", charOffset, fileUri); } } else { - assert(currentTypeParameterScopeBuilder.parent == libraryDeclaration); + assert(currentTypeParameterScopeBuilder.parent == + _libraryTypeParameterScopeBuilder); } bool isConstructor = declaration is FunctionBuilder && (declaration.isConstructor || declaration.isFactory); @@ -1237,7 +1240,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { addBuilder(name, declaration, declaration.charOffset); } } - types.addAll(part.types); + unresolvedNamedTypes.addAll(part.unresolvedNamedTypes); constructorReferences.addAll(part.constructorReferences); part.partOfLibrary = this; part.scope.becomePartOf(scope); @@ -1396,15 +1399,16 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { } } - /// Resolves all unresolved types in [types]. The list of types is cleared - /// when done. + /// Resolves all unresolved types in [unresolvedNamedTypes]. The list of types + /// is cleared when done. int resolveTypes() { - int typeCount = types.length; - for (UnresolvedType t in types) { - t.resolveIn(scope, this); - t.checkType(this); + int typeCount = unresolvedNamedTypes.length; + for (NamedTypeBuilder namedType in unresolvedNamedTypes) { + namedType.resolveIn( + scope, namedType.charOffset!, namedType.fileUri!, this); + namedType.check(this, namedType.charOffset!, namedType.fileUri!); } - types.clear(); + unresolvedNamedTypes.clear(); return typeCount; } @@ -1486,18 +1490,14 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { TypeBuilder addNamedType(Object name, NullabilityBuilder nullabilityBuilder, List? arguments, int charOffset, {required InstanceTypeVariableAccessState instanceTypeVariableAccess}) { - return addType( - new NamedTypeBuilder( - name, nullabilityBuilder, arguments, fileUri, charOffset, - instanceTypeVariableAccess: instanceTypeVariableAccess), - charOffset); + return registerUnresolvedNamedType(new NamedTypeBuilder( + name, nullabilityBuilder, arguments, fileUri, charOffset, + instanceTypeVariableAccess: instanceTypeVariableAccess)); } TypeBuilder addMixinApplication( TypeBuilder? supertype, List mixins, int charOffset) { - return addType( - new MixinApplicationBuilder(supertype, mixins, fileUri, charOffset), - charOffset); + return new MixinApplicationBuilder(supertype, mixins, fileUri, charOffset); } TypeBuilder addVoidType(int charOffset) { @@ -1665,8 +1665,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { // Nested declaration began in `OutlineBuilder.beginClassDeclaration`. TypeParameterScopeBuilder declaration = endNestedDeclaration(kind, className) - ..resolveTypes(typeVariables, this); - assert(declaration.parent == libraryDeclaration); + ..resolveNamedTypes(typeVariables, this); + assert(declaration.parent == _libraryTypeParameterScopeBuilder); Map members = declaration.members!; Map constructors = declaration.constructors!; Map setters = declaration.setters!; @@ -1895,8 +1895,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { // Nested declaration began in `OutlineBuilder.beginExtensionDeclaration`. TypeParameterScopeBuilder declaration = endNestedDeclaration( TypeParameterScopeKind.extensionDeclaration, extensionName) - ..resolveTypes(typeVariables, this); - assert(declaration.parent == libraryDeclaration); + ..resolveNamedTypes(typeVariables, this); + assert(declaration.parent == _libraryTypeParameterScopeBuilder); Map members = declaration.members!; Map constructors = declaration.constructors!; Map setters = declaration.setters!; @@ -2111,7 +2111,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { applicationTypeVariables = copyTypeVariables( typeVariables!, currentTypeParameterScopeBuilder); - List newTypes = []; + List newTypes = []; if (supertype is NamedTypeBuilder && supertype.arguments != null) { for (int i = 0; i < supertype.arguments!.length; ++i) { supertype.arguments![i] = supertype.arguments![i] @@ -2124,16 +2124,16 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { .clone(newTypes, this, currentTypeParameterScopeBuilder); } } - for (TypeBuilder newType in newTypes) { - currentTypeParameterScopeBuilder.addType(new UnresolvedType( - newType, newType.charOffset!, newType.fileUri!)); + for (NamedTypeBuilder newType in newTypes) { + currentTypeParameterScopeBuilder + .registerUnresolvedNamedType(newType); } TypeParameterScopeBuilder mixinDeclaration = this .endNestedDeclaration( TypeParameterScopeKind.unnamedMixinApplication, "mixin application"); - mixinDeclaration.resolveTypes(applicationTypeVariables, this); + mixinDeclaration.resolveNamedTypes(applicationTypeVariables, this); applicationTypeArguments = []; for (TypeVariableBuilder typeVariable in typeVariables) { @@ -2219,7 +2219,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { int charEndOffset) { // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`. endNestedDeclaration(TypeParameterScopeKind.namedMixinApplication, name) - .resolveTypes(typeVariables, this); + .resolveNamedTypes(typeVariables, this); TypeBuilder supertype = applyMixins(mixinApplication, startCharOffset, charOffset, charEndOffset, name, false, metadata: metadata, @@ -2637,7 +2637,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { } currentTypeParameterScopeBuilder = savedDeclaration; - factoryDeclaration.resolveTypes(procedureBuilder.typeVariables, this); + factoryDeclaration.resolveNamedTypes(procedureBuilder.typeVariables, this); addBuilder(procedureName, procedureBuilder, charOffset, getterReference: constructorReference); if (nativeMethodName != null) { @@ -2688,7 +2688,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { checkTypeVariables(typeVariables, typedefBuilder); // Nested declaration began in `OutlineBuilder.beginFunctionTypeAlias`. endNestedDeclaration(TypeParameterScopeKind.typedef, "#typedef") - .resolveTypes(typeVariables, this); + .resolveNamedTypes(typeVariables, this); addBuilder(name, typedefBuilder, charOffset, getterReference: referenceFrom?.reference); } @@ -2716,8 +2716,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { // Nested declaration began in `OutlineBuilder.beginFunctionType` or // `OutlineBuilder.beginFunctionTypedFormalParameter`. endNestedDeclaration(TypeParameterScopeKind.functionType, "#function_type") - .resolveTypes(typeVariables, this); - return addType(builder, charOffset); + .resolveNamedTypes(typeVariables, this); + return builder; } FormalParameterBuilder addFormalParameter( @@ -3054,7 +3054,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { List copyTypeVariables( List original, TypeParameterScopeBuilder declaration, {bool isExtensionTypeParameter: false}) { - List newTypes = []; + List newTypes = []; List copy = []; for (TypeVariableBuilder variable in original) { TypeVariableBuilder newVariable = new TypeVariableBuilder( @@ -3066,9 +3066,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { copy.add(newVariable); unboundTypeVariables.add(newVariable); } - for (TypeBuilder newType in newTypes) { - declaration.addType( - new UnresolvedType(newType, newType.charOffset!, newType.fileUri!)); + for (NamedTypeBuilder newType in newTypes) { + declaration.registerUnresolvedNamedType(newType); } return copy; } @@ -3183,7 +3182,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { @override int computeVariances() { int count = 0; - for (Builder? declaration in libraryDeclaration.members!.values) { + for (Builder? declaration + in _libraryTypeParameterScopeBuilder.members!.values) { while (declaration != null) { if (declaration is TypeAliasBuilder && declaration.typeVariablesCount > 0) { @@ -3306,7 +3306,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { } if (!haveErroneousBounds) { - List unboundTypes = []; + List unboundTypes = []; List unboundTypeVariables = []; List calculatedBounds = calculateBounds( variables, @@ -3315,9 +3315,9 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { objectClass, unboundTypes: unboundTypes, unboundTypeVariables: unboundTypeVariables); - for (TypeBuilder unboundType in unboundTypes) { - currentTypeParameterScopeBuilder.addType(new UnresolvedType( - unboundType, unboundType.charOffset!, unboundType.fileUri!)); + for (NamedTypeBuilder unboundType in unboundTypes) { + currentTypeParameterScopeBuilder + .registerUnresolvedNamedType(unboundType); } this.unboundTypeVariables.addAll(unboundTypeVariables); for (int i = 0; i < variables.length; ++i) { @@ -3344,7 +3344,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { } } - for (Builder declaration in libraryDeclaration.members!.values) { + for (Builder declaration + in _libraryTypeParameterScopeBuilder.members!.values) { if (declaration is ClassBuilder) { { List issues = @@ -3493,7 +3494,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl { "(${declaration.runtimeType})."); } } - for (Builder declaration in libraryDeclaration.setters!.values) { + for (Builder declaration + in _libraryTypeParameterScopeBuilder.setters!.values) { assert( declaration is ProcedureBuilder, "Expected setter to be a ProcedureBuilder, " @@ -4584,7 +4586,7 @@ class TypeParameterScopeBuilder { final Set? extensions; - final List types = []; + final List unresolvedNamedTypes = []; // TODO(johnniwinther): Stop using [_name] for determining the declaration // kind. @@ -4743,15 +4745,17 @@ class TypeParameterScopeBuilder { /// Adds the yet unresolved [type] to this scope builder. /// - /// Unresolved type will be resolved through [resolveTypes] when the scope - /// is fully built. This allows for resolving self-referencing types, like - /// type parameter used in their own bound, for instance `>`. - void addType(UnresolvedType type) { - types.add(type); + /// Unresolved type will be resolved through [resolveNamedTypes] when the + /// scope is fully built. This allows for resolving self-referencing types, + /// like type parameter used in their own bound, for instance + /// `>`. + void registerUnresolvedNamedType(NamedTypeBuilder type) { + unresolvedNamedTypes.add(type); } - /// Resolves type variables in [types] and propagate other types to [parent]. - void resolveTypes( + /// Resolves type variables in [unresolvedNamedTypes] and propagate other + /// types to [parent]. + void resolveNamedTypes( List? typeVariables, SourceLibraryBuilder library) { Map? map; if (typeVariables != null) { @@ -4761,8 +4765,8 @@ class TypeParameterScopeBuilder { } } Scope? scope; - for (UnresolvedType type in types) { - Object? nameOrQualified = type.builder.name; + for (NamedTypeBuilder namedTypeBuilder in unresolvedNamedTypes) { + Object? nameOrQualified = namedTypeBuilder.name; String? name = nameOrQualified is QualifiedName ? nameOrQualified.qualifier as String : nameOrQualified as String?; @@ -4778,25 +4782,30 @@ class TypeParameterScopeBuilder { if (declaration == null) { // Since name didn't resolve in this scope, propagate it to the // parent declaration. - parent!.addType(type); + parent!.registerUnresolvedNamedType(namedTypeBuilder); } else if (nameOrQualified is QualifiedName) { - NamedTypeBuilder builder = type.builder as NamedTypeBuilder; // Attempt to use a member or type variable as a prefix. Message message = templateNotAPrefixInTypeAnnotation.withArguments( - flattenName( - nameOrQualified.qualifier, type.charOffset, type.fileUri), + flattenName(nameOrQualified.qualifier, namedTypeBuilder.charOffset!, + namedTypeBuilder.fileUri!), nameOrQualified.name); - library.addProblem(message, type.charOffset, - nameOrQualified.endCharOffset - type.charOffset, type.fileUri); - builder.bind(builder.buildInvalidTypeDeclarationBuilder( - message.withLocation(type.fileUri, type.charOffset, - nameOrQualified.endCharOffset - type.charOffset))); + library.addProblem( + message, + namedTypeBuilder.charOffset!, + nameOrQualified.endCharOffset - namedTypeBuilder.charOffset!, + namedTypeBuilder.fileUri!); + namedTypeBuilder.bind(namedTypeBuilder + .buildInvalidTypeDeclarationBuilder(message.withLocation( + namedTypeBuilder.fileUri!, + namedTypeBuilder.charOffset!, + nameOrQualified.endCharOffset - namedTypeBuilder.charOffset!))); } else { scope ??= toScope(null).withTypeVariables(typeVariables); - type.resolveIn(scope, library); + namedTypeBuilder.resolveIn(scope, namedTypeBuilder.charOffset!, + namedTypeBuilder.fileUri!, library); } } - types.clear(); + unresolvedNamedTypes.clear(); } Scope toScope(Scope? parent) { diff --git a/pkg/front_end/lib/src/fasta/source/value_kinds.dart b/pkg/front_end/lib/src/fasta/source/value_kinds.dart index 2c88740ebf6..9a81d93fbe9 100644 --- a/pkg/front_end/lib/src/fasta/source/value_kinds.dart +++ b/pkg/front_end/lib/src/fasta/source/value_kinds.dart @@ -18,7 +18,6 @@ import '../builder/formal_parameter_builder.dart' as type; import '../builder/metadata_builder.dart' as type; import '../builder/type_builder.dart' as type; import '../builder/type_variable_builder.dart' as type; -import '../builder/unresolved_type.dart' as type; import '../identifiers.dart' as type; @@ -108,15 +107,15 @@ class ValueKinds { static const ValueKind TokenOrNull = const SingleValueKind(NullValue.Token); static const ValueKind TypeOrNull = - const SingleValueKind(NullValue.UnresolvedType); + const SingleValueKind(NullValue.TypeBuilder); static const ValueKind TypeArguments = - const SingleValueKind>(); + const SingleValueKind>(); static const ValueKind TypeArgumentsOrNull = - const SingleValueKind>(NullValue.TypeArguments); + const SingleValueKind>(NullValue.TypeArguments); static const ValueKind TypeBuilder = const SingleValueKind(); static const ValueKind TypeBuilderOrNull = - const SingleValueKind(NullValue.UnresolvedType); + const SingleValueKind(NullValue.TypeBuilder); static const ValueKind TypeBuilderListOrNull = const SingleValueKind>(NullValue.TypeBuilderList); static const ValueKind TypeVariableListOrNull = diff --git a/pkg/front_end/lib/src/testing/id_testing_utils.dart b/pkg/front_end/lib/src/testing/id_testing_utils.dart index f9729d334dc..02297a9e139 100644 --- a/pkg/front_end/lib/src/testing/id_testing_utils.dart +++ b/pkg/front_end/lib/src/testing/id_testing_utils.dart @@ -137,7 +137,7 @@ TypeParameterScopeBuilder lookupLibraryDeclarationBuilder( SourceLibraryBuilder builder = lookupLibraryBuilder(compilerResult, library, required: required) as SourceLibraryBuilder; - return builder.libraryDeclaration; + return builder.libraryTypeParameterScopeBuilderForTesting; } ClassBuilder? lookupClassBuilder( diff --git a/pkg/front_end/test/explicit_creation_git_test.dart b/pkg/front_end/test/explicit_creation_git_test.dart index 287b605d237..50289255893 100644 --- a/pkg/front_end/test/explicit_creation_git_test.dart +++ b/pkg/front_end/test/explicit_creation_git_test.dart @@ -16,8 +16,8 @@ import 'package:front_end/src/compute_platform_binaries_location.dart' import 'package:front_end/src/fasta/builder/declaration_builder.dart'; import 'package:front_end/src/fasta/builder/field_builder.dart'; import 'package:front_end/src/fasta/builder/modifier_builder.dart'; +import 'package:front_end/src/fasta/builder/type_builder.dart'; import 'package:front_end/src/fasta/builder/type_declaration_builder.dart'; -import 'package:front_end/src/fasta/builder/unresolved_type.dart'; import 'package:front_end/src/fasta/compiler_context.dart'; import 'package:front_end/src/fasta/constant_context.dart'; import 'package:front_end/src/fasta/dill/dill_target.dart'; @@ -235,7 +235,7 @@ class BodyBuilderTest extends BodyBuilder { Token nameLastToken, Arguments arguments, String name, - List typeArguments, + List typeArguments, int charOffset, Constness constness, {bool isTypeArgumentsInForest = false,