Skip to content

Commit ed38b6d

Browse files
johnniwinthercommit-bot@chromium.org
authored andcommitted
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 <[email protected]> Reviewed-by: Dan Rubel <[email protected]>
1 parent 0177076 commit ed38b6d

19 files changed

+250
-317
lines changed

pkg/front_end/lib/src/fasta/builder/mixin_application_builder.dart

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,22 @@
44

55
library fasta.mixin_application_builder;
66

7-
import 'builder.dart' show TypeBuilder, TypeVariableBuilder;
7+
import 'builder.dart' show LibraryBuilder, TypeBuilder, TypeVariableBuilder;
88

9-
abstract class MixinApplicationBuilder<T extends TypeBuilder>
10-
extends TypeBuilder {
11-
final T supertype;
12-
final List<T> mixins;
9+
import 'package:kernel/ast.dart' show InterfaceType, Supertype;
1310

14-
MixinApplicationBuilder(this.supertype, this.mixins);
11+
import '../fasta_codes.dart' show LocatedMessage;
12+
13+
import '../problems.dart' show unsupported;
14+
15+
class MixinApplicationBuilder extends TypeBuilder {
16+
final TypeBuilder supertype;
17+
final List<TypeBuilder> mixins;
18+
Supertype builtType;
19+
20+
List<TypeVariableBuilder> typeVariables;
1521

16-
void set typeVariables(List<TypeVariableBuilder> variables);
22+
MixinApplicationBuilder(this.supertype, this.mixins);
1723

1824
String get name => null;
1925

@@ -23,11 +29,41 @@ abstract class MixinApplicationBuilder<T extends TypeBuilder>
2329
buffer.write(supertype);
2430
buffer.write(" with ");
2531
bool first = true;
26-
for (T t in mixins) {
32+
for (TypeBuilder t in mixins) {
2733
if (!first) buffer.write(", ");
2834
first = false;
2935
t.printOn(buffer);
3036
}
3137
return buffer;
3238
}
39+
40+
@override
41+
InterfaceType build(LibraryBuilder library) {
42+
int charOffset = -1; // TODO(ahe): Provide these.
43+
Uri fileUri = null; // TODO(ahe): Provide these.
44+
return unsupported("build", charOffset, fileUri);
45+
}
46+
47+
@override
48+
Supertype buildSupertype(
49+
LibraryBuilder library, int charOffset, Uri fileUri) {
50+
return unsupported("buildSupertype", charOffset, fileUri);
51+
}
52+
53+
@override
54+
Supertype buildMixedInType(
55+
LibraryBuilder library, int charOffset, Uri fileUri) {
56+
return unsupported("buildMixedInType", charOffset, fileUri);
57+
}
58+
59+
@override
60+
buildInvalidType(LocatedMessage message, {List<LocatedMessage> context}) {
61+
return unsupported("buildInvalidType", message.charOffset, message.uri);
62+
}
63+
64+
MixinApplicationBuilder clone(List<TypeBuilder> newTypes) {
65+
int charOffset = -1; // TODO(dmitryas): Provide these.
66+
Uri fileUri = null; // TODO(dmitryas): Provide these.
67+
return unsupported("clone", charOffset, fileUri);
68+
}
3369
}

pkg/front_end/lib/src/fasta/builder/named_type_builder.dart

Lines changed: 119 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
library fasta.named_type_builder;
66

7+
import 'package:kernel/ast.dart' show DartType, Supertype;
8+
79
import '../fasta_codes.dart'
810
show
911
Message,
@@ -17,13 +19,17 @@ import '../fasta_codes.dart'
1719
templateTypeArgumentsOnTypeVariable,
1820
templateTypeNotFound;
1921

22+
import '../messages.dart'
23+
show noLength, templateSupertypeIsIllegal, templateSupertypeIsTypeVariable;
24+
2025
import '../problems.dart' show unhandled;
2126

27+
import '../severity.dart' show Severity;
28+
2229
import 'builder.dart'
2330
show
2431
Declaration,
2532
Identifier,
26-
InvalidTypeBuilder,
2733
LibraryBuilder,
2834
PrefixBuilder,
2935
QualifiedName,
@@ -33,20 +39,26 @@ import 'builder.dart'
3339
TypeVariableBuilder,
3440
flattenName;
3541

36-
abstract class NamedTypeBuilder<T extends TypeBuilder, R> extends TypeBuilder {
42+
import '../kernel/kernel_builder.dart'
43+
show
44+
KernelClassBuilder,
45+
KernelInvalidTypeBuilder,
46+
LibraryBuilder,
47+
TypeBuilder,
48+
TypeDeclarationBuilder,
49+
TypeVariableBuilder,
50+
flattenName;
51+
52+
class NamedTypeBuilder extends TypeBuilder {
3753
final Object name;
3854

39-
List<T> arguments;
55+
List<TypeBuilder> arguments;
4056

4157
@override
42-
TypeDeclarationBuilder<T, R> declaration;
58+
TypeDeclarationBuilder<TypeBuilder, DartType> declaration;
4359

4460
NamedTypeBuilder(this.name, this.arguments);
4561

46-
@override
47-
InvalidTypeBuilder<T, R> buildInvalidType(LocatedMessage message,
48-
{List<LocatedMessage> context});
49-
5062
@override
5163
void bind(TypeDeclarationBuilder declaration) {
5264
this.declaration = declaration?.origin;
@@ -157,12 +169,110 @@ abstract class NamedTypeBuilder<T extends TypeBuilder, R> extends TypeBuilder {
157169
if (arguments?.isEmpty ?? true) return buffer;
158170
buffer.write("<");
159171
bool first = true;
160-
for (T t in arguments) {
172+
for (TypeBuilder t in arguments) {
161173
if (!first) buffer.write(", ");
162174
first = false;
163175
t.printOn(buffer);
164176
}
165177
buffer.write(">");
166178
return buffer;
167179
}
180+
181+
KernelInvalidTypeBuilder buildInvalidType(LocatedMessage message,
182+
{List<LocatedMessage> context}) {
183+
// TODO(ahe): Consider if it makes sense to pass a QualifiedName to
184+
// KernelInvalidTypeBuilder?
185+
return new KernelInvalidTypeBuilder(
186+
flattenName(name, message.charOffset, message.uri), message,
187+
context: context);
188+
}
189+
190+
Supertype handleInvalidSupertype(
191+
LibraryBuilder library, int charOffset, Uri fileUri) {
192+
var template = declaration.isTypeVariable
193+
? templateSupertypeIsTypeVariable
194+
: templateSupertypeIsIllegal;
195+
library.addProblem(
196+
template.withArguments(flattenName(name, charOffset, fileUri)),
197+
charOffset,
198+
noLength,
199+
fileUri);
200+
return null;
201+
}
202+
203+
DartType build(LibraryBuilder library) {
204+
return declaration.buildType(library, arguments);
205+
}
206+
207+
Supertype buildSupertype(
208+
LibraryBuilder library, int charOffset, Uri fileUri) {
209+
TypeDeclarationBuilder declaration = this.declaration;
210+
if (declaration is KernelClassBuilder) {
211+
return declaration.buildSupertype(library, arguments);
212+
} else if (declaration is KernelInvalidTypeBuilder) {
213+
library.addProblem(
214+
declaration.message.messageObject,
215+
declaration.message.charOffset,
216+
declaration.message.length,
217+
declaration.message.uri,
218+
severity: Severity.error);
219+
return null;
220+
} else {
221+
return handleInvalidSupertype(library, charOffset, fileUri);
222+
}
223+
}
224+
225+
Supertype buildMixedInType(
226+
LibraryBuilder library, int charOffset, Uri fileUri) {
227+
TypeDeclarationBuilder declaration = this.declaration;
228+
if (declaration is KernelClassBuilder) {
229+
return declaration.buildMixedInType(library, arguments);
230+
} else if (declaration is KernelInvalidTypeBuilder) {
231+
library.addProblem(
232+
declaration.message.messageObject,
233+
declaration.message.charOffset,
234+
declaration.message.length,
235+
declaration.message.uri,
236+
severity: Severity.error);
237+
return null;
238+
} else {
239+
return handleInvalidSupertype(library, charOffset, fileUri);
240+
}
241+
}
242+
243+
TypeBuilder subst(Map<TypeVariableBuilder, TypeBuilder> substitution) {
244+
TypeBuilder result = substitution[declaration];
245+
if (result != null) {
246+
assert(declaration is TypeVariableBuilder);
247+
return result;
248+
} else if (arguments != null) {
249+
List<TypeBuilder> arguments;
250+
int i = 0;
251+
for (TypeBuilder argument in this.arguments) {
252+
TypeBuilder type = argument.subst(substitution);
253+
if (type != argument) {
254+
arguments ??= this.arguments.toList();
255+
arguments[i] = type;
256+
}
257+
i++;
258+
}
259+
if (arguments != null) {
260+
return new NamedTypeBuilder(name, arguments)..bind(declaration);
261+
}
262+
}
263+
return this;
264+
}
265+
266+
NamedTypeBuilder clone(List<TypeBuilder> newTypes) {
267+
List<TypeBuilder> clonedArguments;
268+
if (arguments != null) {
269+
clonedArguments = new List<TypeBuilder>(arguments.length);
270+
for (int i = 0; i < clonedArguments.length; i++) {
271+
clonedArguments[i] = arguments[i].clone(newTypes);
272+
}
273+
}
274+
NamedTypeBuilder newType = new NamedTypeBuilder(name, clonedArguments);
275+
newTypes.add(newType);
276+
return newType;
277+
}
168278
}

pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1745,7 +1745,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
17451745
// This way of computing the superclass is slower than using the kernel
17461746
// objects directly.
17471747
Object supertype = builder.supertype;
1748-
if (supertype is NamedTypeBuilder<TypeBuilder, Object>) {
1748+
if (supertype is NamedTypeBuilder) {
17491749
Object builder = supertype.declaration;
17501750
if (builder is ClassBuilder<TypeBuilder, Object>) return builder;
17511751
}
@@ -2793,7 +2793,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
27932793
library.addProblem(
27942794
message, offset, lengthOfSpan(beginToken, suffix), uri);
27952795
push(new UnresolvedType<TypeBuilder>(
2796-
new KernelNamedTypeBuilder(name, null)
2796+
new NamedTypeBuilder(name, null)
27972797
..bind(new KernelInvalidTypeBuilder(
27982798
name,
27992799
message.withLocation(
@@ -2813,7 +2813,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
28132813
// TODO(ahe): Arguments could be passed here.
28142814
library.addProblem(
28152815
name.message, name.charOffset, name.name.length, name.fileUri);
2816-
result = new KernelNamedTypeBuilder(name.name, null)
2816+
result = new NamedTypeBuilder(name.name, null)
28172817
..bind(new KernelInvalidTypeBuilder(
28182818
name.name,
28192819
name.message.withLocation(
@@ -2866,7 +2866,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
28662866
debugEvent("VoidKeyword");
28672867
int offset = offsetForToken(token);
28682868
push(new UnresolvedType<TypeBuilder>(
2869-
new KernelNamedTypeBuilder("void", null)
2869+
new NamedTypeBuilder("void", null)
28702870
..bind(new VoidTypeBuilder<TypeBuilder, VoidType>(
28712871
const VoidType(), library, offset)),
28722872
offset,
@@ -5207,8 +5207,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
52075207
UnresolvedType<TypeBuilder> validateTypeUse(
52085208
UnresolvedType<TypeBuilder> unresolved, bool nonInstanceAccessIsError) {
52095209
TypeBuilder builder = unresolved.builder;
5210-
if (builder is KernelNamedTypeBuilder &&
5211-
builder.declaration.isTypeVariable) {
5210+
if (builder is NamedTypeBuilder && builder.declaration.isTypeVariable) {
52125211
TypeParameter typeParameter = builder.declaration.target;
52135212
LocatedMessage message;
52145213
if (!isInstanceContext && typeParameter.parent is Class) {
@@ -5226,7 +5225,7 @@ class BodyBuilder extends ScopeListener<JumpTarget>
52265225
}
52275226
addProblem(message.messageObject, message.charOffset, message.length);
52285227
return new UnresolvedType<TypeBuilder>(
5229-
new KernelNamedTypeBuilder(typeParameter.name, null)
5228+
new NamedTypeBuilder(typeParameter.name, null)
52305229
..bind(new KernelInvalidTypeBuilder(typeParameter.name, message)),
52315230
unresolved.charOffset,
52325231
unresolved.fileUri);

pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ import 'kernel_builder.dart'
8181
KernelClassBuilder,
8282
KernelFieldBuilder,
8383
KernelLibraryBuilder,
84-
KernelNamedTypeBuilder,
84+
NamedTypeBuilder,
8585
KernelProcedureBuilder,
8686
KernelTypeVariableBuilder,
8787
LibraryBuilder,
@@ -247,8 +247,7 @@ class ClassHierarchyBuilder {
247247
TypeBuilder asSupertypeOf(Class cls, Class supertype) {
248248
ClassHierarchyNode clsNode = getNodeFromKernelClass(cls);
249249
if (cls == supertype) {
250-
return new KernelNamedTypeBuilder(clsNode.cls.name, null)
251-
..bind(clsNode.cls);
250+
return new NamedTypeBuilder(clsNode.cls.name, null)..bind(clsNode.cls);
252251
}
253252
ClassHierarchyNode supertypeNode = getNodeFromKernelClass(supertype);
254253
List<TypeBuilder> supertypes = clsNode.superclasses;
@@ -283,7 +282,7 @@ class ClassHierarchyBuilder {
283282
superclass.typeParameters.length, nullKernelClass.rawType));
284283
}
285284
}
286-
KernelNamedTypeBuilder supertype = asSupertypeOf(kernelClass, superclass);
285+
NamedTypeBuilder supertype = asSupertypeOf(kernelClass, superclass);
287286
if (supertype == null) return null;
288287
if (supertype.arguments == null && superclass.typeParameters.isEmpty) {
289288
return superclass.rawType;
@@ -1325,7 +1324,7 @@ class ClassHierarchyNodeBuilder {
13251324
}
13261325

13271326
TypeBuilder recordSupertype(TypeBuilder supertype) {
1328-
if (supertype is KernelNamedTypeBuilder) {
1327+
if (supertype is NamedTypeBuilder) {
13291328
debug?.log(
13301329
"In ${this.cls.fullNameForErrors} recordSupertype(${supertype.fullNameForErrors})");
13311330
Declaration declaration = supertype.declaration;
@@ -1360,7 +1359,7 @@ class ClassHierarchyNodeBuilder {
13601359
}
13611360

13621361
List<TypeBuilder> substSupertypes(
1363-
KernelNamedTypeBuilder supertype, List<TypeBuilder> supertypes) {
1362+
NamedTypeBuilder supertype, List<TypeBuilder> supertypes) {
13641363
Declaration declaration = supertype.declaration;
13651364
if (declaration is! KernelClassBuilder) return supertypes;
13661365
KernelClassBuilder cls = declaration;
@@ -1639,7 +1638,7 @@ class ClassHierarchyNodeBuilder {
16391638
inferredArguments[i] =
16401639
hierarchy.loader.computeTypeBuilder(typeArguments[i]);
16411640
}
1642-
KernelNamedTypeBuilder mixedInType = cls.mixedInType;
1641+
NamedTypeBuilder mixedInType = cls.mixedInType;
16431642
mixedInType.arguments = inferredArguments;
16441643
}
16451644

0 commit comments

Comments
 (0)