Skip to content

Commit 838e4a2

Browse files
scheglovCommit Queue
authored and
Commit Queue
committed
Revert "[analyzer][null-aware-elements] Add NullAwareElement AST node"
This reverts commit 2bc2f89. Reason for revert: breaks Flutter HHH Original change's description: > [analyzer][null-aware-elements] Add NullAwareElement AST node > > Closes #56267 > > Part of #56266 > Part of #55949 > > Change-Id: I7c79d6be312f579e95291f2c2d21e3f996500b87 > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/376101 > Reviewed-by: Keerti Parthasarathy <[email protected]> > Reviewed-by: Konstantin Shcheglov <[email protected]> > Commit-Queue: Chloe Stefantsova <[email protected]> Change-Id: I31e35eec14585818baccb1d34b823f7f2b6bc4f4 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/376800 Auto-Submit: Konstantin Shcheglov <[email protected]> Reviewed-by: Siva Annamalai <[email protected]> Commit-Queue: Siva Annamalai <[email protected]> Bot-Commit: Rubber Stamper <[email protected]>
1 parent 4098cd9 commit 838e4a2

File tree

18 files changed

+5
-346
lines changed

18 files changed

+5
-346
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,6 @@ export 'package:analyzer/src/dart/ast/ast.dart'
180180
NodeList,
181181
NormalFormalParameter,
182182
NullAssertPattern,
183-
NullAwareElement,
184183
NullCheckPattern,
185184
NullLiteral,
186185
NullShortableExpression,

pkg/analyzer/lib/dart/ast/visitor.dart

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -559,10 +559,6 @@ class GeneralizingAstVisitor<R> implements AstVisitor<R> {
559559
@override
560560
R? visitNullAssertPattern(NullAssertPattern node) => visitDartPattern(node);
561561

562-
@override
563-
R? visitNullAwareElement(NullAwareElement node) =>
564-
visitCollectionElement(node);
565-
566562
@override
567563
R? visitNullCheckPattern(NullCheckPattern node) => visitDartPattern(node);
568564

@@ -1475,12 +1471,6 @@ class RecursiveAstVisitor<R> implements AstVisitor<R> {
14751471
return null;
14761472
}
14771473

1478-
@override
1479-
R? visitNullAwareElement(NullAwareElement node) {
1480-
node.visitChildren(this);
1481-
return null;
1482-
}
1483-
14841474
@override
14851475
R? visitNullCheckPattern(NullCheckPattern node) {
14861476
node.visitChildren(this);
@@ -2219,9 +2209,6 @@ class SimpleAstVisitor<R> implements AstVisitor<R> {
22192209
@override
22202210
R? visitNullAssertPattern(NullAssertPattern node) => null;
22212211

2222-
@override
2223-
R? visitNullAwareElement(NullAwareElement node) => null;
2224-
22252212
@override
22262213
R? visitNullCheckPattern(NullCheckPattern node) => null;
22272214

@@ -2783,9 +2770,6 @@ class ThrowingAstVisitor<R> implements AstVisitor<R> {
27832770
@override
27842771
R? visitNullAssertPattern(NullAssertPattern node) => _throw(node);
27852772

2786-
@override
2787-
R? visitNullAwareElement(NullAwareElement node) => _throw(node);
2788-
27892773
@override
27902774
R? visitNullCheckPattern(NullCheckPattern node) => _throw(node);
27912775

@@ -3896,14 +3880,6 @@ class TimedAstVisitor<T> implements AstVisitor<T> {
38963880
return result;
38973881
}
38983882

3899-
@override
3900-
T? visitNullAwareElement(NullAwareElement node) {
3901-
stopwatch.start();
3902-
T? result = _baseVisitor.visitNullAwareElement(node);
3903-
stopwatch.stop();
3904-
return result;
3905-
}
3906-
39073883
@override
39083884
T? visitNullCheckPattern(NullCheckPattern node) {
39093885
stopwatch.start();
@@ -4796,9 +4772,6 @@ class UnifyingAstVisitor<R> implements AstVisitor<R> {
47964772
@override
47974773
R? visitNullAssertPattern(NullAssertPattern node) => visitNode(node);
47984774

4799-
@override
4800-
R? visitNullAwareElement(NullAwareElement node) => visitNode(node);
4801-
48024775
@override
48034776
R? visitNullCheckPattern(NullCheckPattern node) => visitNode(node);
48044777

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

Lines changed: 2 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1442,8 +1442,6 @@ abstract class AstVisitor<R> {
14421442

14431443
R? visitNullAssertPattern(NullAssertPattern node);
14441444

1445-
R? visitNullAwareElement(NullAwareElement node);
1446-
14471445
R? visitNullCheckPattern(NullCheckPattern node);
14481446

14491447
R? visitNullLiteral(NullLiteral node);
@@ -11270,47 +11268,31 @@ final class LogicalOrPatternImpl extends DartPatternImpl
1127011268
/// A single key/value pair in a map literal.
1127111269
///
1127211270
/// mapLiteralEntry ::=
11273-
/// '?'? [Expression] ':' '?'? [Expression]
11271+
/// [Expression] ':' [Expression]
1127411272
abstract final class MapLiteralEntry implements CollectionElement {
1127511273
/// The expression computing the key with which the value is associated.
1127611274
Expression get key;
1127711275

11278-
/// The question prefix for the key that may present in null-aware map
11279-
/// entries.
11280-
Token? get keyQuestion;
11281-
1128211276
/// The colon that separates the key from the value.
1128311277
Token get separator;
1128411278

1128511279
/// The expression computing the value that is associated with the key.
1128611280
Expression get value;
11287-
11288-
/// The question prefix for the value that may present in null-aware map
11289-
/// entries.
11290-
Token? get valueQuestion;
1129111281
}
1129211282

1129311283
final class MapLiteralEntryImpl extends CollectionElementImpl
1129411284
implements MapLiteralEntry {
11295-
@override
11296-
final Token? keyQuestion;
11297-
1129811285
ExpressionImpl _key;
1129911286

1130011287
@override
1130111288
final Token separator;
1130211289

11303-
@override
11304-
final Token? valueQuestion;
11305-
1130611290
ExpressionImpl _value;
1130711291

1130811292
/// Initializes a newly created map literal entry.
1130911293
MapLiteralEntryImpl({
11310-
required this.keyQuestion,
1131111294
required ExpressionImpl key,
1131211295
required this.separator,
11313-
required this.valueQuestion,
1131411296
required ExpressionImpl value,
1131511297
}) : _key = key,
1131611298
_value = value {
@@ -11319,7 +11301,7 @@ final class MapLiteralEntryImpl extends CollectionElementImpl
1131911301
}
1132011302

1132111303
@override
11322-
Token get beginToken => keyQuestion ?? _key.beginToken;
11304+
Token get beginToken => _key.beginToken;
1132311305

1132411306
@override
1132511307
Token get endToken => _value.endToken;
@@ -11340,10 +11322,8 @@ final class MapLiteralEntryImpl extends CollectionElementImpl
1134011322

1134111323
@override
1134211324
ChildEntities get _childEntities => ChildEntities()
11343-
..addToken('keyQuestion', keyQuestion)
1134411325
..addNode('key', key)
1134511326
..addToken('separator', separator)
11346-
..addToken('valueQuestion', valueQuestion)
1134711327
..addNode('value', value);
1134811328

1134911329
@override
@@ -12839,66 +12819,6 @@ final class NullAssertPatternImpl extends DartPatternImpl
1283912819
}
1284012820
}
1284112821

12842-
/// A null-aware element in a list or set literal.
12843-
///
12844-
/// <nullAwareExpressionElement> ::= '?' <expression>
12845-
abstract final class NullAwareElement implements CollectionElement {
12846-
/// The question mark before the expression.
12847-
Token get question;
12848-
12849-
/// The expression computing the value that is associated with the element.
12850-
Expression get value;
12851-
}
12852-
12853-
final class NullAwareElementImpl extends CollectionElementImpl
12854-
implements NullAwareElement {
12855-
@override
12856-
final Token question;
12857-
12858-
ExpressionImpl _value;
12859-
12860-
/// Initializes a newly created null-aware element.
12861-
NullAwareElementImpl({
12862-
required this.question,
12863-
required ExpressionImpl value,
12864-
}) : _value = value {
12865-
_becomeParentOf(_value);
12866-
}
12867-
12868-
@override
12869-
Token get beginToken => question;
12870-
12871-
@override
12872-
Token get endToken => _value.endToken;
12873-
12874-
@override
12875-
ExpressionImpl get value => _value;
12876-
12877-
set value(ExpressionImpl expression) {
12878-
_value = _becomeParentOf(expression);
12879-
}
12880-
12881-
@override
12882-
ChildEntities get _childEntities => ChildEntities()
12883-
..addToken('question', question)
12884-
..addNode('value', value);
12885-
12886-
@override
12887-
E? accept<E>(AstVisitor<E> visitor) => visitor.visitNullAwareElement(this);
12888-
12889-
@override
12890-
void resolveElement(
12891-
ResolverVisitor resolver, CollectionLiteralContext? context) {
12892-
// resolver.visitNullAwareElement(this, context: context);
12893-
resolver.pushRewrite(null);
12894-
}
12895-
12896-
@override
12897-
void visitChildren(AstVisitor visitor) {
12898-
_value.accept(visitor);
12899-
}
12900-
}
12901-
1290212822
/// A null-check pattern.
1290312823
///
1290412824
/// nullCheckPattern ::=

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

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -984,12 +984,6 @@ class ToSourceVisitor implements AstVisitor<void> {
984984
sink.write(node.operator.lexeme);
985985
}
986986

987-
@override
988-
void visitNullAwareElement(NullAwareElement node) {
989-
sink.write(node.question.lexeme);
990-
_visitNode(node.value);
991-
}
992-
993987
@override
994988
void visitNullCheckPattern(NullCheckPattern node) {
995989
_visitNode(node.pattern);

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

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,13 +1114,6 @@ class AstComparator implements AstVisitor<bool> {
11141114
isEqualTokens(node.operator, other.operator);
11151115
}
11161116

1117-
@override
1118-
bool visitNullAwareElement(NullAwareElement node) {
1119-
NullAwareElement other = _other as NullAwareElement;
1120-
return isEqualTokens(node.question, other.question) &&
1121-
isEqualNodes(node.value, other.value);
1122-
}
1123-
11241117
@override
11251118
bool visitNullCheckPattern(NullCheckPattern node) {
11261119
var other = _other as NullCheckPattern;
@@ -3049,15 +3042,6 @@ class NodeReplacer extends ThrowingAstVisitor<bool> {
30493042
return visitNode(node);
30503043
}
30513044

3052-
@override
3053-
bool visitNullAwareElement(NullAwareElement node) {
3054-
if (identical(node.value, _oldNode)) {
3055-
(node as NullAwareElementImpl).value = _newNode as ExpressionImpl;
3056-
return true;
3057-
}
3058-
return visitNode(node);
3059-
}
3060-
30613045
@override
30623046
bool visitNullLiteral(NullLiteral node) => visitNode(node);
30633047

pkg/analyzer/lib/src/dart/constant/evaluation.dart

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1440,24 +1440,6 @@ class ConstantVisitor extends UnifyingAstVisitor<Constant> {
14401440
}
14411441
list.addAll(listValue);
14421442
}
1443-
case NullAwareElement():
1444-
var value = evaluateConstant(element.value);
1445-
switch (value) {
1446-
case InvalidConstant():
1447-
return value;
1448-
case DartObjectImpl():
1449-
if (value.isNull) {
1450-
continue;
1451-
}
1452-
var result = _buildListConstant(
1453-
list,
1454-
[element.value],
1455-
typeSystem,
1456-
listType,
1457-
elementType,
1458-
);
1459-
return result;
1460-
}
14611443
}
14621444
}
14631445

@@ -1548,11 +1530,6 @@ class ConstantVisitor extends UnifyingAstVisitor<Constant> {
15481530
}
15491531
map.addAll(mapValue);
15501532
}
1551-
case NullAwareElement():
1552-
// TODO(cstefantsova): Should it rather be its own code, for example,
1553-
// `CompileTimeErrorCode.NULL_AWARE_ELEMENT_IN_MAP`?
1554-
return InvalidConstant.forEntity(
1555-
element, CompileTimeErrorCode.EXPRESSION_IN_MAP);
15561533
}
15571534
}
15581535

@@ -1630,19 +1607,6 @@ class ConstantVisitor extends UnifyingAstVisitor<Constant> {
16301607
}
16311608
set.addAll(setValue);
16321609
}
1633-
case NullAwareElement():
1634-
var value = evaluateConstant(element.value);
1635-
switch (value) {
1636-
case InvalidConstant():
1637-
return value;
1638-
case DartObjectImpl():
1639-
if (value.isNull) {
1640-
continue;
1641-
}
1642-
var result =
1643-
_buildSetConstant(set, [element.value], typeSystem, setType);
1644-
return result;
1645-
}
16461610
}
16471611
}
16481612

pkg/analyzer/lib/src/fasta/ast_builder.dart

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4829,24 +4829,21 @@ class AstBuilder extends StackListener {
48294829
assert(optional(':', colon));
48304830
debugEvent("LiteralMapEntry");
48314831

4832+
// TODO(cstefantsova): Handle null-aware map entries.
48324833
if (!enableNullAwareElements &&
48334834
(nullAwareKeyToken != null || nullAwareValueToken != null)) {
48344835
_reportFeatureNotEnabled(
48354836
feature: ExperimentalFeatures.null_aware_elements,
48364837
startToken: nullAwareKeyToken ?? nullAwareValueToken!,
48374838
);
4838-
nullAwareKeyToken = null;
4839-
nullAwareValueToken = null;
48404839
}
48414840

48424841
var value = pop() as ExpressionImpl;
48434842
var key = pop() as ExpressionImpl;
48444843
push(
48454844
MapLiteralEntryImpl(
4846-
keyQuestion: nullAwareKeyToken,
48474845
key: key,
48484846
separator: colon,
4849-
valueQuestion: nullAwareValueToken,
48504847
value: value,
48514848
),
48524849
);
@@ -5142,19 +5139,12 @@ class AstBuilder extends StackListener {
51425139
@override
51435140
void handleNullAwareElement(Token nullAwareElement) {
51445141
debugEvent('NullAwareElement');
5142+
// TODO(cstefantsova): Handle null-aware elements.
51455143
if (!enableNullAwareElements) {
51465144
_reportFeatureNotEnabled(
51475145
feature: ExperimentalFeatures.null_aware_elements,
51485146
startToken: nullAwareElement,
51495147
);
5150-
} else {
5151-
var expression = pop() as ExpressionImpl;
5152-
push(
5153-
NullAwareElementImpl(
5154-
question: nullAwareElement,
5155-
value: expression,
5156-
),
5157-
);
51585148
}
51595149
}
51605150

pkg/analyzer/lib/src/generated/resolver.dart

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3249,21 +3249,6 @@ class ResolverVisitor extends ThrowingAstVisitor<void>
32493249
return imposedType ?? typeProvider.dynamicType;
32503250
}
32513251

3252-
@override
3253-
void visitNullAwareElement(NullAwareElement node,
3254-
{CollectionLiteralContext? context}) {
3255-
inferenceLogWriter?.enterElement(node);
3256-
3257-
var elementType = context?.elementType;
3258-
if (elementType != null) {
3259-
elementType = typeSystem.makeNullable(elementType);
3260-
}
3261-
3262-
analyzeExpression(node.value, elementType ?? UnknownInferredType.instance);
3263-
3264-
inferenceLogWriter?.exitElement(node);
3265-
}
3266-
32673252
@override
32683253
void visitNullLiteral(NullLiteral node,
32693254
{DartType contextType = UnknownInferredType.instance}) {

0 commit comments

Comments
 (0)