[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 <jensj@google.com>
Commit-Queue: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Johnni Winther
2021-10-06 07:39:34 +00:00
committed by commit-bot@chromium.org
parent 1d28bf98da
commit 3171c7cc0e
18 changed files with 248 additions and 304 deletions
@@ -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
@@ -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<TypeBuilder> newTypes,
List<NamedTypeBuilder> newTypes,
SourceLibraryBuilder contextLibrary,
TypeParameterScopeBuilder contextDeclaration) {
return this;
@@ -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<TypeBuilder> newTypes,
List<NamedTypeBuilder> newTypes,
SourceLibraryBuilder contextLibrary,
TypeParameterScopeBuilder contextDeclaration) {
// TODO(dmitryas): It's not clear how [metadata] is used currently, and
@@ -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<TypeBuilder> newTypes,
List<NamedTypeBuilder> newTypes,
SourceLibraryBuilder contextLibrary,
TypeParameterScopeBuilder contextDeclaration) {
List<TypeVariableBuilder>? 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
@@ -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<TypeBuilder> newTypes,
List<NamedTypeBuilder> newTypes,
SourceLibraryBuilder contextLibrary,
TypeParameterScopeBuilder contextDeclaration) {
int charOffset = -1; // TODO(dmitryas): Provide these.
@@ -507,7 +507,7 @@ class NamedTypeBuilder extends TypeBuilder {
@override
NamedTypeBuilder clone(
List<TypeBuilder> newTypes,
List<NamedTypeBuilder> newTypes,
SourceLibraryBuilder contextLibrary,
TypeParameterScopeBuilder contextDeclaration) {
List<TypeBuilder>? clonedArguments;
@@ -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<TypeBuilder> newTypes,
List<NamedTypeBuilder> newTypes,
SourceLibraryBuilder contextLibrary,
TypeParameterScopeBuilder contextDeclaration);
@@ -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<TypeBuilder> newTypes,
List<NamedTypeBuilder> newTypes,
SourceLibraryBuilder contextLibrary,
TypeParameterScopeBuilder contextDeclaration) {
// TODO(dmitryas): Figure out if using [charOffset] here is a good idea.
@@ -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)";
}
@@ -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<JumpTarget>
// 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<JumpTarget>
]));
debugEvent("Send");
Object? arguments = pop();
List<UnresolvedType>? typeArguments = pop() as List<UnresolvedType>?;
List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
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<JumpTarget>
}
@override
Expression_Generator_Initializer finishSend(
Object receiver,
List<UnresolvedType>? typeArguments,
ArgumentsImpl arguments,
int charOffset,
Expression_Generator_Initializer finishSend(Object receiver,
List<TypeBuilder>? 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<JumpTarget>
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<JumpTarget>
}
}
List<UnresolvedType>? typeArguments = pop() as List<UnresolvedType>?;
List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
DartType typeArgument;
if (typeArguments != null) {
@@ -3496,7 +3491,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
push(node);
}
void buildLiteralSet(List<UnresolvedType>? typeArguments, Token? constKeyword,
void buildLiteralSet(List<TypeBuilder>? typeArguments, Token? constKeyword,
Token leftBrace, List<dynamic>? setOrMapEntries) {
DartType typeArgument;
if (typeArguments != null) {
@@ -3565,7 +3560,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
setOrMapEntries[i] = toValue(elem);
}
}
List<UnresolvedType>? typeArguments = pop() as List<UnresolvedType>?;
List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
// 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<JumpTarget>
push(forest.createNullLiteral(offsetForToken(token)));
}
void buildLiteralMap(List<UnresolvedType>? typeArguments, Token? constKeyword,
void buildLiteralMap(List<TypeBuilder>? typeArguments, Token? constKeyword,
Token leftBrace, List<MapLiteralEntry> entries) {
DartType keyType;
DartType valueType;
@@ -3740,7 +3735,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
reportErrorIfNullableType(questionMark);
}
bool isMarkedAsNullable = questionMark != null;
List<UnresolvedType>? arguments = pop() as List<UnresolvedType>?;
List<TypeBuilder>? arguments = pop() as List<TypeBuilder>?;
Object? name = pop();
if (name is QualifiedName) {
QualifiedName qualified = name;
@@ -3755,19 +3750,16 @@ class BodyBuilder extends ScopeListener<JumpTarget>
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<JumpTarget>
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<JumpTarget>
reportErrorIfNullableType(questionMark);
}
FormalParameters formals = pop() as FormalParameters;
UnresolvedType? returnType = pop() as UnresolvedType?;
TypeBuilder? returnType = pop() as TypeBuilder?;
List<TypeVariableBuilder>? typeVariables =
pop() as List<TypeVariableBuilder>?;
if (typeVariables != null) {
@@ -3858,7 +3850,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
}
}
}
UnresolvedType type = formals.toFunctionType(
TypeBuilder type = formals.toFunctionType(
returnType,
libraryBuilder.nullableBuilderIfTrue(questionMark != null),
typeVariables);
@@ -3871,17 +3863,14 @@ class BodyBuilder extends ScopeListener<JumpTarget>
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<JumpTarget>
@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<JumpTarget>
@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<JumpTarget>
}
}
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<JumpTarget>
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<JumpTarget>
exitLocalScope();
}
FormalParameters formals = pop() as FormalParameters;
UnresolvedType? returnType = pop() as UnresolvedType?;
TypeBuilder? returnType = pop() as TypeBuilder?;
List<TypeVariableBuilder>? typeVariables =
pop() as List<TypeVariableBuilder>?;
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<JumpTarget>
}
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<JumpTarget>
}
Identifier? identifier;
List<UnresolvedType>? typeArguments = pop() as List<UnresolvedType>?;
List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
Object? type = pop();
if (type is QualifiedName) {
identifier = type;
@@ -4888,7 +4877,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
Identifier? nameLastIdentifier = pop(NullValue.Identifier) as Identifier?;
Token nameLastToken = nameLastIdentifier?.token ?? nameToken;
String name = pop() as String;
List<UnresolvedType>? typeArguments = pop() as List<UnresolvedType>?;
List<TypeBuilder>? typeArguments = pop() as List<TypeBuilder>?;
if (inMetadata && typeArguments != null) {
if (!libraryBuilder.enableGenericMetadataInLibrary) {
handleRecoverableError(fasta.messageMetadataTypeArguments,
@@ -4935,7 +4924,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
@override
Expression createInstantiationAndInvocation(
Expression Function() receiverFunction,
List<UnresolvedType>? typeArguments,
List<TypeBuilder>? typeArguments,
String className,
String constructorName,
Arguments arguments,
@@ -4985,7 +4974,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
Token nameLastToken,
Arguments? arguments,
String name,
List<UnresolvedType>? typeArguments,
List<TypeBuilder>? typeArguments,
int charOffset,
Constness constness,
{bool isTypeArgumentsInForest = false,
@@ -5026,8 +5015,8 @@ class BodyBuilder extends ScopeListener<JumpTarget>
usedAsClassFileUri: uri);
List<TypeBuilder> 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<JumpTarget>
@override
void endTypeArguments(int count, Token beginToken, Token endToken) {
debugEvent("TypeArguments");
push(const FixedNullableList<UnresolvedType>()
.popNonNullable(stack, count, dummyUnresolvedType) ??
push(const FixedNullableList<TypeBuilder>()
.popNonNullable(stack, count, dummyTypeBuilder) ??
NullValue.TypeArguments);
}
@@ -5562,7 +5551,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
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<TypeVariableBuilder>? typeParameters =
@@ -6475,13 +6464,13 @@ class BodyBuilder extends ScopeListener<JumpTarget>
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<TypeVariableBuilder> typeVariables =
peek() as List<TypeVariableBuilder>;
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<JumpTarget>
ValueKinds.TypeArguments,
unionOfKinds([ValueKinds.Generator, ValueKinds.Expression])
]));
List<UnresolvedType>? typeArguments =
pop() as List<UnresolvedType>?; // typeArguments
List<TypeBuilder>? typeArguments =
pop() as List<TypeBuilder>?; // typeArguments
if (libraryBuilder.enableConstructorTearOffsInLibrary) {
Object? operand = pop();
if (operand is Generator) {
@@ -6877,18 +6866,16 @@ class BodyBuilder extends ScopeListener<JumpTarget>
}
@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<JumpTarget>
!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<JumpTarget>
// 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<JumpTarget>
}
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<JumpTarget>
}
@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<DartType> buildDartTypeArguments(List<UnresolvedType>? unresolvedTypes,
List<DartType> buildDartTypeArguments(List<TypeBuilder>? unresolvedTypes,
{required bool allowPotentiallyConstantType}) {
if (unresolvedTypes == null) return <DartType>[];
return new List<DartType>.generate(
@@ -7363,14 +7344,13 @@ class FormalParameters {
FunctionNode buildFunctionNode(
SourceLibraryBuilder library,
UnresolvedType? returnType,
TypeBuilder? returnType,
List<TypeVariableBuilder>? typeParameters,
AsyncMarker asyncModifier,
Statement body,
int fileEndOffset) {
FunctionType type = toFunctionType(
returnType, const NullabilityBuilder.omitted(), typeParameters)
.builder
.build(library) as FunctionType;
List<VariableDeclaration> positionalParameters = <VariableDeclaration>[];
List<VariableDeclaration> namedParameters = <VariableDeclaration>[];
@@ -7397,14 +7377,11 @@ class FormalParameters {
..fileEndOffset = fileEndOffset;
}
UnresolvedType toFunctionType(
UnresolvedType? returnType, NullabilityBuilder nullabilityBuilder,
TypeBuilder toFunctionType(
TypeBuilder? returnType, NullabilityBuilder nullabilityBuilder,
[List<TypeVariableBuilder>? 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(
@@ -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<UnresolvedType>? typeArguments, ArgumentsImpl arguments,
int offset, List<TypeBuilder>? typeArguments, ArgumentsImpl arguments,
{bool isTypeArgumentsInForest = false});
Expression_Generator buildSelectorAccess(
@@ -258,7 +257,7 @@ abstract class Generator {
}
Expression_Generator applyTypeArguments(
int fileOffset, List<UnresolvedType>? typeArguments) {
int fileOffset, List<TypeBuilder>? 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<UnresolvedType>? arguments,
NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? 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<UnresolvedType>? typeArguments,
List<TypeBuilder>? typeArguments,
String name,
Arguments arguments,
Token nameToken,
@@ -413,7 +412,7 @@ class VariableUseGenerator extends Generator {
@override
Expression doInvocation(
int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, ArgumentsImpl arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, ArgumentsImpl arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? arguments,
NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, ArgumentsImpl arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments,
List<TypeBuilder>? typeArguments,
String name,
Arguments arguments,
Token nameToken,
@@ -3008,7 +3007,7 @@ class DeferredAccessGenerator extends Generator {
///
class TypeUseGenerator extends AbstractReadOnlyAccessGenerator {
final TypeDeclarationBuilder declaration;
List<UnresolvedType>? typeArguments;
List<TypeBuilder>? typeArguments;
@override
final String targetName;
@@ -3031,7 +3030,7 @@ class TypeUseGenerator extends AbstractReadOnlyAccessGenerator {
@override
TypeBuilder buildTypeWithResolvedArguments(
NullabilityBuilder nullabilityBuilder, List<UnresolvedType>? arguments,
NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? 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<TypeBuilder>.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<UnresolvedType>? typeArguments,
List<TypeBuilder>? 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<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments) {
int fileOffset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments,
List<TypeBuilder>? typeArguments,
String name,
Arguments arguments,
Token nameToken,
@@ -3734,7 +3725,7 @@ class UnresolvedNameGenerator extends ErroneousExpressionGenerator {
@override
Expression doInvocation(
int charOffset, List<UnresolvedType>? typeArguments, Arguments arguments,
int charOffset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int charOffset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? arguments,
NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? arguments,
{required bool allowPotentiallyConstantType}) {
Template<Message Function(String, String)> template = isUnresolved
? templateUnresolvedPrefixInTypeAnnotation
@@ -4282,7 +4273,7 @@ class ParserErrorGenerator extends Generator {
@override
Expression doInvocation(
int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? typeArguments, Arguments arguments,
{bool isTypeArgumentsInForest = false}) {
return buildProblem();
}
@@ -4295,7 +4286,7 @@ class ParserErrorGenerator extends Generator {
@override
TypeBuilder buildTypeWithResolvedArguments(
NullabilityBuilder nullabilityBuilder, List<UnresolvedType>? arguments,
NullabilityBuilder nullabilityBuilder, List<TypeBuilder>? 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<UnresolvedType>? typeArguments,
List<TypeBuilder>? typeArguments,
String name,
Arguments arguments,
Token nameToken,
@@ -4503,7 +4494,7 @@ class ThisAccessGenerator extends Generator {
@override
Expression_Generator_Initializer doInvocation(
int offset, List<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? typeArguments, Arguments arguments,
int offset, List<TypeBuilder>? 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<UnresolvedType>? get typeArguments => null;
List<TypeBuilder>? get typeArguments => null;
bool get isTypeArgumentsInForest => true;
@@ -4857,7 +4848,7 @@ class InvocationSelector extends Selector {
final Name name;
@override
final List<UnresolvedType>? typeArguments;
final List<TypeBuilder>? typeArguments;
@override
final bool isTypeArgumentsInForest;
@@ -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<UnresolvedType>? typeArguments, ArgumentsImpl arguments, int offset,
List<TypeBuilder>? 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<UnresolvedType>? typeArguments,
List<TypeBuilder>? 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<DartType> buildDartTypeArguments(List<UnresolvedType>? unresolvedTypes,
List<DartType> buildDartTypeArguments(List<TypeBuilder>? 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<UnresolvedType>? typeArguments,
List<TypeBuilder>? typeArguments,
String className,
String constructorName,
Arguments arguments,
@@ -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);
@@ -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, "<syntax-error>")
.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, "<syntax-error>")
.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<FormalParameterBuilder> synthesizedFormals = [];
TypeBuilder thisType = extension.extensionThisType;
if (substitution != null) {
List<TypeBuilder> unboundTypes = [];
List<NamedTypeBuilder> unboundTypes = [];
List<TypeVariableBuilder> 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, "<syntax-error>")
.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, "<syntax-error>")
.resolveTypes(typeVariables, libraryBuilder);
.resolveNamedTypes(typeVariables, libraryBuilder);
popDeclarationContext(DeclarationContext.Typedef);
return;
}
@@ -2285,7 +2283,7 @@ class OutlineBuilder extends StackListenerImpl {
libraryBuilder
.endNestedDeclaration(
TypeParameterScopeKind.functionType, "<syntax-error>")
.resolveTypes(typeVariables, libraryBuilder);
.resolveNamedTypes(typeVariables, libraryBuilder);
popDeclarationContext(DeclarationContext.Typedef);
return;
}
@@ -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<ConstructorReferenceBuilder> constructorReferences =
<ConstructorReferenceBuilder>[];
@@ -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<UnresolvedType> get types => libraryDeclaration.types;
List<NamedTypeBuilder> get unresolvedNamedTypes =>
_libraryTypeParameterScopeBuilder.unresolvedNamedTypes;
@override
bool get isSynthetic => accessProblem != null;
T addType<T extends TypeBuilder>(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<TypeBuilder>? 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<TypeBuilder> 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<String, Builder> members = declaration.members!;
Map<String, MemberBuilder> constructors = declaration.constructors!;
Map<String, MemberBuilder> 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<String, Builder> members = declaration.members!;
Map<String, MemberBuilder> constructors = declaration.constructors!;
Map<String, MemberBuilder> setters = declaration.setters!;
@@ -2111,7 +2111,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
applicationTypeVariables = copyTypeVariables(
typeVariables!, currentTypeParameterScopeBuilder);
List<TypeBuilder> newTypes = <TypeBuilder>[];
List<NamedTypeBuilder> newTypes = <NamedTypeBuilder>[];
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 = <TypeBuilder>[];
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<TypeVariableBuilder> copyTypeVariables(
List<TypeVariableBuilder> original, TypeParameterScopeBuilder declaration,
{bool isExtensionTypeParameter: false}) {
List<TypeBuilder> newTypes = <TypeBuilder>[];
List<NamedTypeBuilder> newTypes = <NamedTypeBuilder>[];
List<TypeVariableBuilder> copy = <TypeVariableBuilder>[];
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<TypeBuilder> unboundTypes = [];
List<NamedTypeBuilder> unboundTypes = [];
List<TypeVariableBuilder> unboundTypeVariables = [];
List<TypeBuilder> 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<NonSimplicityIssue> 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<SourceExtensionBuilder>? extensions;
final List<UnresolvedType> types = <UnresolvedType>[];
final List<NamedTypeBuilder> unresolvedNamedTypes = <NamedTypeBuilder>[];
// 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 `<T extends A<T>>`.
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
/// `<T extends A<T>>`.
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<TypeVariableBuilder>? typeVariables, SourceLibraryBuilder library) {
Map<String, TypeVariableBuilder>? 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) {
@@ -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<type.Token>(NullValue.Token);
static const ValueKind TypeOrNull =
const SingleValueKind<type.UnresolvedType>(NullValue.UnresolvedType);
const SingleValueKind<type.TypeBuilder>(NullValue.TypeBuilder);
static const ValueKind TypeArguments =
const SingleValueKind<List<type.UnresolvedType>>();
const SingleValueKind<List<type.TypeBuilder>>();
static const ValueKind TypeArgumentsOrNull =
const SingleValueKind<List<type.UnresolvedType>>(NullValue.TypeArguments);
const SingleValueKind<List<type.TypeBuilder>>(NullValue.TypeArguments);
static const ValueKind TypeBuilder =
const SingleValueKind<type.TypeBuilder>();
static const ValueKind TypeBuilderOrNull =
const SingleValueKind<type.TypeBuilder>(NullValue.UnresolvedType);
const SingleValueKind<type.TypeBuilder>(NullValue.TypeBuilder);
static const ValueKind TypeBuilderListOrNull =
const SingleValueKind<List<type.TypeBuilder>>(NullValue.TypeBuilderList);
static const ValueKind TypeVariableListOrNull =
@@ -137,7 +137,7 @@ TypeParameterScopeBuilder lookupLibraryDeclarationBuilder(
SourceLibraryBuilder builder =
lookupLibraryBuilder(compilerResult, library, required: required)
as SourceLibraryBuilder;
return builder.libraryDeclaration;
return builder.libraryTypeParameterScopeBuilderForTesting;
}
ClassBuilder? lookupClassBuilder(
@@ -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<UnresolvedType> typeArguments,
List<TypeBuilder> typeArguments,
int charOffset,
Constness constness,
{bool isTypeArgumentsInForest = false,