Skip to content

Commit d057a33

Browse files
scheglovCommit Queue
authored andcommitted
Fine. Support for constructor constantInitializers.
Change-Id: Ib166a4348365053d332287c0a0ca73197909dac4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/422025 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent 8891b07 commit d057a33

File tree

3 files changed

+616
-2
lines changed

3 files changed

+616
-2
lines changed

pkg/analyzer/lib/src/fine/manifest_ast.dart

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,10 @@ class ManifestNode {
136136
sink.writeUint30List(elementIndexList);
137137
}
138138

139+
static List<ManifestNode> readList(SummaryDataReader reader) {
140+
return reader.readTypedList(() => ManifestNode.read(reader));
141+
}
142+
139143
static ManifestNode? readOptional(SummaryDataReader reader) {
140144
return reader.readOptionalObject(() => ManifestNode.read(reader));
141145
}
@@ -164,6 +168,11 @@ class _ElementCollector extends ThrowingAstVisitor<void> {
164168
node.visitChildren(this);
165169
}
166170

171+
@override
172+
void visitAssertInitializer(AssertInitializer node) {
173+
node.visitChildren(this);
174+
}
175+
167176
@override
168177
void visitBinaryExpression(BinaryExpression node) {
169178
node.visitChildren(this);
@@ -173,6 +182,11 @@ class _ElementCollector extends ThrowingAstVisitor<void> {
173182
@override
174183
void visitBooleanLiteral(BooleanLiteral node) {}
175184

185+
@override
186+
void visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
187+
node.visitChildren(this);
188+
}
189+
176190
@override
177191
void visitConstructorName(ConstructorName node) {
178192
node.visitChildren(this);
@@ -264,6 +278,12 @@ class _ElementCollector extends ThrowingAstVisitor<void> {
264278
node.visitChildren(this);
265279
}
266280

281+
@override
282+
void visitRedirectingConstructorInvocation(
283+
RedirectingConstructorInvocation node) {
284+
node.visitChildren(this);
285+
}
286+
267287
@override
268288
void visitSetOrMapLiteral(SetOrMapLiteral node) {
269289
node.visitChildren(this);
@@ -292,6 +312,11 @@ class _ElementCollector extends ThrowingAstVisitor<void> {
292312
node.visitChildren(this);
293313
}
294314

315+
@override
316+
void visitSuperConstructorInvocation(SuperConstructorInvocation node) {
317+
node.visitChildren(this);
318+
}
319+
295320
@override
296321
void visitTypeArgumentList(TypeArgumentList node) {
297322
node.visitChildren(this);
@@ -310,6 +335,24 @@ class _ElementCollector extends ThrowingAstVisitor<void> {
310335
}
311336
}
312337

338+
extension ListOfManifestNodeExtension on List<ManifestNode> {
339+
bool match(MatchContext context, List<AstNode> nodes) {
340+
if (nodes.length != length) {
341+
return false;
342+
}
343+
for (var i = 0; i < length; i++) {
344+
if (!this[i].match(context, nodes[i])) {
345+
return false;
346+
}
347+
}
348+
return true;
349+
}
350+
351+
void writeList(BufferedSink sink) {
352+
sink.writeList(this, (x) => x.write(sink));
353+
}
354+
}
355+
313356
extension ManifestNodeOrNullExtension on ManifestNode? {
314357
bool match(MatchContext context, AstNode? node) {
315358
var self = this;

pkg/analyzer/lib/src/fine/manifest_item.dart

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,7 @@ class InterfaceItemConstructorItem
363363
final bool isConst;
364364
final bool isFactory;
365365
final ManifestFunctionType functionType;
366+
final List<ManifestNode> constantInitializers;
366367

367368
InterfaceItemConstructorItem({
368369
required super.id,
@@ -371,21 +372,24 @@ class InterfaceItemConstructorItem
371372
required this.isConst,
372373
required this.isFactory,
373374
required this.functionType,
375+
required this.constantInitializers,
374376
});
375377

376378
factory InterfaceItemConstructorItem.fromElement({
377379
required ManifestItemId id,
378380
required EncodeContext context,
379381
required ConstructorElementImpl2 element,
380382
}) {
381-
// TODO(scheglov): initializers
382383
return InterfaceItemConstructorItem(
383384
id: id,
384385
metadata: ManifestMetadata.encode(context, element.metadata2),
385386
isStatic: false,
386387
isConst: element.isConst,
387388
isFactory: element.isFactory,
388389
functionType: element.type.encode(context),
390+
constantInitializers: element.constantInitializers
391+
.map((initializer) => ManifestNode.encode(context, initializer))
392+
.toFixedList(),
389393
);
390394
}
391395

@@ -397,6 +401,7 @@ class InterfaceItemConstructorItem
397401
isConst: reader.readBool(),
398402
isFactory: reader.readBool(),
399403
functionType: ManifestFunctionType.read(reader),
404+
constantInitializers: ManifestNode.readList(reader),
400405
);
401406
}
402407

@@ -405,7 +410,8 @@ class InterfaceItemConstructorItem
405410
return super.match(context, element) &&
406411
isConst == element.isConst &&
407412
isFactory == element.isFactory &&
408-
functionType.match(context, element.type);
413+
functionType.match(context, element.type) &&
414+
constantInitializers.match(context, element.constantInitializers);
409415
}
410416

411417
@override
@@ -415,6 +421,7 @@ class InterfaceItemConstructorItem
415421
sink.writeBool(isConst);
416422
sink.writeBool(isFactory);
417423
functionType.writeNoTag(sink);
424+
constantInitializers.writeList(sink);
418425
}
419426
}
420427

0 commit comments

Comments
 (0)