Skip to content

Commit

Permalink
Revert "[analyzer][null-aware-elements] Add NullAwareElement AST node"
Browse files Browse the repository at this point in the history
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]>
  • Loading branch information
scheglov authored and Commit Queue committed Jul 19, 2024
1 parent 4098cd9 commit 838e4a2
Show file tree
Hide file tree
Showing 18 changed files with 5 additions and 346 deletions.
1 change: 0 additions & 1 deletion pkg/analyzer/lib/dart/ast/ast.dart
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,6 @@ export 'package:analyzer/src/dart/ast/ast.dart'
NodeList,
NormalFormalParameter,
NullAssertPattern,
NullAwareElement,
NullCheckPattern,
NullLiteral,
NullShortableExpression,
Expand Down
27 changes: 0 additions & 27 deletions pkg/analyzer/lib/dart/ast/visitor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -559,10 +559,6 @@ class GeneralizingAstVisitor<R> implements AstVisitor<R> {
@override
R? visitNullAssertPattern(NullAssertPattern node) => visitDartPattern(node);

@override
R? visitNullAwareElement(NullAwareElement node) =>
visitCollectionElement(node);

@override
R? visitNullCheckPattern(NullCheckPattern node) => visitDartPattern(node);

Expand Down Expand Up @@ -1475,12 +1471,6 @@ class RecursiveAstVisitor<R> implements AstVisitor<R> {
return null;
}

@override
R? visitNullAwareElement(NullAwareElement node) {
node.visitChildren(this);
return null;
}

@override
R? visitNullCheckPattern(NullCheckPattern node) {
node.visitChildren(this);
Expand Down Expand Up @@ -2219,9 +2209,6 @@ class SimpleAstVisitor<R> implements AstVisitor<R> {
@override
R? visitNullAssertPattern(NullAssertPattern node) => null;

@override
R? visitNullAwareElement(NullAwareElement node) => null;

@override
R? visitNullCheckPattern(NullCheckPattern node) => null;

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

@override
R? visitNullAwareElement(NullAwareElement node) => _throw(node);

@override
R? visitNullCheckPattern(NullCheckPattern node) => _throw(node);

Expand Down Expand Up @@ -3896,14 +3880,6 @@ class TimedAstVisitor<T> implements AstVisitor<T> {
return result;
}

@override
T? visitNullAwareElement(NullAwareElement node) {
stopwatch.start();
T? result = _baseVisitor.visitNullAwareElement(node);
stopwatch.stop();
return result;
}

@override
T? visitNullCheckPattern(NullCheckPattern node) {
stopwatch.start();
Expand Down Expand Up @@ -4796,9 +4772,6 @@ class UnifyingAstVisitor<R> implements AstVisitor<R> {
@override
R? visitNullAssertPattern(NullAssertPattern node) => visitNode(node);

@override
R? visitNullAwareElement(NullAwareElement node) => visitNode(node);

@override
R? visitNullCheckPattern(NullCheckPattern node) => visitNode(node);

Expand Down
84 changes: 2 additions & 82 deletions pkg/analyzer/lib/src/dart/ast/ast.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1442,8 +1442,6 @@ abstract class AstVisitor<R> {

R? visitNullAssertPattern(NullAssertPattern node);

R? visitNullAwareElement(NullAwareElement node);

R? visitNullCheckPattern(NullCheckPattern node);

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

/// The question prefix for the key that may present in null-aware map
/// entries.
Token? get keyQuestion;

/// The colon that separates the key from the value.
Token get separator;

/// The expression computing the value that is associated with the key.
Expression get value;

/// The question prefix for the value that may present in null-aware map
/// entries.
Token? get valueQuestion;
}

final class MapLiteralEntryImpl extends CollectionElementImpl
implements MapLiteralEntry {
@override
final Token? keyQuestion;

ExpressionImpl _key;

@override
final Token separator;

@override
final Token? valueQuestion;

ExpressionImpl _value;

/// Initializes a newly created map literal entry.
MapLiteralEntryImpl({
required this.keyQuestion,
required ExpressionImpl key,
required this.separator,
required this.valueQuestion,
required ExpressionImpl value,
}) : _key = key,
_value = value {
Expand All @@ -11319,7 +11301,7 @@ final class MapLiteralEntryImpl extends CollectionElementImpl
}

@override
Token get beginToken => keyQuestion ?? _key.beginToken;
Token get beginToken => _key.beginToken;

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

@override
ChildEntities get _childEntities => ChildEntities()
..addToken('keyQuestion', keyQuestion)
..addNode('key', key)
..addToken('separator', separator)
..addToken('valueQuestion', valueQuestion)
..addNode('value', value);

@override
Expand Down Expand Up @@ -12839,66 +12819,6 @@ final class NullAssertPatternImpl extends DartPatternImpl
}
}

/// A null-aware element in a list or set literal.
///
/// <nullAwareExpressionElement> ::= '?' <expression>
abstract final class NullAwareElement implements CollectionElement {
/// The question mark before the expression.
Token get question;

/// The expression computing the value that is associated with the element.
Expression get value;
}

final class NullAwareElementImpl extends CollectionElementImpl
implements NullAwareElement {
@override
final Token question;

ExpressionImpl _value;

/// Initializes a newly created null-aware element.
NullAwareElementImpl({
required this.question,
required ExpressionImpl value,
}) : _value = value {
_becomeParentOf(_value);
}

@override
Token get beginToken => question;

@override
Token get endToken => _value.endToken;

@override
ExpressionImpl get value => _value;

set value(ExpressionImpl expression) {
_value = _becomeParentOf(expression);
}

@override
ChildEntities get _childEntities => ChildEntities()
..addToken('question', question)
..addNode('value', value);

@override
E? accept<E>(AstVisitor<E> visitor) => visitor.visitNullAwareElement(this);

@override
void resolveElement(
ResolverVisitor resolver, CollectionLiteralContext? context) {
// resolver.visitNullAwareElement(this, context: context);
resolver.pushRewrite(null);
}

@override
void visitChildren(AstVisitor visitor) {
_value.accept(visitor);
}
}

/// A null-check pattern.
///
/// nullCheckPattern ::=
Expand Down
6 changes: 0 additions & 6 deletions pkg/analyzer/lib/src/dart/ast/to_source_visitor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -984,12 +984,6 @@ class ToSourceVisitor implements AstVisitor<void> {
sink.write(node.operator.lexeme);
}

@override
void visitNullAwareElement(NullAwareElement node) {
sink.write(node.question.lexeme);
_visitNode(node.value);
}

@override
void visitNullCheckPattern(NullCheckPattern node) {
_visitNode(node.pattern);
Expand Down
16 changes: 0 additions & 16 deletions pkg/analyzer/lib/src/dart/ast/utilities.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1114,13 +1114,6 @@ class AstComparator implements AstVisitor<bool> {
isEqualTokens(node.operator, other.operator);
}

@override
bool visitNullAwareElement(NullAwareElement node) {
NullAwareElement other = _other as NullAwareElement;
return isEqualTokens(node.question, other.question) &&
isEqualNodes(node.value, other.value);
}

@override
bool visitNullCheckPattern(NullCheckPattern node) {
var other = _other as NullCheckPattern;
Expand Down Expand Up @@ -3049,15 +3042,6 @@ class NodeReplacer extends ThrowingAstVisitor<bool> {
return visitNode(node);
}

@override
bool visitNullAwareElement(NullAwareElement node) {
if (identical(node.value, _oldNode)) {
(node as NullAwareElementImpl).value = _newNode as ExpressionImpl;
return true;
}
return visitNode(node);
}

@override
bool visitNullLiteral(NullLiteral node) => visitNode(node);

Expand Down
36 changes: 0 additions & 36 deletions pkg/analyzer/lib/src/dart/constant/evaluation.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1440,24 +1440,6 @@ class ConstantVisitor extends UnifyingAstVisitor<Constant> {
}
list.addAll(listValue);
}
case NullAwareElement():
var value = evaluateConstant(element.value);
switch (value) {
case InvalidConstant():
return value;
case DartObjectImpl():
if (value.isNull) {
continue;
}
var result = _buildListConstant(
list,
[element.value],
typeSystem,
listType,
elementType,
);
return result;
}
}
}

Expand Down Expand Up @@ -1548,11 +1530,6 @@ class ConstantVisitor extends UnifyingAstVisitor<Constant> {
}
map.addAll(mapValue);
}
case NullAwareElement():
// TODO(cstefantsova): Should it rather be its own code, for example,
// `CompileTimeErrorCode.NULL_AWARE_ELEMENT_IN_MAP`?
return InvalidConstant.forEntity(
element, CompileTimeErrorCode.EXPRESSION_IN_MAP);
}
}

Expand Down Expand Up @@ -1630,19 +1607,6 @@ class ConstantVisitor extends UnifyingAstVisitor<Constant> {
}
set.addAll(setValue);
}
case NullAwareElement():
var value = evaluateConstant(element.value);
switch (value) {
case InvalidConstant():
return value;
case DartObjectImpl():
if (value.isNull) {
continue;
}
var result =
_buildSetConstant(set, [element.value], typeSystem, setType);
return result;
}
}
}

Expand Down
14 changes: 2 additions & 12 deletions pkg/analyzer/lib/src/fasta/ast_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4829,24 +4829,21 @@ class AstBuilder extends StackListener {
assert(optional(':', colon));
debugEvent("LiteralMapEntry");

// TODO(cstefantsova): Handle null-aware map entries.
if (!enableNullAwareElements &&
(nullAwareKeyToken != null || nullAwareValueToken != null)) {
_reportFeatureNotEnabled(
feature: ExperimentalFeatures.null_aware_elements,
startToken: nullAwareKeyToken ?? nullAwareValueToken!,
);
nullAwareKeyToken = null;
nullAwareValueToken = null;
}

var value = pop() as ExpressionImpl;
var key = pop() as ExpressionImpl;
push(
MapLiteralEntryImpl(
keyQuestion: nullAwareKeyToken,
key: key,
separator: colon,
valueQuestion: nullAwareValueToken,
value: value,
),
);
Expand Down Expand Up @@ -5142,19 +5139,12 @@ class AstBuilder extends StackListener {
@override
void handleNullAwareElement(Token nullAwareElement) {
debugEvent('NullAwareElement');
// TODO(cstefantsova): Handle null-aware elements.
if (!enableNullAwareElements) {
_reportFeatureNotEnabled(
feature: ExperimentalFeatures.null_aware_elements,
startToken: nullAwareElement,
);
} else {
var expression = pop() as ExpressionImpl;
push(
NullAwareElementImpl(
question: nullAwareElement,
value: expression,
),
);
}
}

Expand Down
15 changes: 0 additions & 15 deletions pkg/analyzer/lib/src/generated/resolver.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3249,21 +3249,6 @@ class ResolverVisitor extends ThrowingAstVisitor<void>
return imposedType ?? typeProvider.dynamicType;
}

@override
void visitNullAwareElement(NullAwareElement node,
{CollectionLiteralContext? context}) {
inferenceLogWriter?.enterElement(node);

var elementType = context?.elementType;
if (elementType != null) {
elementType = typeSystem.makeNullable(elementType);
}

analyzeExpression(node.value, elementType ?? UnknownInferredType.instance);

inferenceLogWriter?.exitElement(node);
}

@override
void visitNullLiteral(NullLiteral node,
{DartType contextType = UnknownInferredType.instance}) {
Expand Down
Loading

0 comments on commit 838e4a2

Please sign in to comment.