Skip to content

Commit 7255c1d

Browse files
johnniwintherCommit Queue
authored andcommitted
[cfe] Add SourceDeclarationBuilderBaseMixin
This shares some of SourceDeclarationBuilderMixin with SourceClassBuilder Change-Id: I40e7cacff90dbd2e30743d66551271b768c64c2a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/438200 Commit-Queue: Johnni Winther <[email protected]> Reviewed-by: Chloe Stefantsova <[email protected]>
1 parent db6f707 commit 7255c1d

12 files changed

+125
-240
lines changed

pkg/front_end/lib/src/builder/builtin_type_declaration_builder.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ abstract class BuiltinTypeDeclarationBuilder extends TypeDeclarationBuilderImpl
2424
this.name, this.type, this.parent, this.fileOffset)
2525
: fileUri = parent.fileUri;
2626

27+
@override
28+
int get typeParametersCount => 0;
29+
2730
@override
2831
DartType buildAliasedType(
2932
LibraryBuilder library,

pkg/front_end/lib/src/builder/class_builder.dart

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ abstract class ClassBuilder implements DeclarationBuilder {
7979
}
8080

8181
abstract class ClassBuilderImpl extends DeclarationBuilderImpl
82+
with DeclarationBuilderMixin
8283
implements ClassBuilder {
8384
@override
8485
bool isNullClass = false;
@@ -98,33 +99,6 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
9899
!isNamedMixinApplication;
99100
}
100101

101-
@override
102-
LookupResult? findStaticBuilder(String name, int fileOffset, Uri fileUri,
103-
LibraryBuilder accessingLibrary) {
104-
if (accessingLibrary.nameOriginBuilder !=
105-
libraryBuilder.nameOriginBuilder &&
106-
name.startsWith("_")) {
107-
return null;
108-
}
109-
return nameSpace.lookupLocal(name,
110-
fileUri: fileUri, fileOffset: fileOffset, staticOnly: true);
111-
}
112-
113-
@override
114-
NamedBuilder? lookupLocalMember(String name,
115-
{bool setter = false, bool required = false}) {
116-
LookupResult? result = nameSpace.lookupLocalMember(name);
117-
NamedBuilder? builder = setter ? result?.setable : result?.getable;
118-
if (required && builder == null) {
119-
internalProblem(
120-
templateInternalProblemNotFoundIn.withArguments(
121-
name, fullNameForErrors),
122-
-1,
123-
null);
124-
}
125-
return builder;
126-
}
127-
128102
@override
129103
InterfaceType get thisType {
130104
return _thisType ??= new InterfaceType(cls, Nullability.nonNullable,

pkg/front_end/lib/src/builder/declaration_builders.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import 'package:kernel/src/unaliasing.dart';
1010
import '../base/lookup_result.dart';
1111
import '../base/messages.dart';
1212
import '../base/name_space.dart';
13-
import '../base/problems.dart' show internalProblem, unexpected, unhandled;
13+
import '../base/problems.dart' show unexpected, unhandled;
1414
import '../base/scope.dart';
1515
import '../base/uris.dart';
1616
import '../codes/cfe_codes.dart';

pkg/front_end/lib/src/builder/invalid_type_declaration_builder.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ class InvalidTypeDeclarationBuilder extends TypeDeclarationBuilderImpl
2020
InvalidTypeDeclarationBuilder(this.name, this.message,
2121
{this.context, this.suppressMessage = true});
2222

23+
@override
24+
int get typeParametersCount => 0;
25+
2326
@override
2427
Builder? get parent => null;
2528

pkg/front_end/lib/src/builder/type_declaration_builder.dart

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,6 @@ abstract class TypeDeclarationBuilderImpl extends NamedBuilderImpl
6969
@override
7070
String get fullNameForErrors => name;
7171

72-
@override
73-
int get typeParametersCount => 0;
74-
7572
@override
7673
NamedBuilder get getable => this;
7774

pkg/front_end/lib/src/builder/type_parameter_builder.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ sealed class TypeParameterBuilder extends TypeDeclarationBuilderImpl
5353
return sb.toString();
5454
}
5555

56+
@override
57+
int get typeParametersCount => 0;
58+
5659
Variance get variance;
5760

5861
void set variance(Variance value);

pkg/front_end/lib/src/kernel/kernel_helper.dart

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -327,23 +327,6 @@ class TypeDependency {
327327
}
328328
}
329329

330-
/// Removes [FileUriExpression] nodes for annotations whose file URI is
331-
/// [annotatableFileUri], the file URI of the [annotatable].
332-
///
333-
/// This is an optimization to avoid unnecessary [FileUriConstantExpression]
334-
/// nodes in the generated AST.
335-
void adjustAnnotationFileUri(Annotatable annotatable, Uri annotatableFileUri) {
336-
List<Expression> annotations = annotatable.annotations;
337-
for (int i = 0; i < annotations.length; i++) {
338-
Expression annotation = annotations[i];
339-
if (annotation is FileUriExpression &&
340-
annotation.fileUri == annotatableFileUri) {
341-
// Coverage-ignore-block(suite): Not run.
342-
annotations[i] = annotation.expression..parent = annotatable;
343-
}
344-
}
345-
}
346-
347330
// Coverage-ignore(suite): Not run.
348331
/// Copies properties, function parameters and body from the [augmentation]
349332
/// procedure to its [origin].
@@ -357,6 +340,4 @@ void finishProcedureAugmentation(Procedure origin, Procedure augmentation) {
357340
origin.isExternal = augmentation.isExternal;
358341
origin.function = augmentation.function;
359342
origin.function.parent = origin;
360-
361-
adjustAnnotationFileUri(origin, origin.fileUri);
362343
}

pkg/front_end/lib/src/source/source_builder_mixins.dart

Lines changed: 101 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -17,19 +17,117 @@ import '../builder/factory_builder.dart';
1717
import '../builder/library_builder.dart';
1818
import '../builder/type_builder.dart';
1919
import '../kernel/type_algorithms.dart';
20+
import 'source_class_builder.dart';
2021
import 'source_declaration_builder.dart';
2122
import 'source_library_builder.dart';
2223
import 'source_loader.dart';
2324
import 'source_member_builder.dart';
2425
import 'source_type_parameter_builder.dart';
2526

26-
mixin SourceDeclarationBuilderMixin
27+
mixin SourceDeclarationBuilderBaseMixin
2728
implements DeclarationBuilderMixin, SourceDeclarationBuilder {
2829
@override
29-
SourceLibraryBuilder get libraryBuilder;
30+
List<SourceNominalParameterBuilder>? get typeParameters;
3031

3132
@override
32-
List<SourceNominalParameterBuilder>? get typeParameters;
33+
int get typeParametersCount => typeParameters?.length ?? 0;
34+
35+
@override
36+
int computeDefaultTypes(ComputeDefaultTypeContext context) {
37+
bool hasErrors = context.reportNonSimplicityIssues(this, typeParameters);
38+
int count = context.computeDefaultTypesForVariables(typeParameters,
39+
inErrorRecovery: hasErrors);
40+
41+
Iterator<SourceMemberBuilder> constructorIterator =
42+
filteredConstructorsIterator<SourceMemberBuilder>(
43+
includeDuplicates: false);
44+
while (constructorIterator.moveNext()) {
45+
count += constructorIterator.current
46+
.computeDefaultTypes(context, inErrorRecovery: hasErrors);
47+
}
48+
49+
Iterator<SourceMemberBuilder> memberIterator =
50+
filteredMembersIterator(includeDuplicates: false);
51+
while (memberIterator.moveNext()) {
52+
count += memberIterator.current
53+
.computeDefaultTypes(context, inErrorRecovery: hasErrors);
54+
}
55+
return count;
56+
}
57+
58+
void checkTypesInOutline(TypeEnvironment typeEnvironment) {
59+
Iterator<SourceMemberBuilder> memberIterator =
60+
filteredMembersIterator(includeDuplicates: false);
61+
62+
SourceDeclarationBuilder enclosingDeclarationBuilder = this;
63+
SourceClassBuilder? enclosingClassBuilder =
64+
enclosingDeclarationBuilder is SourceClassBuilder
65+
? enclosingDeclarationBuilder
66+
: null;
67+
while (memberIterator.moveNext()) {
68+
SourceMemberBuilder builder = memberIterator.current;
69+
if (enclosingClassBuilder != null) {
70+
builder.checkVariance(enclosingClassBuilder, typeEnvironment);
71+
}
72+
builder.checkTypes(libraryBuilder, nameSpace, typeEnvironment);
73+
}
74+
75+
Iterator<SourceMemberBuilder> constructorIterator =
76+
filteredConstructorsIterator(includeDuplicates: false);
77+
while (constructorIterator.moveNext()) {
78+
constructorIterator.current
79+
.checkTypes(libraryBuilder, nameSpace, typeEnvironment);
80+
}
81+
}
82+
83+
@override
84+
List<DartType> buildAliasedTypeArguments(LibraryBuilder library,
85+
List<TypeBuilder>? arguments, ClassHierarchyBase? hierarchy) {
86+
if (arguments == null && typeParameters == null) {
87+
return <DartType>[];
88+
}
89+
90+
if (arguments == null && typeParameters != null) {
91+
List<DartType> result =
92+
new List<DartType>.generate(typeParameters!.length, (int i) {
93+
if (typeParameters![i].defaultType == null) {
94+
throw 'here';
95+
}
96+
return typeParameters![i].defaultType!.buildAliased(
97+
library, TypeUse.defaultTypeAsTypeArgument, hierarchy);
98+
}, growable: true);
99+
return result;
100+
}
101+
102+
if (arguments != null && arguments.length != typeParametersCount) {
103+
// Coverage-ignore-block(suite): Not run.
104+
assert(libraryBuilder.loader.assertProblemReportedElsewhere(
105+
"$runtimeType.buildAliasedTypeArguments: "
106+
"the numbers of type parameters and type arguments don't match.",
107+
expectedPhase: CompilationPhaseForProblemReporting.outline));
108+
return unhandled(
109+
templateTypeArgumentMismatch
110+
.withArguments(typeParametersCount)
111+
.problemMessage,
112+
"buildTypeArguments",
113+
-1,
114+
null);
115+
}
116+
117+
assert(arguments!.length == typeParametersCount);
118+
List<DartType> result =
119+
new List<DartType>.generate(arguments!.length, (int i) {
120+
return arguments[i]
121+
.buildAliased(library, TypeUse.typeArgument, hierarchy);
122+
}, growable: true);
123+
return result;
124+
}
125+
}
126+
127+
mixin SourceDeclarationBuilderMixin
128+
implements DeclarationBuilderMixin, SourceDeclarationBuilder {
129+
@override
130+
SourceLibraryBuilder get libraryBuilder;
33131

34132
@override
35133
Uri get fileUri;
@@ -117,45 +215,6 @@ mixin SourceDeclarationBuilderMixin
117215
return count;
118216
}
119217

120-
@override
121-
int computeDefaultTypes(ComputeDefaultTypeContext context) {
122-
bool hasErrors = context.reportNonSimplicityIssues(this, typeParameters);
123-
int count = context.computeDefaultTypesForVariables(typeParameters,
124-
inErrorRecovery: hasErrors);
125-
126-
Iterator<SourceMemberBuilder> constructorIterator =
127-
filteredConstructorsIterator<SourceMemberBuilder>(
128-
includeDuplicates: false);
129-
while (constructorIterator.moveNext()) {
130-
count += constructorIterator.current
131-
.computeDefaultTypes(context, inErrorRecovery: hasErrors);
132-
}
133-
134-
Iterator<SourceMemberBuilder> memberIterator =
135-
filteredMembersIterator(includeDuplicates: false);
136-
while (memberIterator.moveNext()) {
137-
count += memberIterator.current
138-
.computeDefaultTypes(context, inErrorRecovery: hasErrors);
139-
}
140-
return count;
141-
}
142-
143-
void checkTypesInOutline(TypeEnvironment typeEnvironment) {
144-
Iterator<SourceMemberBuilder> memberIterator =
145-
filteredMembersIterator(includeDuplicates: false);
146-
while (memberIterator.moveNext()) {
147-
memberIterator.current
148-
.checkTypes(libraryBuilder, nameSpace, typeEnvironment);
149-
}
150-
151-
Iterator<SourceMemberBuilder> constructorIterator =
152-
filteredConstructorsIterator(includeDuplicates: false);
153-
while (constructorIterator.moveNext()) {
154-
constructorIterator.current
155-
.checkTypes(libraryBuilder, nameSpace, typeEnvironment);
156-
}
157-
}
158-
159218
void _buildMember(SourceMemberBuilder memberBuilder, Member member,
160219
Member? tearOff, BuiltMemberKind memberKind,
161220
{required bool addMembersToLibrary}) {
@@ -202,50 +261,4 @@ mixin SourceDeclarationBuilderMixin
202261
BuiltMemberKind memberKind,
203262
Reference memberReference,
204263
Reference? tearOffReference);
205-
206-
@override
207-
List<DartType> buildAliasedTypeArguments(LibraryBuilder library,
208-
List<TypeBuilder>? arguments, ClassHierarchyBase? hierarchy) {
209-
if (arguments == null && typeParameters == null) {
210-
return <DartType>[];
211-
}
212-
213-
if (arguments == null && typeParameters != null) {
214-
List<DartType> result =
215-
new List<DartType>.generate(typeParameters!.length, (int i) {
216-
if (typeParameters![i].defaultType == null) {
217-
throw 'here';
218-
}
219-
return typeParameters![i].defaultType!.buildAliased(
220-
library, TypeUse.defaultTypeAsTypeArgument, hierarchy);
221-
}, growable: true);
222-
return result;
223-
}
224-
225-
if (arguments != null && arguments.length != typeParametersCount) {
226-
// Coverage-ignore-block(suite): Not run.
227-
assert(libraryBuilder.loader.assertProblemReportedElsewhere(
228-
"SourceDeclarationBuilderMixin.buildAliasedTypeArguments: "
229-
"the numbers of type parameters and type arguments don't match.",
230-
expectedPhase: CompilationPhaseForProblemReporting.outline));
231-
return unhandled(
232-
templateTypeArgumentMismatch
233-
.withArguments(typeParametersCount)
234-
.problemMessage,
235-
"buildTypeArguments",
236-
-1,
237-
null);
238-
}
239-
240-
assert(arguments!.length == typeParametersCount);
241-
List<DartType> result =
242-
new List<DartType>.generate(arguments!.length, (int i) {
243-
return arguments[i]
244-
.buildAliased(library, TypeUse.typeArgument, hierarchy);
245-
}, growable: true);
246-
return result;
247-
}
248-
249-
@override
250-
int get typeParametersCount => typeParameters?.length ?? 0;
251264
}

0 commit comments

Comments
 (0)