mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 01:10:27 +00:00
Remove KernelMixinApplicationBuilder and KernelNamedTypeBuilder
NamedTypeBuilder and MixinApplicationBuilder are only subclassed by KernelNamedTypeBuilder and KernelMixinApplicationBuilder, respectively, so the distinction can be removed. Change-Id: If0a6434d76c20c3c10a8e25b86d2a5542d5244b2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/109263 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Dan Rubel <danrubel@google.com>
This commit is contained in:
parent
0177076f2f
commit
ed38b6d664
|
@ -4,17 +4,23 @@
|
|||
|
||||
library fasta.mixin_application_builder;
|
||||
|
||||
import 'builder.dart' show TypeBuilder, TypeVariableBuilder;
|
||||
import 'builder.dart' show LibraryBuilder, TypeBuilder, TypeVariableBuilder;
|
||||
|
||||
abstract class MixinApplicationBuilder<T extends TypeBuilder>
|
||||
extends TypeBuilder {
|
||||
final T supertype;
|
||||
final List<T> mixins;
|
||||
import 'package:kernel/ast.dart' show InterfaceType, Supertype;
|
||||
|
||||
import '../fasta_codes.dart' show LocatedMessage;
|
||||
|
||||
import '../problems.dart' show unsupported;
|
||||
|
||||
class MixinApplicationBuilder extends TypeBuilder {
|
||||
final TypeBuilder supertype;
|
||||
final List<TypeBuilder> mixins;
|
||||
Supertype builtType;
|
||||
|
||||
List<TypeVariableBuilder> typeVariables;
|
||||
|
||||
MixinApplicationBuilder(this.supertype, this.mixins);
|
||||
|
||||
void set typeVariables(List<TypeVariableBuilder> variables);
|
||||
|
||||
String get name => null;
|
||||
|
||||
String get debugName => "MixinApplicationBuilder";
|
||||
|
@ -23,11 +29,41 @@ abstract class MixinApplicationBuilder<T extends TypeBuilder>
|
|||
buffer.write(supertype);
|
||||
buffer.write(" with ");
|
||||
bool first = true;
|
||||
for (T t in mixins) {
|
||||
for (TypeBuilder t in mixins) {
|
||||
if (!first) buffer.write(", ");
|
||||
first = false;
|
||||
t.printOn(buffer);
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
||||
@override
|
||||
InterfaceType build(LibraryBuilder library) {
|
||||
int charOffset = -1; // TODO(ahe): Provide these.
|
||||
Uri fileUri = null; // TODO(ahe): Provide these.
|
||||
return unsupported("build", charOffset, fileUri);
|
||||
}
|
||||
|
||||
@override
|
||||
Supertype buildSupertype(
|
||||
LibraryBuilder library, int charOffset, Uri fileUri) {
|
||||
return unsupported("buildSupertype", charOffset, fileUri);
|
||||
}
|
||||
|
||||
@override
|
||||
Supertype buildMixedInType(
|
||||
LibraryBuilder library, int charOffset, Uri fileUri) {
|
||||
return unsupported("buildMixedInType", charOffset, fileUri);
|
||||
}
|
||||
|
||||
@override
|
||||
buildInvalidType(LocatedMessage message, {List<LocatedMessage> context}) {
|
||||
return unsupported("buildInvalidType", message.charOffset, message.uri);
|
||||
}
|
||||
|
||||
MixinApplicationBuilder clone(List<TypeBuilder> newTypes) {
|
||||
int charOffset = -1; // TODO(dmitryas): Provide these.
|
||||
Uri fileUri = null; // TODO(dmitryas): Provide these.
|
||||
return unsupported("clone", charOffset, fileUri);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
|
||||
library fasta.named_type_builder;
|
||||
|
||||
import 'package:kernel/ast.dart' show DartType, Supertype;
|
||||
|
||||
import '../fasta_codes.dart'
|
||||
show
|
||||
Message,
|
||||
|
@ -17,13 +19,17 @@ import '../fasta_codes.dart'
|
|||
templateTypeArgumentsOnTypeVariable,
|
||||
templateTypeNotFound;
|
||||
|
||||
import '../messages.dart'
|
||||
show noLength, templateSupertypeIsIllegal, templateSupertypeIsTypeVariable;
|
||||
|
||||
import '../problems.dart' show unhandled;
|
||||
|
||||
import '../severity.dart' show Severity;
|
||||
|
||||
import 'builder.dart'
|
||||
show
|
||||
Declaration,
|
||||
Identifier,
|
||||
InvalidTypeBuilder,
|
||||
LibraryBuilder,
|
||||
PrefixBuilder,
|
||||
QualifiedName,
|
||||
|
@ -33,20 +39,26 @@ import 'builder.dart'
|
|||
TypeVariableBuilder,
|
||||
flattenName;
|
||||
|
||||
abstract class NamedTypeBuilder<T extends TypeBuilder, R> extends TypeBuilder {
|
||||
import '../kernel/kernel_builder.dart'
|
||||
show
|
||||
KernelClassBuilder,
|
||||
KernelInvalidTypeBuilder,
|
||||
LibraryBuilder,
|
||||
TypeBuilder,
|
||||
TypeDeclarationBuilder,
|
||||
TypeVariableBuilder,
|
||||
flattenName;
|
||||
|
||||
class NamedTypeBuilder extends TypeBuilder {
|
||||
final Object name;
|
||||
|
||||
List<T> arguments;
|
||||
List<TypeBuilder> arguments;
|
||||
|
||||
@override
|
||||
TypeDeclarationBuilder<T, R> declaration;
|
||||
TypeDeclarationBuilder<TypeBuilder, DartType> declaration;
|
||||
|
||||
NamedTypeBuilder(this.name, this.arguments);
|
||||
|
||||
@override
|
||||
InvalidTypeBuilder<T, R> buildInvalidType(LocatedMessage message,
|
||||
{List<LocatedMessage> context});
|
||||
|
||||
@override
|
||||
void bind(TypeDeclarationBuilder declaration) {
|
||||
this.declaration = declaration?.origin;
|
||||
|
@ -157,7 +169,7 @@ abstract class NamedTypeBuilder<T extends TypeBuilder, R> extends TypeBuilder {
|
|||
if (arguments?.isEmpty ?? true) return buffer;
|
||||
buffer.write("<");
|
||||
bool first = true;
|
||||
for (T t in arguments) {
|
||||
for (TypeBuilder t in arguments) {
|
||||
if (!first) buffer.write(", ");
|
||||
first = false;
|
||||
t.printOn(buffer);
|
||||
|
@ -165,4 +177,102 @@ abstract class NamedTypeBuilder<T extends TypeBuilder, R> extends TypeBuilder {
|
|||
buffer.write(">");
|
||||
return buffer;
|
||||
}
|
||||
|
||||
KernelInvalidTypeBuilder buildInvalidType(LocatedMessage message,
|
||||
{List<LocatedMessage> context}) {
|
||||
// TODO(ahe): Consider if it makes sense to pass a QualifiedName to
|
||||
// KernelInvalidTypeBuilder?
|
||||
return new KernelInvalidTypeBuilder(
|
||||
flattenName(name, message.charOffset, message.uri), message,
|
||||
context: context);
|
||||
}
|
||||
|
||||
Supertype handleInvalidSupertype(
|
||||
LibraryBuilder library, int charOffset, Uri fileUri) {
|
||||
var template = declaration.isTypeVariable
|
||||
? templateSupertypeIsTypeVariable
|
||||
: templateSupertypeIsIllegal;
|
||||
library.addProblem(
|
||||
template.withArguments(flattenName(name, charOffset, fileUri)),
|
||||
charOffset,
|
||||
noLength,
|
||||
fileUri);
|
||||
return null;
|
||||
}
|
||||
|
||||
DartType build(LibraryBuilder library) {
|
||||
return declaration.buildType(library, arguments);
|
||||
}
|
||||
|
||||
Supertype buildSupertype(
|
||||
LibraryBuilder library, int charOffset, Uri fileUri) {
|
||||
TypeDeclarationBuilder declaration = this.declaration;
|
||||
if (declaration is KernelClassBuilder) {
|
||||
return declaration.buildSupertype(library, arguments);
|
||||
} else if (declaration is KernelInvalidTypeBuilder) {
|
||||
library.addProblem(
|
||||
declaration.message.messageObject,
|
||||
declaration.message.charOffset,
|
||||
declaration.message.length,
|
||||
declaration.message.uri,
|
||||
severity: Severity.error);
|
||||
return null;
|
||||
} else {
|
||||
return handleInvalidSupertype(library, charOffset, fileUri);
|
||||
}
|
||||
}
|
||||
|
||||
Supertype buildMixedInType(
|
||||
LibraryBuilder library, int charOffset, Uri fileUri) {
|
||||
TypeDeclarationBuilder declaration = this.declaration;
|
||||
if (declaration is KernelClassBuilder) {
|
||||
return declaration.buildMixedInType(library, arguments);
|
||||
} else if (declaration is KernelInvalidTypeBuilder) {
|
||||
library.addProblem(
|
||||
declaration.message.messageObject,
|
||||
declaration.message.charOffset,
|
||||
declaration.message.length,
|
||||
declaration.message.uri,
|
||||
severity: Severity.error);
|
||||
return null;
|
||||
} else {
|
||||
return handleInvalidSupertype(library, charOffset, fileUri);
|
||||
}
|
||||
}
|
||||
|
||||
TypeBuilder subst(Map<TypeVariableBuilder, TypeBuilder> substitution) {
|
||||
TypeBuilder result = substitution[declaration];
|
||||
if (result != null) {
|
||||
assert(declaration is TypeVariableBuilder);
|
||||
return result;
|
||||
} else if (arguments != null) {
|
||||
List<TypeBuilder> arguments;
|
||||
int i = 0;
|
||||
for (TypeBuilder argument in this.arguments) {
|
||||
TypeBuilder type = argument.subst(substitution);
|
||||
if (type != argument) {
|
||||
arguments ??= this.arguments.toList();
|
||||
arguments[i] = type;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (arguments != null) {
|
||||
return new NamedTypeBuilder(name, arguments)..bind(declaration);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
NamedTypeBuilder clone(List<TypeBuilder> newTypes) {
|
||||
List<TypeBuilder> clonedArguments;
|
||||
if (arguments != null) {
|
||||
clonedArguments = new List<TypeBuilder>(arguments.length);
|
||||
for (int i = 0; i < clonedArguments.length; i++) {
|
||||
clonedArguments[i] = arguments[i].clone(newTypes);
|
||||
}
|
||||
}
|
||||
NamedTypeBuilder newType = new NamedTypeBuilder(name, clonedArguments);
|
||||
newTypes.add(newType);
|
||||
return newType;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1745,7 +1745,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
|
|||
// This way of computing the superclass is slower than using the kernel
|
||||
// objects directly.
|
||||
Object supertype = builder.supertype;
|
||||
if (supertype is NamedTypeBuilder<TypeBuilder, Object>) {
|
||||
if (supertype is NamedTypeBuilder) {
|
||||
Object builder = supertype.declaration;
|
||||
if (builder is ClassBuilder<TypeBuilder, Object>) return builder;
|
||||
}
|
||||
|
@ -2793,7 +2793,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
|
|||
library.addProblem(
|
||||
message, offset, lengthOfSpan(beginToken, suffix), uri);
|
||||
push(new UnresolvedType<TypeBuilder>(
|
||||
new KernelNamedTypeBuilder(name, null)
|
||||
new NamedTypeBuilder(name, null)
|
||||
..bind(new KernelInvalidTypeBuilder(
|
||||
name,
|
||||
message.withLocation(
|
||||
|
@ -2813,7 +2813,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
|
|||
// TODO(ahe): Arguments could be passed here.
|
||||
library.addProblem(
|
||||
name.message, name.charOffset, name.name.length, name.fileUri);
|
||||
result = new KernelNamedTypeBuilder(name.name, null)
|
||||
result = new NamedTypeBuilder(name.name, null)
|
||||
..bind(new KernelInvalidTypeBuilder(
|
||||
name.name,
|
||||
name.message.withLocation(
|
||||
|
@ -2866,7 +2866,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
|
|||
debugEvent("VoidKeyword");
|
||||
int offset = offsetForToken(token);
|
||||
push(new UnresolvedType<TypeBuilder>(
|
||||
new KernelNamedTypeBuilder("void", null)
|
||||
new NamedTypeBuilder("void", null)
|
||||
..bind(new VoidTypeBuilder<TypeBuilder, VoidType>(
|
||||
const VoidType(), library, offset)),
|
||||
offset,
|
||||
|
@ -5207,8 +5207,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
|
|||
UnresolvedType<TypeBuilder> validateTypeUse(
|
||||
UnresolvedType<TypeBuilder> unresolved, bool nonInstanceAccessIsError) {
|
||||
TypeBuilder builder = unresolved.builder;
|
||||
if (builder is KernelNamedTypeBuilder &&
|
||||
builder.declaration.isTypeVariable) {
|
||||
if (builder is NamedTypeBuilder && builder.declaration.isTypeVariable) {
|
||||
TypeParameter typeParameter = builder.declaration.target;
|
||||
LocatedMessage message;
|
||||
if (!isInstanceContext && typeParameter.parent is Class) {
|
||||
|
@ -5226,7 +5225,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
|
|||
}
|
||||
addProblem(message.messageObject, message.charOffset, message.length);
|
||||
return new UnresolvedType<TypeBuilder>(
|
||||
new KernelNamedTypeBuilder(typeParameter.name, null)
|
||||
new NamedTypeBuilder(typeParameter.name, null)
|
||||
..bind(new KernelInvalidTypeBuilder(typeParameter.name, message)),
|
||||
unresolved.charOffset,
|
||||
unresolved.fileUri);
|
||||
|
|
|
@ -81,7 +81,7 @@ import 'kernel_builder.dart'
|
|||
KernelClassBuilder,
|
||||
KernelFieldBuilder,
|
||||
KernelLibraryBuilder,
|
||||
KernelNamedTypeBuilder,
|
||||
NamedTypeBuilder,
|
||||
KernelProcedureBuilder,
|
||||
KernelTypeVariableBuilder,
|
||||
LibraryBuilder,
|
||||
|
@ -247,8 +247,7 @@ class ClassHierarchyBuilder {
|
|||
TypeBuilder asSupertypeOf(Class cls, Class supertype) {
|
||||
ClassHierarchyNode clsNode = getNodeFromKernelClass(cls);
|
||||
if (cls == supertype) {
|
||||
return new KernelNamedTypeBuilder(clsNode.cls.name, null)
|
||||
..bind(clsNode.cls);
|
||||
return new NamedTypeBuilder(clsNode.cls.name, null)..bind(clsNode.cls);
|
||||
}
|
||||
ClassHierarchyNode supertypeNode = getNodeFromKernelClass(supertype);
|
||||
List<TypeBuilder> supertypes = clsNode.superclasses;
|
||||
|
@ -283,7 +282,7 @@ class ClassHierarchyBuilder {
|
|||
superclass.typeParameters.length, nullKernelClass.rawType));
|
||||
}
|
||||
}
|
||||
KernelNamedTypeBuilder supertype = asSupertypeOf(kernelClass, superclass);
|
||||
NamedTypeBuilder supertype = asSupertypeOf(kernelClass, superclass);
|
||||
if (supertype == null) return null;
|
||||
if (supertype.arguments == null && superclass.typeParameters.isEmpty) {
|
||||
return superclass.rawType;
|
||||
|
@ -1325,7 +1324,7 @@ class ClassHierarchyNodeBuilder {
|
|||
}
|
||||
|
||||
TypeBuilder recordSupertype(TypeBuilder supertype) {
|
||||
if (supertype is KernelNamedTypeBuilder) {
|
||||
if (supertype is NamedTypeBuilder) {
|
||||
debug?.log(
|
||||
"In ${this.cls.fullNameForErrors} recordSupertype(${supertype.fullNameForErrors})");
|
||||
Declaration declaration = supertype.declaration;
|
||||
|
@ -1360,7 +1359,7 @@ class ClassHierarchyNodeBuilder {
|
|||
}
|
||||
|
||||
List<TypeBuilder> substSupertypes(
|
||||
KernelNamedTypeBuilder supertype, List<TypeBuilder> supertypes) {
|
||||
NamedTypeBuilder supertype, List<TypeBuilder> supertypes) {
|
||||
Declaration declaration = supertype.declaration;
|
||||
if (declaration is! KernelClassBuilder) return supertypes;
|
||||
KernelClassBuilder cls = declaration;
|
||||
|
@ -1639,7 +1638,7 @@ class ClassHierarchyNodeBuilder {
|
|||
inferredArguments[i] =
|
||||
hierarchy.loader.computeTypeBuilder(typeArguments[i]);
|
||||
}
|
||||
KernelNamedTypeBuilder mixedInType = cls.mixedInType;
|
||||
NamedTypeBuilder mixedInType = cls.mixedInType;
|
||||
mixedInType.arguments = inferredArguments;
|
||||
}
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ import 'kernel_builder.dart'
|
|||
Declaration,
|
||||
KernelClassBuilder,
|
||||
KernelInvalidTypeBuilder,
|
||||
KernelNamedTypeBuilder,
|
||||
NamedTypeBuilder,
|
||||
TypeBuilder,
|
||||
UnresolvedType;
|
||||
|
||||
|
@ -442,8 +442,7 @@ abstract class Generator {
|
|||
|
||||
TypeBuilder buildTypeWithResolvedArguments(
|
||||
List<UnresolvedType<TypeBuilder>> arguments) {
|
||||
KernelNamedTypeBuilder result =
|
||||
new KernelNamedTypeBuilder(token.lexeme, null);
|
||||
NamedTypeBuilder result = new NamedTypeBuilder(token.lexeme, null);
|
||||
Message message = templateNotAType.withArguments(token.lexeme);
|
||||
_helper.library.addProblem(
|
||||
message, offsetForToken(token), lengthForToken(token), _uri);
|
||||
|
@ -1653,7 +1652,7 @@ class DeferredAccessGenerator extends Generator {
|
|||
TypeBuilder type =
|
||||
suffixGenerator.buildTypeWithResolvedArguments(arguments);
|
||||
LocatedMessage message;
|
||||
if (type is KernelNamedTypeBuilder &&
|
||||
if (type is NamedTypeBuilder &&
|
||||
type.declaration is KernelInvalidTypeBuilder) {
|
||||
KernelInvalidTypeBuilder declaration = type.declaration;
|
||||
message = declaration.message;
|
||||
|
@ -1667,7 +1666,7 @@ class DeferredAccessGenerator extends Generator {
|
|||
.withLocation(
|
||||
_uri, charOffset, lengthOfSpan(prefixGenerator.token, token));
|
||||
}
|
||||
KernelNamedTypeBuilder result = new KernelNamedTypeBuilder(name, null);
|
||||
NamedTypeBuilder result = new NamedTypeBuilder(name, null);
|
||||
_helper.library.addProblem(
|
||||
message.messageObject, message.charOffset, message.length, message.uri);
|
||||
result.bind(result.buildInvalidType(message));
|
||||
|
@ -1748,7 +1747,7 @@ class TypeUseGenerator extends ReadOnlyAccessGenerator {
|
|||
_helper.validateTypeUse(arguments[i], false).builder;
|
||||
}
|
||||
}
|
||||
return new KernelNamedTypeBuilder(_plainNameForRead, argumentBuilders)
|
||||
return new NamedTypeBuilder(_plainNameForRead, argumentBuilders)
|
||||
..bind(declaration);
|
||||
}
|
||||
|
||||
|
@ -2504,8 +2503,7 @@ class UnexpectedQualifiedUseGenerator extends Generator {
|
|||
Template<Message Function(String, String)> template = isUnresolved
|
||||
? templateUnresolvedPrefixInTypeAnnotation
|
||||
: templateNotAPrefixInTypeAnnotation;
|
||||
KernelNamedTypeBuilder result =
|
||||
new KernelNamedTypeBuilder(_plainNameForRead, null);
|
||||
NamedTypeBuilder result = new NamedTypeBuilder(_plainNameForRead, null);
|
||||
Message message =
|
||||
template.withArguments(prefixGenerator.token.lexeme, token.lexeme);
|
||||
_helper.library.addProblem(message, offsetForToken(prefixGenerator.token),
|
||||
|
@ -2600,8 +2598,7 @@ class ParserErrorGenerator extends Generator {
|
|||
|
||||
TypeBuilder buildTypeWithResolvedArguments(
|
||||
List<UnresolvedType<TypeBuilder>> arguments) {
|
||||
KernelNamedTypeBuilder result =
|
||||
new KernelNamedTypeBuilder(token.lexeme, null);
|
||||
NamedTypeBuilder result = new NamedTypeBuilder(token.lexeme, null);
|
||||
_helper.library.addProblem(message, offsetForToken(token), noLength, _uri);
|
||||
result.bind(result.buildInvalidType(
|
||||
message.withLocation(_uri, offsetForToken(token), noLength)));
|
||||
|
|
|
@ -35,11 +35,6 @@ export 'kernel_library_builder.dart' show KernelLibraryBuilder;
|
|||
|
||||
export 'kernel_metadata_builder.dart' show KernelMetadataBuilder;
|
||||
|
||||
export 'kernel_mixin_application_builder.dart'
|
||||
show KernelMixinApplicationBuilder;
|
||||
|
||||
export 'kernel_named_type_builder.dart' show KernelNamedTypeBuilder;
|
||||
|
||||
export 'kernel_prefix_builder.dart' show KernelPrefixBuilder;
|
||||
|
||||
export 'kernel_procedure_builder.dart'
|
||||
|
|
|
@ -106,7 +106,7 @@ import 'kernel_builder.dart'
|
|||
KernelFunctionBuilder,
|
||||
KernelLibraryBuilder,
|
||||
KernelMetadataBuilder,
|
||||
KernelNamedTypeBuilder,
|
||||
NamedTypeBuilder,
|
||||
KernelProcedureBuilder,
|
||||
KernelRedirectingFactoryBuilder,
|
||||
TypeBuilder,
|
||||
|
@ -249,7 +249,7 @@ abstract class KernelClassBuilder
|
|||
// Extract super class (if it exists).
|
||||
ClassBuilder superClass;
|
||||
TypeBuilder superClassType = supertype;
|
||||
if (superClassType is KernelNamedTypeBuilder) {
|
||||
if (superClassType is NamedTypeBuilder) {
|
||||
Declaration decl = superClassType.declaration;
|
||||
if (decl is ClassBuilder) {
|
||||
superClass = decl;
|
||||
|
@ -261,7 +261,7 @@ abstract class KernelClassBuilder
|
|||
Map<ClassBuilder, int> problemsOffsets;
|
||||
Set<ClassBuilder> implemented = new Set<ClassBuilder>();
|
||||
for (TypeBuilder type in interfaces) {
|
||||
if (type is KernelNamedTypeBuilder) {
|
||||
if (type is NamedTypeBuilder) {
|
||||
int charOffset = -1; // TODO(ahe): Get offset from type.
|
||||
Declaration decl = type.declaration;
|
||||
if (decl is ClassBuilder) {
|
||||
|
|
|
@ -55,7 +55,7 @@ import 'kernel_builder.dart'
|
|||
KernelFieldBuilder,
|
||||
KernelFormalParameterBuilder,
|
||||
KernelLibraryBuilder,
|
||||
KernelNamedTypeBuilder,
|
||||
NamedTypeBuilder,
|
||||
KernelProcedureBuilder,
|
||||
TypeBuilder,
|
||||
LibraryBuilder,
|
||||
|
@ -70,13 +70,13 @@ class KernelEnumBuilder extends SourceClassBuilder
|
|||
@override
|
||||
final List<EnumConstantInfo> enumConstantInfos;
|
||||
|
||||
final KernelNamedTypeBuilder intType;
|
||||
final NamedTypeBuilder intType;
|
||||
|
||||
final KernelNamedTypeBuilder stringType;
|
||||
final NamedTypeBuilder stringType;
|
||||
|
||||
final KernelNamedTypeBuilder objectType;
|
||||
final NamedTypeBuilder objectType;
|
||||
|
||||
final KernelNamedTypeBuilder listType;
|
||||
final NamedTypeBuilder listType;
|
||||
|
||||
KernelEnumBuilder.internal(
|
||||
List<MetadataBuilder> metadata,
|
||||
|
@ -109,16 +109,15 @@ class KernelEnumBuilder extends SourceClassBuilder
|
|||
assert(enumConstantInfos == null || enumConstantInfos.isNotEmpty);
|
||||
// TODO(ahe): These types shouldn't be looked up in scope, they come
|
||||
// directly from dart:core.
|
||||
TypeBuilder intType = new KernelNamedTypeBuilder("int", null);
|
||||
TypeBuilder stringType = new KernelNamedTypeBuilder("String", null);
|
||||
KernelNamedTypeBuilder objectType =
|
||||
new KernelNamedTypeBuilder("Object", null);
|
||||
TypeBuilder intType = new NamedTypeBuilder("int", null);
|
||||
TypeBuilder stringType = new NamedTypeBuilder("String", null);
|
||||
NamedTypeBuilder objectType = new NamedTypeBuilder("Object", null);
|
||||
Class cls = new Class(name: name);
|
||||
Map<String, MemberBuilder> members = <String, MemberBuilder>{};
|
||||
Map<String, MemberBuilder> constructors = <String, MemberBuilder>{};
|
||||
KernelNamedTypeBuilder selfType = new KernelNamedTypeBuilder(name, null);
|
||||
NamedTypeBuilder selfType = new NamedTypeBuilder(name, null);
|
||||
TypeBuilder listType =
|
||||
new KernelNamedTypeBuilder("List", <TypeBuilder>[selfType]);
|
||||
new NamedTypeBuilder("List", <TypeBuilder>[selfType]);
|
||||
|
||||
/// metadata class E {
|
||||
/// final int index;
|
||||
|
|
|
@ -138,8 +138,8 @@ import 'kernel_builder.dart'
|
|||
KernelTypeAliasBuilder,
|
||||
KernelInvalidTypeBuilder,
|
||||
KernelMetadataBuilder,
|
||||
KernelMixinApplicationBuilder,
|
||||
KernelNamedTypeBuilder,
|
||||
MixinApplicationBuilder,
|
||||
NamedTypeBuilder,
|
||||
KernelProcedureBuilder,
|
||||
KernelRedirectingFactoryBuilder,
|
||||
KernelTypeVariableBuilder,
|
||||
|
@ -236,13 +236,12 @@ class KernelLibraryBuilder extends SourceLibraryBuilder<TypeBuilder, Library> {
|
|||
|
||||
TypeBuilder addNamedType(
|
||||
Object name, List<TypeBuilder> arguments, int charOffset) {
|
||||
return addType(new KernelNamedTypeBuilder(name, arguments), charOffset);
|
||||
return addType(new NamedTypeBuilder(name, arguments), charOffset);
|
||||
}
|
||||
|
||||
TypeBuilder addMixinApplication(
|
||||
TypeBuilder supertype, List<TypeBuilder> mixins, int charOffset) {
|
||||
return addType(
|
||||
new KernelMixinApplicationBuilder(supertype, mixins), charOffset);
|
||||
return addType(new MixinApplicationBuilder(supertype, mixins), charOffset);
|
||||
}
|
||||
|
||||
TypeBuilder addVoidType(int charOffset) {
|
||||
|
@ -498,7 +497,7 @@ class KernelLibraryBuilder extends SourceLibraryBuilder<TypeBuilder, Library> {
|
|||
"interfaces", "unnamed mixin application", charOffset, fileUri);
|
||||
}
|
||||
}
|
||||
if (type is KernelMixinApplicationBuilder) {
|
||||
if (type is MixinApplicationBuilder) {
|
||||
// Documentation below assumes the given mixin application is in one of
|
||||
// these forms:
|
||||
//
|
||||
|
@ -559,7 +558,7 @@ class KernelLibraryBuilder extends SourceLibraryBuilder<TypeBuilder, Library> {
|
|||
/// Helper function that returns `true` if a type variable with a name
|
||||
/// from [typeVariableNames] is referenced in [type].
|
||||
bool usesTypeVariables(TypeBuilder type) {
|
||||
if (type is KernelNamedTypeBuilder) {
|
||||
if (type is NamedTypeBuilder) {
|
||||
if (type.declaration is KernelTypeVariableBuilder) {
|
||||
return typeVariableNames.contains(type.declaration.name);
|
||||
}
|
||||
|
@ -593,10 +592,10 @@ class KernelLibraryBuilder extends SourceLibraryBuilder<TypeBuilder, Library> {
|
|||
isNamedMixinApplication = name != null && mixin == type.mixins.last;
|
||||
bool isGeneric = false;
|
||||
if (!isNamedMixinApplication) {
|
||||
if (supertype is KernelNamedTypeBuilder) {
|
||||
if (supertype is NamedTypeBuilder) {
|
||||
isGeneric = isGeneric || usesTypeVariables(supertype);
|
||||
}
|
||||
if (mixin is KernelNamedTypeBuilder) {
|
||||
if (mixin is NamedTypeBuilder) {
|
||||
runningName += "&${extractName(mixin.name)}";
|
||||
isGeneric = isGeneric || usesTypeVariables(mixin);
|
||||
}
|
||||
|
@ -619,13 +618,12 @@ class KernelLibraryBuilder extends SourceLibraryBuilder<TypeBuilder, Library> {
|
|||
copyTypeVariables(typeVariables, currentDeclaration);
|
||||
|
||||
List<TypeBuilder> newTypes = <TypeBuilder>[];
|
||||
if (supertype is KernelNamedTypeBuilder &&
|
||||
supertype.arguments != null) {
|
||||
if (supertype is NamedTypeBuilder && supertype.arguments != null) {
|
||||
for (int i = 0; i < supertype.arguments.length; ++i) {
|
||||
supertype.arguments[i] = supertype.arguments[i].clone(newTypes);
|
||||
}
|
||||
}
|
||||
if (mixin is KernelNamedTypeBuilder && mixin.arguments != null) {
|
||||
if (mixin is NamedTypeBuilder && mixin.arguments != null) {
|
||||
for (int i = 0; i < mixin.arguments.length; ++i) {
|
||||
mixin.arguments[i] = mixin.arguments[i].clone(newTypes);
|
||||
}
|
||||
|
@ -709,8 +707,8 @@ class KernelLibraryBuilder extends SourceLibraryBuilder<TypeBuilder, Library> {
|
|||
int charEndOffset) {
|
||||
// Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
|
||||
endNestedDeclaration(name).resolveTypes(typeVariables, this);
|
||||
KernelNamedTypeBuilder supertype = applyMixins(mixinApplication,
|
||||
startCharOffset, charOffset, charEndOffset, name, false,
|
||||
NamedTypeBuilder supertype = applyMixins(mixinApplication, startCharOffset,
|
||||
charOffset, charEndOffset, name, false,
|
||||
documentationComment: documentationComment,
|
||||
metadata: metadata,
|
||||
name: name,
|
||||
|
@ -912,7 +910,7 @@ class KernelLibraryBuilder extends SourceLibraryBuilder<TypeBuilder, Library> {
|
|||
DeclarationBuilder<TypeBuilder> savedDeclaration = currentDeclaration;
|
||||
currentDeclaration = factoryDeclaration;
|
||||
for (TypeVariableBuilder tv in procedure.typeVariables) {
|
||||
KernelNamedTypeBuilder t = procedure.returnType;
|
||||
NamedTypeBuilder t = procedure.returnType;
|
||||
t.arguments.add(addNamedType(tv.name, null, procedure.charOffset));
|
||||
}
|
||||
currentDeclaration = savedDeclaration;
|
||||
|
|
|
@ -1,59 +0,0 @@
|
|||
// Copyright (c) 2016, 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.kernel_mixin_application_builder;
|
||||
|
||||
import 'package:kernel/ast.dart' show InterfaceType, Supertype;
|
||||
|
||||
import '../fasta_codes.dart' show LocatedMessage;
|
||||
|
||||
import '../problems.dart' show unsupported;
|
||||
|
||||
import 'kernel_builder.dart'
|
||||
show
|
||||
LibraryBuilder,
|
||||
MixinApplicationBuilder,
|
||||
TypeBuilder,
|
||||
TypeVariableBuilder;
|
||||
|
||||
class KernelMixinApplicationBuilder extends MixinApplicationBuilder<TypeBuilder>
|
||||
implements TypeBuilder {
|
||||
Supertype builtType;
|
||||
|
||||
List<TypeVariableBuilder> typeVariables;
|
||||
|
||||
KernelMixinApplicationBuilder(TypeBuilder supertype, List<TypeBuilder> mixins)
|
||||
: assert(mixins != null),
|
||||
super(supertype, mixins);
|
||||
|
||||
@override
|
||||
InterfaceType build(LibraryBuilder library) {
|
||||
int charOffset = -1; // TODO(ahe): Provide these.
|
||||
Uri fileUri = null; // TODO(ahe): Provide these.
|
||||
return unsupported("build", charOffset, fileUri);
|
||||
}
|
||||
|
||||
@override
|
||||
Supertype buildSupertype(
|
||||
LibraryBuilder library, int charOffset, Uri fileUri) {
|
||||
return unsupported("buildSupertype", charOffset, fileUri);
|
||||
}
|
||||
|
||||
@override
|
||||
Supertype buildMixedInType(
|
||||
LibraryBuilder library, int charOffset, Uri fileUri) {
|
||||
return unsupported("buildMixedInType", charOffset, fileUri);
|
||||
}
|
||||
|
||||
@override
|
||||
buildInvalidType(LocatedMessage message, {List<LocatedMessage> context}) {
|
||||
return unsupported("buildInvalidType", message.charOffset, message.uri);
|
||||
}
|
||||
|
||||
KernelMixinApplicationBuilder clone(List<TypeBuilder> newTypes) {
|
||||
int charOffset = -1; // TODO(dmitryas): Provide these.
|
||||
Uri fileUri = null; // TODO(dmitryas): Provide these.
|
||||
return unsupported("clone", charOffset, fileUri);
|
||||
}
|
||||
}
|
|
@ -1,130 +0,0 @@
|
|||
// Copyright (c) 2016, 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.kernel_interface_type_builder;
|
||||
|
||||
import 'package:kernel/ast.dart' show DartType, Supertype;
|
||||
|
||||
import '../fasta_codes.dart' show LocatedMessage;
|
||||
|
||||
import '../messages.dart'
|
||||
show noLength, templateSupertypeIsIllegal, templateSupertypeIsTypeVariable;
|
||||
|
||||
import '../severity.dart' show Severity;
|
||||
|
||||
import 'kernel_builder.dart'
|
||||
show
|
||||
KernelClassBuilder,
|
||||
KernelInvalidTypeBuilder,
|
||||
LibraryBuilder,
|
||||
NamedTypeBuilder,
|
||||
TypeBuilder,
|
||||
TypeDeclarationBuilder,
|
||||
TypeVariableBuilder,
|
||||
flattenName;
|
||||
|
||||
class KernelNamedTypeBuilder extends NamedTypeBuilder<TypeBuilder, DartType>
|
||||
implements TypeBuilder {
|
||||
KernelNamedTypeBuilder(Object name, List<TypeBuilder> arguments)
|
||||
: super(name, arguments);
|
||||
|
||||
KernelInvalidTypeBuilder buildInvalidType(LocatedMessage message,
|
||||
{List<LocatedMessage> context}) {
|
||||
// TODO(ahe): Consider if it makes sense to pass a QualifiedName to
|
||||
// KernelInvalidTypeBuilder?
|
||||
return new KernelInvalidTypeBuilder(
|
||||
flattenName(name, message.charOffset, message.uri), message,
|
||||
context: context);
|
||||
}
|
||||
|
||||
Supertype handleInvalidSupertype(
|
||||
LibraryBuilder library, int charOffset, Uri fileUri) {
|
||||
var template = declaration.isTypeVariable
|
||||
? templateSupertypeIsTypeVariable
|
||||
: templateSupertypeIsIllegal;
|
||||
library.addProblem(
|
||||
template.withArguments(flattenName(name, charOffset, fileUri)),
|
||||
charOffset,
|
||||
noLength,
|
||||
fileUri);
|
||||
return null;
|
||||
}
|
||||
|
||||
DartType build(LibraryBuilder library) {
|
||||
return declaration.buildType(library, arguments);
|
||||
}
|
||||
|
||||
Supertype buildSupertype(
|
||||
LibraryBuilder library, int charOffset, Uri fileUri) {
|
||||
TypeDeclarationBuilder declaration = this.declaration;
|
||||
if (declaration is KernelClassBuilder) {
|
||||
return declaration.buildSupertype(library, arguments);
|
||||
} else if (declaration is KernelInvalidTypeBuilder) {
|
||||
library.addProblem(
|
||||
declaration.message.messageObject,
|
||||
declaration.message.charOffset,
|
||||
declaration.message.length,
|
||||
declaration.message.uri,
|
||||
severity: Severity.error);
|
||||
return null;
|
||||
} else {
|
||||
return handleInvalidSupertype(library, charOffset, fileUri);
|
||||
}
|
||||
}
|
||||
|
||||
Supertype buildMixedInType(
|
||||
LibraryBuilder library, int charOffset, Uri fileUri) {
|
||||
TypeDeclarationBuilder declaration = this.declaration;
|
||||
if (declaration is KernelClassBuilder) {
|
||||
return declaration.buildMixedInType(library, arguments);
|
||||
} else if (declaration is KernelInvalidTypeBuilder) {
|
||||
library.addProblem(
|
||||
declaration.message.messageObject,
|
||||
declaration.message.charOffset,
|
||||
declaration.message.length,
|
||||
declaration.message.uri,
|
||||
severity: Severity.error);
|
||||
return null;
|
||||
} else {
|
||||
return handleInvalidSupertype(library, charOffset, fileUri);
|
||||
}
|
||||
}
|
||||
|
||||
TypeBuilder subst(Map<TypeVariableBuilder, TypeBuilder> substitution) {
|
||||
TypeBuilder result = substitution[declaration];
|
||||
if (result != null) {
|
||||
assert(declaration is TypeVariableBuilder);
|
||||
return result;
|
||||
} else if (arguments != null) {
|
||||
List<TypeBuilder> arguments;
|
||||
int i = 0;
|
||||
for (TypeBuilder argument in this.arguments) {
|
||||
TypeBuilder type = argument.subst(substitution);
|
||||
if (type != argument) {
|
||||
arguments ??= this.arguments.toList();
|
||||
arguments[i] = type;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (arguments != null) {
|
||||
return new KernelNamedTypeBuilder(name, arguments)..bind(declaration);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
KernelNamedTypeBuilder clone(List<TypeBuilder> newTypes) {
|
||||
List<TypeBuilder> clonedArguments;
|
||||
if (arguments != null) {
|
||||
clonedArguments = new List<TypeBuilder>(arguments.length);
|
||||
for (int i = 0; i < clonedArguments.length; i++) {
|
||||
clonedArguments[i] = arguments[i].clone(newTypes);
|
||||
}
|
||||
}
|
||||
KernelNamedTypeBuilder newType =
|
||||
new KernelNamedTypeBuilder(name, clonedArguments);
|
||||
newTypes.add(newType);
|
||||
return newType;
|
||||
}
|
||||
}
|
|
@ -92,7 +92,6 @@ import 'kernel_builder.dart'
|
|||
KernelClassBuilder,
|
||||
KernelFieldBuilder,
|
||||
KernelLibraryBuilder,
|
||||
KernelNamedTypeBuilder,
|
||||
KernelProcedureBuilder,
|
||||
LibraryBuilder,
|
||||
NamedTypeBuilder,
|
||||
|
@ -121,12 +120,11 @@ class KernelTarget extends TargetImplementation {
|
|||
|
||||
Component component;
|
||||
|
||||
final TypeBuilder dynamicType = new KernelNamedTypeBuilder("dynamic", null);
|
||||
final TypeBuilder dynamicType = new NamedTypeBuilder("dynamic", null);
|
||||
|
||||
final NamedTypeBuilder objectType =
|
||||
new KernelNamedTypeBuilder("Object", null);
|
||||
final NamedTypeBuilder objectType = new NamedTypeBuilder("Object", null);
|
||||
|
||||
final TypeBuilder bottomType = new KernelNamedTypeBuilder("Null", null);
|
||||
final TypeBuilder bottomType = new NamedTypeBuilder("Null", null);
|
||||
|
||||
bool get legacyMode => backendTarget.legacyMode;
|
||||
|
||||
|
@ -232,7 +230,7 @@ class KernelTarget extends TargetImplementation {
|
|||
cls.implementedTypes.clear();
|
||||
cls.supertype = null;
|
||||
cls.mixedInType = null;
|
||||
builder.supertype = new KernelNamedTypeBuilder("Object", null)
|
||||
builder.supertype = new NamedTypeBuilder("Object", null)
|
||||
..bind(objectClassBuilder);
|
||||
builder.interfaces = null;
|
||||
builder.mixedInType = null;
|
||||
|
@ -373,9 +371,8 @@ class KernelTarget extends TargetImplementation {
|
|||
Class cls = declaration.target;
|
||||
if (cls != objectClass) {
|
||||
cls.supertype ??= objectClass.asRawSupertype;
|
||||
declaration.supertype ??=
|
||||
new KernelNamedTypeBuilder("Object", null)
|
||||
..bind(objectClassBuilder);
|
||||
declaration.supertype ??= new NamedTypeBuilder("Object", null)
|
||||
..bind(objectClassBuilder);
|
||||
}
|
||||
if (declaration.isMixinApplication) {
|
||||
cls.mixedInType = declaration.mixedInType.buildMixedInType(
|
||||
|
|
|
@ -13,7 +13,7 @@ import 'kernel_builder.dart'
|
|||
show
|
||||
KernelClassBuilder,
|
||||
KernelLibraryBuilder,
|
||||
KernelNamedTypeBuilder,
|
||||
NamedTypeBuilder,
|
||||
LibraryBuilder,
|
||||
TypeBuilder,
|
||||
TypeVariableBuilder;
|
||||
|
@ -74,7 +74,7 @@ class KernelTypeVariableBuilder
|
|||
}
|
||||
|
||||
TypeBuilder asTypeBuilder() {
|
||||
return new KernelNamedTypeBuilder(name, null)..bind(this);
|
||||
return new NamedTypeBuilder(name, null)..bind(this);
|
||||
}
|
||||
|
||||
void finish(LibraryBuilder library, KernelClassBuilder object,
|
||||
|
|
|
@ -31,7 +31,6 @@ import 'kernel_builder.dart'
|
|||
FunctionTypeBuilder,
|
||||
KernelClassBuilder,
|
||||
KernelFormalParameterBuilder,
|
||||
KernelNamedTypeBuilder,
|
||||
KernelTypeAliasBuilder,
|
||||
KernelTypeVariableBuilder,
|
||||
NamedTypeBuilder,
|
||||
|
@ -60,7 +59,7 @@ export 'package:kernel/src/bounds_checks.dart' show Variance;
|
|||
// name matches that of the variable, it's interpreted as an occurrence of a
|
||||
// type variable.
|
||||
int computeVariance(KernelTypeVariableBuilder variable, TypeBuilder type) {
|
||||
if (type is KernelNamedTypeBuilder) {
|
||||
if (type is NamedTypeBuilder) {
|
||||
TypeDeclarationBuilder declaration = type.declaration;
|
||||
if (declaration == null || declaration is KernelTypeVariableBuilder) {
|
||||
if (type.name == variable.name) {
|
||||
|
@ -129,7 +128,7 @@ TypeBuilder substituteRange(
|
|||
Map<TypeVariableBuilder, TypeBuilder> upperSubstitution,
|
||||
Map<TypeVariableBuilder, TypeBuilder> lowerSubstitution,
|
||||
{bool isCovariant = true}) {
|
||||
if (type is KernelNamedTypeBuilder) {
|
||||
if (type is NamedTypeBuilder) {
|
||||
if (type.declaration is KernelTypeVariableBuilder) {
|
||||
if (isCovariant) {
|
||||
return upperSubstitution[type.declaration] ?? type;
|
||||
|
@ -150,8 +149,7 @@ TypeBuilder substituteRange(
|
|||
}
|
||||
}
|
||||
if (arguments != null) {
|
||||
return new KernelNamedTypeBuilder(type.name, arguments)
|
||||
..bind(type.declaration);
|
||||
return new NamedTypeBuilder(type.name, arguments)..bind(type.declaration);
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
@ -344,11 +342,11 @@ class TypeVariablesGraph implements Graph<int> {
|
|||
/// Finds all type builders for [variable] in [type].
|
||||
///
|
||||
/// Returns list of the found type builders.
|
||||
List<NamedTypeBuilder<TypeBuilder, Object>> findVariableUsesInType(
|
||||
List<NamedTypeBuilder> findVariableUsesInType(
|
||||
TypeVariableBuilder<TypeBuilder, Object> variable,
|
||||
TypeBuilder type,
|
||||
) {
|
||||
var uses = <NamedTypeBuilder<TypeBuilder, Object>>[];
|
||||
var uses = <NamedTypeBuilder>[];
|
||||
if (type is NamedTypeBuilder) {
|
||||
if (type.declaration == variable) {
|
||||
uses.add(type);
|
||||
|
@ -393,9 +391,9 @@ List<Object> findInboundReferences(
|
|||
List<TypeVariableBuilder<TypeBuilder, Object>> variables) {
|
||||
var variablesAndDependencies = <Object>[];
|
||||
for (TypeVariableBuilder<TypeBuilder, Object> dependent in variables) {
|
||||
var dependencies = <NamedTypeBuilder<TypeBuilder, Object>>[];
|
||||
var dependencies = <NamedTypeBuilder>[];
|
||||
for (TypeVariableBuilder<TypeBuilder, Object> dependence in variables) {
|
||||
List<NamedTypeBuilder<TypeBuilder, Object>> uses =
|
||||
List<NamedTypeBuilder> uses =
|
||||
findVariableUsesInType(dependence, dependent.bound);
|
||||
if (uses.length != 0) {
|
||||
dependencies.addAll(uses);
|
||||
|
@ -417,7 +415,7 @@ List<Object> findInboundReferences(
|
|||
/// [findInboundReferences].
|
||||
List<Object> findRawTypesWithInboundReferences(TypeBuilder type) {
|
||||
var typesAndDependencies = <Object>[];
|
||||
if (type is NamedTypeBuilder<TypeBuilder, Object>) {
|
||||
if (type is NamedTypeBuilder) {
|
||||
if (type.arguments == null) {
|
||||
TypeDeclarationBuilder<TypeBuilder, Object> declaration =
|
||||
type.declaration;
|
||||
|
@ -522,17 +520,14 @@ List<Object> getInboundReferenceIssues(
|
|||
List<Object> rawTypesAndMutualDependencies =
|
||||
findRawTypesWithInboundReferences(variable.bound);
|
||||
for (int i = 0; i < rawTypesAndMutualDependencies.length; i += 2) {
|
||||
NamedTypeBuilder<TypeBuilder, Object> type =
|
||||
rawTypesAndMutualDependencies[i];
|
||||
NamedTypeBuilder type = rawTypesAndMutualDependencies[i];
|
||||
List<Object> variablesAndDependencies =
|
||||
rawTypesAndMutualDependencies[i + 1];
|
||||
for (int j = 0; j < variablesAndDependencies.length; j += 2) {
|
||||
TypeVariableBuilder<TypeBuilder, Object> dependent =
|
||||
variablesAndDependencies[j];
|
||||
List<NamedTypeBuilder<TypeBuilder, Object>> dependencies =
|
||||
variablesAndDependencies[j + 1];
|
||||
for (NamedTypeBuilder<TypeBuilder, Object> dependency
|
||||
in dependencies) {
|
||||
List<NamedTypeBuilder> dependencies = variablesAndDependencies[j + 1];
|
||||
for (NamedTypeBuilder dependency in dependencies) {
|
||||
issues.add(variable);
|
||||
issues.add(templateBoundIssueViaRawTypeWithNonSimpleBounds
|
||||
.withArguments(type.declaration.name));
|
||||
|
@ -573,7 +568,7 @@ List<List<Object>> findRawTypePathsToDeclaration(
|
|||
[Set<TypeDeclarationBuilder<TypeBuilder, Object>> visited]) {
|
||||
visited ??= new Set<TypeDeclarationBuilder<TypeBuilder, Object>>.identity();
|
||||
var paths = <List<Object>>[];
|
||||
if (start is NamedTypeBuilder<TypeBuilder, Object>) {
|
||||
if (start is NamedTypeBuilder) {
|
||||
TypeDeclarationBuilder<TypeBuilder, Object> declaration = start.declaration;
|
||||
if (start.arguments == null) {
|
||||
if (start.declaration == end) {
|
||||
|
@ -722,7 +717,7 @@ List<Object> convertRawTypeCyclesIntoIssues(
|
|||
if (cycle.length == 2) {
|
||||
// Loop.
|
||||
TypeVariableBuilder<TypeBuilder, Object> variable = cycle[0];
|
||||
NamedTypeBuilder<TypeBuilder, Object> type = cycle[1];
|
||||
NamedTypeBuilder type = cycle[1];
|
||||
issues.add(variable);
|
||||
issues.add(templateBoundIssueViaLoopNonSimplicity
|
||||
.withArguments(type.declaration.name));
|
||||
|
@ -731,13 +726,13 @@ List<Object> convertRawTypeCyclesIntoIssues(
|
|||
var context = <LocatedMessage>[];
|
||||
for (int i = 0; i < cycle.length; i += 2) {
|
||||
TypeVariableBuilder<TypeBuilder, Object> variable = cycle[i];
|
||||
NamedTypeBuilder<TypeBuilder, Object> type = cycle[i + 1];
|
||||
NamedTypeBuilder type = cycle[i + 1];
|
||||
context.add(templateNonSimpleBoundViaReference
|
||||
.withArguments(type.declaration.name)
|
||||
.withLocation(
|
||||
variable.fileUri, variable.charOffset, variable.name.length));
|
||||
}
|
||||
NamedTypeBuilder<TypeBuilder, Object> firstEncounteredType = cycle[1];
|
||||
NamedTypeBuilder firstEncounteredType = cycle[1];
|
||||
|
||||
issues.add(declaration);
|
||||
issues.add(templateBoundIssueViaCycleNonSimplicity.withArguments(
|
||||
|
@ -796,7 +791,7 @@ List<Object> getNonSimplicityIssuesForDeclaration(
|
|||
"${declaration.fileUri}:${declaration.name}";
|
||||
String lexMinPathAndName = null;
|
||||
for (int i = 1; i < cycle.length; i += 2) {
|
||||
NamedTypeBuilder<TypeBuilder, Object> type = cycle[i];
|
||||
NamedTypeBuilder type = cycle[i];
|
||||
String pathAndName =
|
||||
"${type.declaration.fileUri}:${type.declaration.name}";
|
||||
if (lexMinPathAndName == null ||
|
||||
|
@ -849,8 +844,7 @@ void findGenericFunctionTypes(TypeBuilder type, {List<TypeBuilder> result}) {
|
|||
findGenericFunctionTypes(formal.type, result: result);
|
||||
}
|
||||
}
|
||||
} else if (type is NamedTypeBuilder<TypeBuilder, Object> &&
|
||||
type.arguments != null) {
|
||||
} else if (type is NamedTypeBuilder && type.arguments != null) {
|
||||
for (TypeBuilder argument in type.arguments) {
|
||||
findGenericFunctionTypes(argument, result: result);
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@ import '../kernel/kernel_builder.dart'
|
|||
FunctionTypeBuilder,
|
||||
KernelClassBuilder,
|
||||
KernelFormalParameterBuilder,
|
||||
KernelNamedTypeBuilder,
|
||||
NamedTypeBuilder,
|
||||
KernelTypeVariableBuilder,
|
||||
LibraryBuilder,
|
||||
TypeBuilder,
|
||||
|
@ -51,13 +51,13 @@ class TypeBuilderComputer implements DartTypeVisitor<TypeBuilder> {
|
|||
}
|
||||
|
||||
TypeBuilder visitDynamicType(DynamicType node) {
|
||||
return new KernelNamedTypeBuilder("dynamic", null)
|
||||
return new NamedTypeBuilder("dynamic", null)
|
||||
..bind(new DynamicTypeBuilder<TypeBuilder, DartType>(
|
||||
const DynamicType(), loader.coreLibrary, -1));
|
||||
}
|
||||
|
||||
TypeBuilder visitVoidType(VoidType node) {
|
||||
return new KernelNamedTypeBuilder("void", null)
|
||||
return new NamedTypeBuilder("void", null)
|
||||
..bind(new VoidTypeBuilder<TypeBuilder, VoidType>(
|
||||
const VoidType(), loader.coreLibrary, -1));
|
||||
}
|
||||
|
@ -77,7 +77,7 @@ class TypeBuilderComputer implements DartTypeVisitor<TypeBuilder> {
|
|||
arguments[i] = kernelArguments[i].accept(this);
|
||||
}
|
||||
}
|
||||
return new KernelNamedTypeBuilder(cls.name, arguments)..bind(cls);
|
||||
return new NamedTypeBuilder(cls.name, arguments)..bind(cls);
|
||||
}
|
||||
|
||||
@override
|
||||
|
@ -119,7 +119,7 @@ class TypeBuilderComputer implements DartTypeVisitor<TypeBuilder> {
|
|||
Library kernelLibrary = kernelClass.enclosingLibrary;
|
||||
LibraryBuilder<TypeBuilder, Library> library =
|
||||
loader.builders[kernelLibrary.importUri];
|
||||
return new KernelNamedTypeBuilder(parameter.name, null)
|
||||
return new NamedTypeBuilder(parameter.name, null)
|
||||
..bind(new KernelTypeVariableBuilder.fromKernel(parameter, library));
|
||||
}
|
||||
|
||||
|
|
|
@ -42,8 +42,8 @@ import '../ignored_parser_errors.dart' show isIgnoredParserError;
|
|||
import '../kernel/kernel_builder.dart'
|
||||
show
|
||||
KernelMetadataBuilder,
|
||||
KernelMixinApplicationBuilder,
|
||||
KernelNamedTypeBuilder,
|
||||
MixinApplicationBuilder,
|
||||
NamedTypeBuilder,
|
||||
TypeBuilder;
|
||||
|
||||
import '../modifier.dart'
|
||||
|
@ -491,7 +491,7 @@ class OutlineBuilder extends StackListener {
|
|||
void handleClassOrMixinImplements(
|
||||
Token implementsKeyword, int interfacesCount) {
|
||||
debugEvent("ClassOrMixinImplements");
|
||||
push(const FixedNullableList<KernelNamedTypeBuilder>()
|
||||
push(const FixedNullableList<NamedTypeBuilder>()
|
||||
.pop(stack, interfacesCount) ??
|
||||
NullValue.TypeBuilderList);
|
||||
}
|
||||
|
@ -520,8 +520,7 @@ class OutlineBuilder extends StackListener {
|
|||
@override
|
||||
void handleMixinOn(Token onKeyword, int typeCount) {
|
||||
debugEvent("handleMixinOn");
|
||||
push(const FixedNullableList<KernelNamedTypeBuilder>()
|
||||
.pop(stack, typeCount) ??
|
||||
push(const FixedNullableList<NamedTypeBuilder>().pop(stack, typeCount) ??
|
||||
new ParserRecovery(offsetForToken(onKeyword)));
|
||||
}
|
||||
|
||||
|
@ -590,7 +589,7 @@ class OutlineBuilder extends StackListener {
|
|||
if (supertypeConstraints.length == 1) {
|
||||
supertype = supertypeConstraints.first;
|
||||
} else {
|
||||
supertype = new KernelMixinApplicationBuilder(
|
||||
supertype = new MixinApplicationBuilder(
|
||||
supertypeConstraints.first, supertypeConstraints.skip(1).toList());
|
||||
}
|
||||
}
|
||||
|
@ -1050,7 +1049,7 @@ class OutlineBuilder extends StackListener {
|
|||
@override
|
||||
void endTypeList(int count) {
|
||||
debugEvent("TypeList");
|
||||
push(const FixedNullableList<KernelNamedTypeBuilder>().pop(stack, count) ??
|
||||
push(const FixedNullableList<NamedTypeBuilder>().pop(stack, count) ??
|
||||
new ParserRecovery(-1));
|
||||
}
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ import '../kernel/kernel_builder.dart'
|
|||
KernelFunctionBuilder,
|
||||
KernelInvalidTypeBuilder,
|
||||
KernelLibraryBuilder,
|
||||
KernelNamedTypeBuilder,
|
||||
NamedTypeBuilder,
|
||||
TypeBuilder,
|
||||
KernelTypeVariableBuilder,
|
||||
LibraryBuilder,
|
||||
|
@ -163,14 +163,13 @@ class SourceClassBuilder extends KernelClassBuilder
|
|||
fileUri);
|
||||
actualCls.supertype = null;
|
||||
}
|
||||
if (actualCls.supertype == null && supertype is! KernelNamedTypeBuilder) {
|
||||
if (actualCls.supertype == null && supertype is! NamedTypeBuilder) {
|
||||
supertype = null;
|
||||
}
|
||||
mixedInType = checkSupertype(mixedInType);
|
||||
actualCls.mixedInType =
|
||||
mixedInType?.buildMixedInType(library, charOffset, fileUri);
|
||||
if (actualCls.mixedInType == null &&
|
||||
mixedInType is! KernelNamedTypeBuilder) {
|
||||
if (actualCls.mixedInType == null && mixedInType is! NamedTypeBuilder) {
|
||||
mixedInType = null;
|
||||
}
|
||||
actualCls.isMixinDeclaration = isMixinDeclaration;
|
||||
|
@ -259,7 +258,7 @@ class SourceClassBuilder extends KernelClassBuilder
|
|||
}
|
||||
}
|
||||
if (message != null) {
|
||||
return new KernelNamedTypeBuilder(supertype.name, null)
|
||||
return new NamedTypeBuilder(supertype.name, null)
|
||||
..bind(new KernelInvalidTypeBuilder(supertype.name,
|
||||
message.withLocation(fileUri, charOffset, noLength)));
|
||||
}
|
||||
|
|
|
@ -657,7 +657,7 @@ abstract class SourceLibraryBuilder<T extends TypeBuilder, R>
|
|||
|
||||
/// Used to add implementation builder during the call to [build] above.
|
||||
/// Currently, only anonymous mixins are using implementation builders (see
|
||||
/// [KernelMixinApplicationBuilder]
|
||||
/// [MixinApplicationBuilder]
|
||||
/// (../kernel/kernel_mixin_application_builder.dart)).
|
||||
void addImplementationBuilder(
|
||||
String name, Declaration declaration, int charOffset) {
|
||||
|
|
|
@ -670,7 +670,7 @@ class SourceLoader extends Loader<Library> {
|
|||
bool isClassBuilder = false;
|
||||
if (mixedInType is NamedTypeBuilder) {
|
||||
var builder = mixedInType.declaration;
|
||||
if (builder is ClassBuilder) {
|
||||
if (builder is ClassBuilder<TypeBuilder, DartType>) {
|
||||
isClassBuilder = true;
|
||||
for (Declaration constructory in builder.constructors.local.values) {
|
||||
if (constructory.isConstructor && !constructory.isSynthetic) {
|
||||
|
|
Loading…
Reference in a new issue