Skip to content

Commit 93504c7

Browse files
scheglovCommit Queue
authored andcommitted
CodeGen. Support for DoNotGenerate.
Change-Id: I899322ce78ea68de27b6dc6e1bcfeb92fb925657 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/428904 Commit-Queue: Konstantin Shcheglov <[email protected]> Reviewed-by: Paul Berry <[email protected]>
1 parent eb823d7 commit 93504c7

File tree

2 files changed

+147
-34
lines changed

2 files changed

+147
-34
lines changed

pkg/analyzer/lib/src/dart/ast/ast.dart

Lines changed: 81 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6596,6 +6596,14 @@ sealed class DirectiveImpl extends AnnotatedNodeImpl implements Directive {
65966596
DirectiveImpl({required super.comment, required super.metadata});
65976597
}
65986598

6599+
/// Works together with [GenerateNodeImpl], annotated constructors and methods
6600+
/// will not be generated.
6601+
class DoNotGenerate {
6602+
final String reason;
6603+
6604+
const DoNotGenerate({required this.reason});
6605+
}
6606+
65996607
/// A do statement.
66006608
///
66016609
/// doStatement ::=
@@ -10351,60 +10359,75 @@ abstract final class FormalParameterList implements AstNode {
1035110359
Token get rightParenthesis;
1035210360
}
1035310361

10362+
@GenerateNodeImpl(
10363+
childEntitiesOrder: [
10364+
GenerateNodeProperty('leftParenthesis'),
10365+
GenerateNodeProperty('parameters'),
10366+
GenerateNodeProperty('leftDelimiter'),
10367+
GenerateNodeProperty('rightDelimiter'),
10368+
GenerateNodeProperty('rightParenthesis'),
10369+
],
10370+
)
1035410371
final class FormalParameterListImpl extends AstNodeImpl
1035510372
implements FormalParameterList {
10373+
@generated
1035610374
@override
1035710375
final Token leftParenthesis;
1035810376

10359-
final NodeListImpl<FormalParameterImpl> _parameters = NodeListImpl._();
10377+
@generated
10378+
@override
10379+
final NodeListImpl<FormalParameterImpl> parameters = NodeListImpl._();
1036010380

10381+
@generated
1036110382
@override
1036210383
final Token? leftDelimiter;
1036310384

10385+
@generated
1036410386
@override
1036510387
final Token? rightDelimiter;
1036610388

10389+
@generated
1036710390
@override
1036810391
final Token rightParenthesis;
1036910392

10370-
/// Initializes a newly created parameter list.
10371-
///
10372-
/// The [leftDelimiter] and [rightDelimiter] can be `null` if there are no
10373-
/// optional or named parameters, but it must be the case that either both are
10374-
/// `null` or that both are non-`null`.
10393+
@generated
1037510394
FormalParameterListImpl({
1037610395
required this.leftParenthesis,
1037710396
required List<FormalParameterImpl> parameters,
1037810397
required this.leftDelimiter,
1037910398
required this.rightDelimiter,
1038010399
required this.rightParenthesis,
1038110400
}) {
10382-
_parameters._initialize(this, parameters);
10401+
this.parameters._initialize(this, parameters);
1038310402
}
1038410403

10404+
@generated
1038510405
@override
10386-
Token get beginToken => leftParenthesis;
10406+
Token get beginToken {
10407+
return leftParenthesis;
10408+
}
1038710409

10410+
@generated
1038810411
@override
10389-
Token get endToken => rightParenthesis;
10412+
Token get endToken {
10413+
return rightParenthesis;
10414+
}
1039010415

1039110416
@experimental
1039210417
@override
1039310418
List<FormalParameterFragmentImpl?> get parameterFragments {
10394-
return _parameters.map((node) => node.declaredFragment).toList();
10419+
return parameters.map((node) => node.declaredFragment).toList();
1039510420
}
1039610421

1039710422
@override
10398-
NodeListImpl<FormalParameterImpl> get parameters => _parameters;
10399-
10400-
@override
10423+
@DoNotGenerate(reason: 'Has special logic for delimiters')
1040110424
ChildEntities get _childEntities {
1040210425
// TODO(paulberry): include commas.
1040310426
var result = ChildEntities()..addToken('leftParenthesis', leftParenthesis);
1040410427
bool leftDelimiterNeeded = leftDelimiter != null;
10405-
int length = _parameters.length;
10428+
int length = parameters.length;
1040610429
for (int i = 0; i < length; i++) {
10407-
FormalParameter parameter = _parameters[i];
10430+
FormalParameter parameter = parameters[i];
1040810431
if (leftDelimiterNeeded && leftDelimiter!.offset < parameter.offset) {
1040910432
result.addToken('leftDelimiter', leftDelimiter);
1041010433
leftDelimiterNeeded = false;
@@ -10416,17 +10439,24 @@ final class FormalParameterListImpl extends AstNodeImpl
1041610439
..addToken('rightParenthesis', rightParenthesis);
1041710440
}
1041810441

10442+
@generated
1041910443
@override
1042010444
E? accept<E>(AstVisitor<E> visitor) => visitor.visitFormalParameterList(this);
1042110445

10446+
@generated
1042210447
@override
1042310448
void visitChildren(AstVisitor visitor) {
10424-
_parameters.accept(visitor);
10449+
parameters.accept(visitor);
1042510450
}
1042610451

10452+
@generated
1042710453
@override
1042810454
AstNodeImpl? _childContainingRange(int rangeOffset, int rangeEnd) {
10429-
return _parameters._elementContainingRange(rangeOffset, rangeEnd);
10455+
if (parameters._elementContainingRange(rangeOffset, rangeEnd)
10456+
case var result?) {
10457+
return result;
10458+
}
10459+
return null;
1043010460
}
1043110461
}
1043210462

@@ -22270,12 +22300,14 @@ abstract final class StringInterpolation implements SingleStringLiteral {
2227022300
InterpolationString get lastString;
2227122301
}
2227222302

22303+
@GenerateNodeImpl(childEntitiesOrder: [GenerateNodeProperty('elements')])
2227322304
final class StringInterpolationImpl extends SingleStringLiteralImpl
2227422305
implements StringInterpolation {
22275-
/// The elements that are composed to produce the resulting string.
22276-
final NodeListImpl<InterpolationElementImpl> _elements = NodeListImpl._();
22306+
@generated
22307+
@override
22308+
final NodeListImpl<InterpolationElementImpl> elements = NodeListImpl._();
2227722309

22278-
/// Initializes a newly created string interpolation expression.
22310+
@DoNotGenerate(reason: 'Has useful asserts')
2227922311
StringInterpolationImpl({required List<InterpolationElementImpl> elements}) {
2228022312
// TODO(scheglov): Replace asserts with appropriately typed parameters.
2228122313
assert(elements.length > 2, 'Expected at last three elements.');
@@ -22291,29 +22323,38 @@ final class StringInterpolationImpl extends SingleStringLiteralImpl
2229122323
elements.last is InterpolationStringImpl,
2229222324
'The last element must be a string.',
2229322325
);
22294-
_elements._initialize(this, elements);
22326+
this.elements._initialize(this, elements);
2229522327
}
2229622328

22329+
@generated
2229722330
@override
22298-
Token get beginToken => _elements.beginToken!;
22331+
Token get beginToken {
22332+
if (elements.beginToken case var result?) {
22333+
return result;
22334+
}
22335+
throw StateError('Expected at least one non-null');
22336+
}
2229922337

2230022338
@override
2230122339
int get contentsEnd {
22302-
var element = _elements.last as InterpolationString;
22340+
var element = elements.last as InterpolationString;
2230322341
return element.contentsEnd;
2230422342
}
2230522343

2230622344
@override
2230722345
int get contentsOffset {
22308-
var element = _elements.first as InterpolationString;
22346+
var element = elements.first as InterpolationString;
2230922347
return element.contentsOffset;
2231022348
}
2231122349

22350+
@generated
2231222351
@override
22313-
NodeListImpl<InterpolationElementImpl> get elements => _elements;
22314-
22315-
@override
22316-
Token get endToken => _elements.endToken!;
22352+
Token get endToken {
22353+
if (elements.endToken case var result?) {
22354+
return result;
22355+
}
22356+
throw StateError('Expected at least one non-null');
22357+
}
2231722358

2231822359
@override
2231922360
InterpolationStringImpl get firstString =>
@@ -22332,37 +22373,46 @@ final class StringInterpolationImpl extends SingleStringLiteralImpl
2233222373
InterpolationStringImpl get lastString =>
2233322374
elements.last as InterpolationStringImpl;
2233422375

22376+
@generated
2233522377
@override
2233622378
ChildEntities get _childEntities =>
2233722379
ChildEntities()..addNodeList('elements', elements);
2233822380

2233922381
StringLexemeHelper get _firstHelper {
22340-
var lastString = _elements.first as InterpolationString;
22382+
var lastString = elements.first as InterpolationString;
2234122383
String lexeme = lastString.contents.lexeme;
2234222384
return StringLexemeHelper(lexeme, true, false);
2234322385
}
2234422386

22387+
@generated
2234522388
@override
2234622389
E? accept<E>(AstVisitor<E> visitor) => visitor.visitStringInterpolation(this);
2234722390

22391+
@generated
2234822392
@override
2234922393
void resolveExpression(ResolverVisitor resolver, TypeImpl contextType) {
2235022394
resolver.visitStringInterpolation(this, contextType: contextType);
2235122395
}
2235222396

22397+
@generated
2235322398
@override
2235422399
void visitChildren(AstVisitor visitor) {
22355-
_elements.accept(visitor);
22400+
elements.accept(visitor);
2235622401
}
2235722402

2235822403
@override
2235922404
void _appendStringValue(StringBuffer buffer) {
2236022405
throw ArgumentError();
2236122406
}
2236222407

22408+
@generated
2236322409
@override
2236422410
AstNodeImpl? _childContainingRange(int rangeOffset, int rangeEnd) {
22365-
return _elements._elementContainingRange(rangeOffset, rangeEnd);
22411+
if (elements._elementContainingRange(rangeOffset, rangeEnd)
22412+
case var result?) {
22413+
return result;
22414+
}
22415+
return null;
2236622416
}
2236722417
}
2236822418

0 commit comments

Comments
 (0)