Split VariablePattern into AssignedVariablePattern and DeclaredVariablePattern.

Change-Id: I19ef3be7edb273eccf5f1afa61985ab24e584f1f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/274082
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2022-12-07 20:55:17 +00:00 committed by Commit Queue
parent d9ea7207e8
commit acf7a95410
31 changed files with 752 additions and 778 deletions

View file

@ -218,6 +218,23 @@ abstract class AssertStatement implements Assertion, Statement {
Token get semicolon;
}
/// A variable pattern in [PatternAssignment].
///
/// variablePattern ::= identifier
///
/// Clients may not extend, implement or mix-in this class.
@experimental
abstract class AssignedVariablePattern implements DartPattern {
/// Return the element referenced by this pattern, or `null` if either
/// [name] does not resolve to an element, or the AST structure has not
/// been resolved. In valid code this will be either [LocalVariableElement]
/// or [ParameterElement].
Element? get element;
/// The name of the variable being referenced.
Token get name;
}
/// An assignment expression.
///
/// assignmentExpression ::=
@ -363,6 +380,8 @@ abstract class AstVisitor<R> {
R? visitAssertStatement(AssertStatement assertStatement);
R? visitAssignedVariablePattern(AssignedVariablePattern node);
R? visitAssignmentExpression(AssignmentExpression node);
R? visitAugmentationImportDirective(AugmentationImportDirective node);
@ -421,6 +440,8 @@ abstract class AstVisitor<R> {
R? visitDeclaredIdentifier(DeclaredIdentifier node);
R? visitDeclaredVariablePattern(DeclaredVariablePattern node);
R? visitDefaultFormalParameter(DefaultFormalParameter node);
R? visitDoStatement(DoStatement node);
@ -668,8 +689,6 @@ abstract class AstVisitor<R> {
R? visitVariableDeclarationStatement(VariableDeclarationStatement node);
R? visitVariablePattern(VariablePattern node);
R? visitWhenClause(WhenClause node);
R? visitWhileStatement(WhileStatement node);
@ -1645,7 +1664,9 @@ abstract class ContinueStatement implements Statement {
/// A pattern.
///
/// pattern ::=
/// [BinaryPattern]
/// [AssignedVariablePattern]
/// | [BinaryPattern]
/// | [DeclaredVariablePattern]
/// | [CastPattern]
/// | [ConstantPattern]
/// | [ListPattern]
@ -1655,7 +1676,6 @@ abstract class ContinueStatement implements Statement {
/// | [PostfixPattern]
/// | [RecordPattern]
/// | [RelationalPattern]
/// | [VariablePattern]
///
/// Clients may not extend, implement or mix-in this class.
@experimental
@ -1725,6 +1745,32 @@ abstract class DeclaredIdentifier implements Declaration {
TypeAnnotation? get type;
}
/// A variable pattern that declares a variable.
///
/// variablePattern ::=
/// ( 'var' | 'final' | 'final'? [TypeAnnotation])? [Identifier]
///
/// Clients may not extend, implement or mix-in this class.
@experimental
abstract class DeclaredVariablePattern implements DartPattern {
/// Return the element associated with this declaration, or `null` if either
/// the variable name is `_` (in which case no variable is defined) or the AST
/// structure has not been resolved.
VariablePatternElement? get declaredElement;
/// The 'var' or 'final' keyword used when there is no [type], or `null` if a
/// type is given.
Token? get keyword;
/// The name of the variable being bound, if `_` then no variable is bound,
/// and [declaredElement] is `null`.
Token get name;
/// The type that the variable is required to match, or `null` if any type is
/// matched.
TypeAnnotation? get type;
}
/// A formal parameter with a default value.
///
/// There are two kinds of parameters that are both represented by this class:
@ -5391,31 +5437,6 @@ abstract class VariableDeclarationStatement implements Statement {
VariableDeclarationList get variables;
}
/// A variable pattern.
///
/// variablePattern ::=
/// ( 'var' | 'final' | [TypeAnnotation])? [Identifier]
///
/// Clients may not extend, implement or mix-in this class.
@experimental
abstract class VariablePattern implements DartPattern {
/// Return the element associated with this declaration, or `null` if either
/// the variable name is `_` (in which case no variable is defined) or the AST
/// structure has not been resolved.
VariablePatternElement? get declaredElement;
/// The 'var' or 'final' keyword used when there is no [type], or `null` if a
/// type is given.
Token? get keyword;
/// The name of the variable being bound.
Token get name;
/// The type that the variable is required to match, or `null` if any type is
/// matched.
TypeAnnotation? get type;
}
/// A guard in a pattern-based `case` in a `switch` statement, `switch`
/// expression, `if` statement, or `if` element.
///

View file

@ -149,6 +149,10 @@ class GeneralizingAstVisitor<R> implements AstVisitor<R> {
@override
R? visitAssertStatement(AssertStatement node) => visitStatement(node);
@override
R? visitAssignedVariablePattern(AssignedVariablePattern node) =>
visitDartPattern(node);
@override
R? visitAssignmentExpression(AssignmentExpression node) =>
visitExpression(node);
@ -259,6 +263,10 @@ class GeneralizingAstVisitor<R> implements AstVisitor<R> {
@override
R? visitDeclaredIdentifier(DeclaredIdentifier node) => visitDeclaration(node);
@override
R? visitDeclaredVariablePattern(DeclaredVariablePattern node) =>
visitDartPattern(node);
@override
R? visitDefaultFormalParameter(DefaultFormalParameter node) =>
visitFormalParameter(node);
@ -733,9 +741,6 @@ class GeneralizingAstVisitor<R> implements AstVisitor<R> {
R? visitVariableDeclarationStatement(VariableDeclarationStatement node) =>
visitStatement(node);
@override
R? visitVariablePattern(VariablePattern node) => visitDartPattern(node);
@override
R? visitWhenClause(WhenClause node) => visitNode(node);
@ -799,6 +804,12 @@ class RecursiveAstVisitor<R> implements AstVisitor<R> {
return null;
}
@override
R? visitAssignedVariablePattern(AssignedVariablePattern node) {
node.visitChildren(this);
return null;
}
@override
R? visitAssignmentExpression(AssignmentExpression node) {
node.visitChildren(this);
@ -973,6 +984,12 @@ class RecursiveAstVisitor<R> implements AstVisitor<R> {
return null;
}
@override
R? visitDeclaredVariablePattern(DeclaredVariablePattern node) {
node.visitChildren(this);
return null;
}
@override
R? visitDefaultFormalParameter(DefaultFormalParameter node) {
node.visitChildren(this);
@ -1709,12 +1726,6 @@ class RecursiveAstVisitor<R> implements AstVisitor<R> {
return null;
}
@override
R? visitVariablePattern(VariablePattern node) {
node.visitChildren(this);
return null;
}
@override
R? visitWhenClause(WhenClause node) {
node.visitChildren(this);
@ -1768,6 +1779,9 @@ class SimpleAstVisitor<R> implements AstVisitor<R> {
@override
R? visitAssertStatement(AssertStatement node) => null;
@override
R? visitAssignedVariablePattern(AssignedVariablePattern node) => null;
@override
R? visitAssignmentExpression(AssignmentExpression node) => null;
@ -1855,6 +1869,9 @@ class SimpleAstVisitor<R> implements AstVisitor<R> {
@override
R? visitDeclaredIdentifier(DeclaredIdentifier node) => null;
@override
R? visitDeclaredVariablePattern(DeclaredVariablePattern node) => null;
@override
R? visitDefaultFormalParameter(DefaultFormalParameter node) => null;
@ -2236,9 +2253,6 @@ class SimpleAstVisitor<R> implements AstVisitor<R> {
R? visitVariableDeclarationStatement(VariableDeclarationStatement node) =>
null;
@override
R? visitVariablePattern(VariablePattern node) => null;
@override
R? visitWhenClause(WhenClause node) => null;
@ -2281,6 +2295,9 @@ class ThrowingAstVisitor<R> implements AstVisitor<R> {
@override
R? visitAssertStatement(AssertStatement node) => _throw(node);
@override
R? visitAssignedVariablePattern(AssignedVariablePattern node) => _throw(node);
@override
R? visitAssignmentExpression(AssignmentExpression node) => _throw(node);
@ -2370,6 +2387,9 @@ class ThrowingAstVisitor<R> implements AstVisitor<R> {
@override
R? visitDeclaredIdentifier(DeclaredIdentifier node) => _throw(node);
@override
R? visitDeclaredVariablePattern(DeclaredVariablePattern node) => _throw(node);
@override
R? visitDefaultFormalParameter(DefaultFormalParameter node) => _throw(node);
@ -2758,9 +2778,6 @@ class ThrowingAstVisitor<R> implements AstVisitor<R> {
R? visitVariableDeclarationStatement(VariableDeclarationStatement node) =>
_throw(node);
@override
R? visitVariablePattern(VariablePattern node) => _throw(node);
@override
R? visitWhenClause(WhenClause node) => _throw(node);
@ -2841,6 +2858,14 @@ class TimedAstVisitor<T> implements AstVisitor<T> {
return result;
}
@override
T? visitAssignedVariablePattern(AssignedVariablePattern node) {
stopwatch.start();
T? result = _baseVisitor.visitAssignedVariablePattern(node);
stopwatch.stop();
return result;
}
@override
T? visitAssignmentExpression(AssignmentExpression node) {
stopwatch.start();
@ -3073,6 +3098,14 @@ class TimedAstVisitor<T> implements AstVisitor<T> {
return result;
}
@override
T? visitDeclaredVariablePattern(DeclaredVariablePattern node) {
stopwatch.start();
T? result = _baseVisitor.visitDeclaredVariablePattern(node);
stopwatch.stop();
return result;
}
@override
T? visitDefaultFormalParameter(DefaultFormalParameter node) {
stopwatch.start();
@ -4053,14 +4086,6 @@ class TimedAstVisitor<T> implements AstVisitor<T> {
return result;
}
@override
T? visitVariablePattern(VariablePattern node) {
stopwatch.start();
T? result = _baseVisitor.visitVariablePattern(node);
stopwatch.stop();
return result;
}
@override
T? visitWhenClause(WhenClause node) {
stopwatch.start();
@ -4127,6 +4152,10 @@ class UnifyingAstVisitor<R> implements AstVisitor<R> {
@override
R? visitAssertStatement(AssertStatement node) => visitNode(node);
@override
R? visitAssignedVariablePattern(AssignedVariablePattern node) =>
visitNode(node);
@override
R? visitAssignmentExpression(AssignmentExpression node) => visitNode(node);
@ -4217,6 +4246,10 @@ class UnifyingAstVisitor<R> implements AstVisitor<R> {
@override
R? visitDeclaredIdentifier(DeclaredIdentifier node) => visitNode(node);
@override
R? visitDeclaredVariablePattern(DeclaredVariablePattern node) =>
visitNode(node);
@override
R? visitDefaultFormalParameter(DefaultFormalParameter node) =>
visitNode(node);
@ -4619,9 +4652,6 @@ class UnifyingAstVisitor<R> implements AstVisitor<R> {
R? visitVariableDeclarationStatement(VariableDeclarationStatement node) =>
visitNode(node);
@override
R? visitVariablePattern(VariablePattern node) => visitNode(node);
@override
R? visitWhenClause(WhenClause node) => visitNode(node);

View file

@ -657,6 +657,55 @@ class AssertStatementImpl extends StatementImpl implements AssertStatement {
}
}
/// A variable pattern in [PatternAssignment].
///
/// variablePattern ::= identifier
@experimental
class AssignedVariablePatternImpl extends DartPatternImpl
implements AssignedVariablePattern {
@override
Element? element;
@override
final Token name;
AssignedVariablePatternImpl({
required this.name,
});
@override
Token get beginToken => name;
@override
Token get endToken => name;
@override
ChildEntities get _childEntities =>
super._childEntities..addToken('name', name);
@override
E? accept<E>(AstVisitor<E> visitor) {
return visitor.visitAssignedVariablePattern(this);
}
@override
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
throw UnimplementedError('TODO(scheglov)');
}
@override
void resolvePattern(
ResolverVisitor resolverVisitor,
DartType matchedType,
SharedMatchContext context,
) {
throw UnimplementedError('TODO(scheglov)');
}
@override
void visitChildren(AstVisitor visitor) {}
}
/// An assignment expression.
///
/// assignmentExpression ::=
@ -1135,7 +1184,8 @@ class BinaryPatternImpl extends DartPatternImpl implements BinaryPattern {
DartType matchedType,
SharedMatchContext context,
) {
assert(operator.type == TokenType.AMPERSAND_AMPERSAND || operator.type == TokenType.BAR_BAR);
assert(operator.type == TokenType.AMPERSAND_AMPERSAND ||
operator.type == TokenType.BAR_BAR);
resolverVisitor.analyzeLogicalPattern(
matchedType, context, this, leftOperand, rightOperand,
isAnd: operator.type == TokenType.AMPERSAND_AMPERSAND);
@ -3352,7 +3402,9 @@ class ContinueStatementImpl extends StatementImpl implements ContinueStatement {
/// A pattern.
///
/// pattern ::=
/// [BinaryPattern]
/// [AssignedVariablePattern]
/// | [BinaryPattern]
/// | [DeclaredVariablePattern]
/// | [CastPattern]
/// | [ConstantPattern]
/// | [ListPattern]
@ -3362,7 +3414,6 @@ class ContinueStatementImpl extends StatementImpl implements ContinueStatement {
/// | [PostfixPattern]
/// | [RecordPattern]
/// | [RelationalPattern]
/// | [VariablePattern]
@experimental
abstract class DartPatternImpl extends AstNodeImpl
implements DartPattern, ListPatternElementImpl {
@ -3377,7 +3428,7 @@ abstract class DartPatternImpl extends AstNodeImpl
DartPattern get unParenthesized => this;
/// The variable pattern, itself, or wrapped in a unary pattern.
VariablePatternImpl? get variablePattern => null;
DeclaredVariablePatternImpl? get variablePattern => null;
DartType computePatternSchema(ResolverVisitor resolverVisitor);
@ -3493,6 +3544,103 @@ class DeclaredSimpleIdentifier extends SimpleIdentifierImpl {
bool inDeclarationContext() => true;
}
/// A variable pattern.
///
/// variablePattern ::=
/// ( 'var' | 'final' | 'final'? [TypeAnnotation])? [Identifier]
@experimental
class DeclaredVariablePatternImpl extends DartPatternImpl
implements DeclaredVariablePattern {
@override
VariablePatternBindElementImpl? declaredElement;
@override
final Token? keyword;
@override
final Token name;
@override
final TypeAnnotationImpl? type;
DeclaredVariablePatternImpl({
required this.name,
required this.keyword,
required this.type,
}) {
_becomeParentOf(type);
}
@override
Token get beginToken => type?.beginToken ?? name;
@override
Token get endToken => name;
/// If [keyword] is `final`, returns it.
Token? get finalToken {
final keyword = this.keyword;
if (keyword != null && keyword.keyword == Keyword.FINAL) {
return keyword;
}
return null;
}
/// Returns the context for this pattern.
/// * Declaration context: [PatternVariableDeclarationImpl]
/// * Assignment context: [PatternAssignmentImpl]
/// * Matching context: [GuardedPatternImpl]
AstNodeImpl? get patternContext {
for (DartPatternImpl current = this;;) {
final parent = current.parent;
if (parent is PatternVariableDeclarationImpl) {
return parent;
} else if (parent is PatternAssignmentImpl) {
return parent;
} else if (parent is GuardedPatternImpl) {
return parent;
} else if (parent is DartPatternImpl) {
current = parent;
} else {
return null;
}
}
}
@override
DeclaredVariablePatternImpl? get variablePattern => this;
@override
ChildEntities get _childEntities => super._childEntities
..addToken('keyword', keyword)
..addNode('type', type)
..addToken('name', name);
@override
E? accept<E>(AstVisitor<E> visitor) =>
visitor.visitDeclaredVariablePattern(this);
@override
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
return resolverVisitor.analyzeVariablePatternSchema(type?.typeOrThrow);
}
@override
void resolvePattern(
ResolverVisitor resolverVisitor,
DartType matchedType,
SharedMatchContext context,
) {
resolverVisitor.analyzeVariablePattern(matchedType, context, this,
declaredElement, declaredElement?.name, type?.typeOrThrow);
}
@override
void visitChildren(AstVisitor visitor) {
type?.accept(visitor);
}
}
/// A formal parameter with a default value. There are two kinds of parameters
/// that are both represented by this class: named formal parameters and
/// positional formal parameters.
@ -9726,7 +9874,7 @@ class ParenthesizedPatternImpl extends DartPatternImpl
}
@override
VariablePatternImpl? get variablePattern => pattern.variablePattern;
DeclaredVariablePatternImpl? get variablePattern => pattern.variablePattern;
@override
ChildEntities get _childEntities => super._childEntities
@ -10171,7 +10319,7 @@ class PostfixPatternImpl extends DartPatternImpl implements PostfixPattern {
Token get endToken => operator;
@override
VariablePatternImpl? get variablePattern => operand.variablePattern;
DeclaredVariablePatternImpl? get variablePattern => operand.variablePattern;
@override
ChildEntities get _childEntities => super._childEntities
@ -13688,101 +13836,6 @@ class VariableDeclarationStatementImpl extends StatementImpl
}
}
/// A variable pattern.
///
/// variablePattern ::=
/// ( 'var' | 'final' | [TypeAnnotation])? [Identifier]
@experimental
class VariablePatternImpl extends DartPatternImpl implements VariablePattern {
@override
VariablePatternBindElementImpl? declaredElement;
@override
final Token? keyword;
@override
final Token name;
@override
final TypeAnnotationImpl? type;
VariablePatternImpl({
required this.name,
required this.keyword,
required this.type,
}) {
_becomeParentOf(type);
}
@override
Token get beginToken => type?.beginToken ?? name;
@override
Token get endToken => name;
/// If [keyword] is `final`, returns it.
Token? get finalToken {
final keyword = this.keyword;
if (keyword != null && keyword.keyword == Keyword.FINAL) {
return keyword;
}
return null;
}
/// Returns the context for this pattern.
/// * Declaration context: [PatternVariableDeclarationImpl]
/// * Assignment context: [PatternAssignmentImpl]
/// * Matching context: [GuardedPatternImpl]
AstNodeImpl? get patternContext {
for (DartPatternImpl current = this;;) {
final parent = current.parent;
if (parent is PatternVariableDeclarationImpl) {
return parent;
} else if (parent is PatternAssignmentImpl) {
return parent;
} else if (parent is GuardedPatternImpl) {
return parent;
} else if (parent is DartPatternImpl) {
current = parent;
} else {
return null;
}
}
}
@override
VariablePatternImpl? get variablePattern => this;
@override
ChildEntities get _childEntities => super._childEntities
..addToken('keyword', keyword)
..addNode('type', type)
..addToken('name', name);
@override
E? accept<E>(AstVisitor<E> visitor) => visitor.visitVariablePattern(this);
@override
DartType computePatternSchema(ResolverVisitor resolverVisitor) {
return resolverVisitor.analyzeVariablePatternSchema(type?.typeOrThrow);
}
@override
void resolvePattern(
ResolverVisitor resolverVisitor,
DartType matchedType,
SharedMatchContext context,
) {
resolverVisitor.analyzeVariablePattern(matchedType, context, this,
declaredElement, declaredElement?.name, type?.typeOrThrow);
}
@override
void visitChildren(AstVisitor visitor) {
type?.accept(visitor);
}
}
/// A guard in a pattern-based `case` in a `switch` statement or `switch`
/// expression.
///

View file

@ -68,6 +68,11 @@ class ToSourceVisitor implements AstVisitor<void> {
sink.write(');');
}
@override
void visitAssignedVariablePattern(AssignedVariablePattern node) {
sink.write(node.name.lexeme);
}
@override
void visitAssignmentExpression(AssignmentExpression node) {
_visitNode(node.leftHandSide);
@ -312,6 +317,13 @@ class ToSourceVisitor implements AstVisitor<void> {
_visitToken(node.name);
}
@override
void visitDeclaredVariablePattern(DeclaredVariablePattern node) {
_visitToken(node.keyword, suffix: ' ');
_visitNode(node.type, suffix: ' ');
sink.write(node.name.lexeme);
}
@override
void visitDefaultFormalParameter(DefaultFormalParameter node) {
_visitNode(node.parameter);
@ -1341,13 +1353,6 @@ class ToSourceVisitor implements AstVisitor<void> {
sink.write(';');
}
@override
void visitVariablePattern(VariablePattern node) {
_visitToken(node.keyword, suffix: ' ');
_visitNode(node.type, suffix: ' ');
sink.write(node.name.lexeme);
}
@override
void visitWhenClause(WhenClause node) {
sink.write('when ');

View file

@ -151,6 +151,12 @@ class AstComparator implements AstVisitor<bool> {
isEqualTokens(node.semicolon, other.semicolon);
}
@override
bool visitAssignedVariablePattern(AssignedVariablePattern node) {
var other = _other as DeclaredVariablePattern;
return isEqualTokens(node.name, other.name);
}
@override
bool visitAssignmentExpression(AssignmentExpression node) {
AssignmentExpression other = _other as AssignmentExpression;
@ -420,6 +426,14 @@ class AstComparator implements AstVisitor<bool> {
isEqualTokens(node.name, other.name);
}
@override
bool visitDeclaredVariablePattern(DeclaredVariablePattern node) {
var other = _other as DeclaredVariablePattern;
return isEqualTokens(node.keyword, other.keyword) &&
isEqualNodes(node.type, other.type) &&
isEqualTokens(node.name, other.name);
}
@override
bool visitDefaultFormalParameter(covariant DefaultFormalParameterImpl node) {
var other = _other as DefaultFormalParameterImpl;
@ -1517,13 +1531,6 @@ class AstComparator implements AstVisitor<bool> {
isEqualTokens(node.semicolon, other.semicolon);
}
@override
bool visitVariablePattern(VariablePattern node) {
var other = _other as VariablePattern;
return isEqualNodes(node.type, other.type) &&
isEqualTokens(node.name, other.name);
}
@override
bool visitWhenClause(WhenClause node) {
var other = _other as WhenClause;

View file

@ -6548,7 +6548,7 @@ abstract class VariableElementImpl extends ElementImpl
class VariablePatternBindElementImpl extends VariablePatternElementImpl
implements VariablePatternBindElement {
final VariablePatternImpl node;
final DeclaredVariablePatternImpl node;
VariablePatternBindElementImpl(this.node, super.name, super.offset);
}

View file

@ -380,6 +380,42 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
_setCodeRange(element, node);
}
@override
void visitDeclaredVariablePattern(
covariant DeclaredVariablePatternImpl node) {
node.type?.accept(this);
final name = node.name.lexeme;
if (name != '_') {
var element = VariablePatternBindElementImpl(
node,
name,
node.name.offset,
);
_patternVariables.add(name, element);
_elementHolder.enclose(element);
_define(element);
element.hasImplicitType = node.type == null;
element.type = node.type?.type ?? _dynamicType;
node.declaredElement = element;
var patternContext = node.patternContext;
if (patternContext is PatternVariableDeclarationImpl) {
element.isFinal = patternContext.finalToken != null;
var keyword = node.keyword;
if (keyword != null) {
_errorReporter.reportErrorForToken(
CompileTimeErrorCode
.VARIABLE_PATTERN_KEYWORD_IN_DECLARATION_CONTEXT,
keyword,
);
}
} else {
element.isFinal = node.finalToken != null;
}
}
}
@override
void visitDefaultFormalParameter(covariant DefaultFormalParameterImpl node) {
var normalParameter = node.parameter;
@ -1268,41 +1304,6 @@ class ResolutionVisitor extends RecursiveAstVisitor<void> {
}
}
@override
void visitVariablePattern(covariant VariablePatternImpl node) {
node.type?.accept(this);
final name = node.name.lexeme;
if (name != '_') {
var element = VariablePatternBindElementImpl(
node,
name,
node.name.offset,
);
_patternVariables.add(name, element);
_elementHolder.enclose(element);
_define(element);
element.hasImplicitType = node.type == null;
element.type = node.type?.type ?? _dynamicType;
node.declaredElement = element;
var patternContext = node.patternContext;
if (patternContext is PatternVariableDeclarationImpl) {
element.isFinal = patternContext.finalToken != null;
var keyword = node.keyword;
if (keyword != null) {
_errorReporter.reportErrorForToken(
CompileTimeErrorCode
.VARIABLE_PATTERN_KEYWORD_IN_DECLARATION_CONTEXT,
keyword,
);
}
} else {
element.isFinal = node.finalToken != null;
}
}
}
/// Builds the label elements associated with [labels] and stores them in the
/// element holder.
void _buildLabelElements(

View file

@ -5281,7 +5281,13 @@ class AstBuilder extends StackListener {
throw UnimplementedError('Patterns not enabled');
}
var type = pop() as TypeAnnotationImpl?;
push(VariablePatternImpl(keyword: keyword, type: type, name: variable));
push(
DeclaredVariablePatternImpl(
keyword: keyword,
type: type,
name: variable,
),
);
}
@override

View file

@ -1179,7 +1179,7 @@ class ResolverVisitor extends ThrowingAstVisitor<void>
}
@override
bool isVariablePattern(AstNode pattern) => pattern is VariablePattern;
bool isVariablePattern(AstNode pattern) => pattern is DeclaredVariablePattern;
@override
DartType listType(DartType elementType) {

View file

@ -59,6 +59,12 @@ class LinterVisitor implements AstVisitor<void> {
node.visitChildren(this);
}
@override
void visitAssignedVariablePattern(AssignedVariablePattern node) {
_runSubscriptions(node, registry._forAssignedVariablePattern);
node.visitChildren(this);
}
@override
void visitAssignmentExpression(AssignmentExpression node) {
_runSubscriptions(node, registry._forAssignmentExpression);
@ -233,6 +239,12 @@ class LinterVisitor implements AstVisitor<void> {
node.visitChildren(this);
}
@override
void visitDeclaredVariablePattern(DeclaredVariablePattern node) {
_runSubscriptions(node, registry._forDeclaredVariablePattern);
node.visitChildren(this);
}
@override
void visitDefaultFormalParameter(DefaultFormalParameter node) {
_runSubscriptions(node, registry._forDefaultFormalParameter);
@ -970,12 +982,6 @@ class LinterVisitor implements AstVisitor<void> {
node.visitChildren(this);
}
@override
void visitVariablePattern(VariablePattern node) {
_runSubscriptions(node, registry._forVariablePattern);
node.visitChildren(this);
}
@override
void visitWhenClause(WhenClause node) {
_runSubscriptions(node, registry._forWhenClause);
@ -1028,6 +1034,8 @@ class NodeLintRegistry {
final List<_Subscription<AsExpression>> _forAsExpression = [];
final List<_Subscription<AssertInitializer>> _forAssertInitializer = [];
final List<_Subscription<AssertStatement>> _forAssertStatement = [];
final List<_Subscription<AssignedVariablePattern>>
_forAssignedVariablePattern = [];
final List<_Subscription<AssignmentExpression>> _forAssignmentExpression = [];
final List<_Subscription<AugmentationImportDirective>>
_forAugmentationImportDirective = [];
@ -1061,6 +1069,8 @@ class NodeLintRegistry {
final List<_Subscription<ConstructorSelector>> _forConstructorSelector = [];
final List<_Subscription<ContinueStatement>> _forContinueStatement = [];
final List<_Subscription<DeclaredIdentifier>> _forDeclaredIdentifier = [];
final List<_Subscription<DeclaredVariablePattern>>
_forDeclaredVariablePattern = [];
final List<_Subscription<DefaultFormalParameter>> _forDefaultFormalParameter =
[];
final List<_Subscription<DoStatement>> _forDoStatement = [];
@ -1212,7 +1222,6 @@ class NodeLintRegistry {
_forVariableDeclarationList = [];
final List<_Subscription<VariableDeclarationStatement>>
_forVariableDeclarationStatement = [];
final List<_Subscription<VariablePattern>> _forVariablePattern = [];
final List<_Subscription<WhenClause>> _forWhenClause = [];
final List<_Subscription<WhileStatement>> _forWhileStatement = [];
final List<_Subscription<WithClause>> _forWithClause = [];
@ -1245,6 +1254,11 @@ class NodeLintRegistry {
_forAssertStatement.add(_Subscription(linter, visitor, _getTimer(linter)));
}
void addAssignedVariablePattern(LintRule linter, AstVisitor visitor) {
_forAssignedVariablePattern
.add(_Subscription(linter, visitor, _getTimer(linter)));
}
void addAssignmentExpression(LintRule linter, AstVisitor visitor) {
_forAssignmentExpression
.add(_Subscription(linter, visitor, _getTimer(linter)));
@ -1373,6 +1387,11 @@ class NodeLintRegistry {
.add(_Subscription(linter, visitor, _getTimer(linter)));
}
void addDeclaredVariablePattern(LintRule linter, AstVisitor visitor) {
_forDeclaredVariablePattern
.add(_Subscription(linter, visitor, _getTimer(linter)));
}
void addDefaultFormalParameter(LintRule linter, AstVisitor visitor) {
_forDefaultFormalParameter
.add(_Subscription(linter, visitor, _getTimer(linter)));
@ -1914,10 +1933,6 @@ class NodeLintRegistry {
.add(_Subscription(linter, visitor, _getTimer(linter)));
}
void addVariablePattern(LintRule linter, AstVisitor visitor) {
_forVariablePattern.add(_Subscription(linter, visitor, _getTimer(linter)));
}
void addWhenClause(LintRule linter, AstVisitor visitor) {
_forWhenClause.add(_Subscription(linter, visitor, _getTimer(linter)));
}

View file

@ -216,6 +216,10 @@ class FindNode {
return _node(search, (n) => n is DeclaredIdentifier);
}
DeclaredVariablePattern declaredVariablePattern(String search) {
return _node(search, (n) => n is DeclaredVariablePattern);
}
DefaultFormalParameter defaultParameter(String search) {
return _node(search, (n) => n is DefaultFormalParameter);
}
@ -732,10 +736,6 @@ class FindNode {
return _node(search, (n) => n is VariableDeclarationStatement);
}
VariablePattern variablePattern(String search) {
return _node(search, (n) => n is VariablePattern);
}
WhenClause whenClause(String search) {
return _node(search, (n) => n is WhenClause);
}

File diff suppressed because it is too large Load diff

View file

@ -3737,7 +3737,7 @@ void f(x) {
''');
_assertSource(
'int? _',
findNode.variablePattern('int?'),
findNode.declaredVariablePattern('int?'),
);
}

View file

@ -23,7 +23,7 @@ void f(x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -32,7 +32,7 @@ BinaryPattern
type: int
name: _
operator: &&
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: double
@ -55,7 +55,7 @@ void f(x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -64,7 +64,7 @@ BinaryPattern
type: int
name: _
operator: &&
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: double
@ -89,12 +89,12 @@ PatternVariableDeclarationStatement
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@18
type: int
operator: &&
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
name: b
declaredElement: hasImplicitType b@23
type: int
@ -116,7 +116,7 @@ void f(x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -125,7 +125,7 @@ BinaryPattern
type: int
name: _
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: double
@ -148,7 +148,7 @@ void f(x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -157,7 +157,7 @@ BinaryPattern
type: int
name: _
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: double

View file

@ -23,7 +23,7 @@ void f(x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
CastPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@29
@ -79,7 +79,7 @@ PatternVariableDeclaration
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: CastPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@19
type: int

View file

@ -8,12 +8,12 @@ import 'context_collection_resolution.dart';
main() {
defineReflectiveSuite(() {
defineReflectiveTests(VariablePatternResolutionTest);
defineReflectiveTests(DeclaredVariablePatternResolutionTest);
});
}
@reflectiveTest
class VariablePatternResolutionTest extends PubPackageResolutionTest {
class DeclaredVariablePatternResolutionTest extends PubPackageResolutionTest {
test_final_switchCase() async {
await assertNoErrorsInCode(r'''
void f(int x) {
@ -25,7 +25,7 @@ void f(int x) {
''');
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
VariablePattern
DeclaredVariablePattern
keyword: final
name: y
declaredElement: hasImplicitType isFinal y@46
@ -44,7 +44,7 @@ void f(x) {
''');
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
VariablePattern
DeclaredVariablePattern
keyword: final
type: NamedType
name: SimpleIdentifier
@ -69,7 +69,7 @@ void f(x) {
''');
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -93,7 +93,7 @@ void f(x) {
''');
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -115,7 +115,7 @@ void f<T>(T x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
VariablePattern
DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@54
@ -137,7 +137,7 @@ void f() {
''');
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
VariablePattern
DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@95
@ -153,7 +153,7 @@ void f(int x) {
''');
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
VariablePattern
DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@33
@ -169,7 +169,7 @@ void f(Never? x) {
''');
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
VariablePattern
DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@36
@ -185,7 +185,7 @@ void f(Null x) {
''');
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
VariablePattern
DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@34
@ -207,7 +207,7 @@ void f() {
''');
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
VariablePattern
DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@95
@ -226,7 +226,7 @@ void f(int x) {
''');
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
VariablePattern
DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@44
@ -246,7 +246,7 @@ void f(int x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
CastPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@44

View file

@ -86,7 +86,7 @@ IfElement
pattern: ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -159,7 +159,7 @@ IfElement
caseClause: CaseClause
caseKeyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int

View file

@ -67,7 +67,7 @@ IfStatement
caseKeyword: case
guardedPattern: GuardedPattern
pattern: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -81,7 +81,7 @@ IfStatement
rightOperand: ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -146,7 +146,7 @@ IfStatement
caseKeyword: case
guardedPattern: GuardedPattern
pattern: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -160,7 +160,7 @@ IfStatement
rightOperand: ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
keyword: final
type: NamedType
name: SimpleIdentifier
@ -226,7 +226,7 @@ IfStatement
caseKeyword: case
guardedPattern: GuardedPattern
pattern: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -240,7 +240,7 @@ IfStatement
rightOperand: ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: double
@ -307,7 +307,7 @@ IfStatement
guardedPattern: GuardedPattern
pattern: BinaryPattern
leftOperand: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -381,7 +381,7 @@ IfStatement
guardedPattern: GuardedPattern
pattern: BinaryPattern
leftOperand: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -392,7 +392,7 @@ IfStatement
declaredElement: a@37
type: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -459,7 +459,7 @@ IfStatement
guardedPattern: GuardedPattern
pattern: BinaryPattern
leftOperand: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -470,7 +470,7 @@ IfStatement
declaredElement: a@37
type: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -481,7 +481,7 @@ IfStatement
declaredElement: a@46
type: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -545,7 +545,7 @@ IfStatement
guardedPattern: GuardedPattern
pattern: BinaryPattern
leftOperand: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -561,7 +561,7 @@ IfStatement
literal: 2
staticType: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -631,7 +631,7 @@ IfStatement
literal: 1
staticType: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -705,7 +705,7 @@ IfStatement
literal: 1
staticType: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -716,7 +716,7 @@ IfStatement
declaredElement: a@42
type: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -791,7 +791,7 @@ IfStatement
pattern: ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -875,7 +875,7 @@ IfStatement
caseClause: CaseClause
caseKeyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int

View file

@ -28,7 +28,7 @@ void f(x) {
ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -57,7 +57,7 @@ void f(x) {
ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@41
@ -91,7 +91,7 @@ ListPattern
rightBracket: >
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@46
@ -140,7 +140,7 @@ ListPattern
staticType: int
RestPatternElement
operator: ...
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: rest
declaredElement: hasImplicitType rest@46
@ -164,7 +164,7 @@ void f(List<int> x) {
ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@51
@ -198,7 +198,7 @@ ListPattern
rightBracket: >
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@56
@ -263,7 +263,7 @@ void f(Object x) {
ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -292,7 +292,7 @@ void f(Object x) {
ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@48
@ -359,7 +359,7 @@ ListPattern
rightBracket: >
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -398,7 +398,7 @@ ListPattern
rightBracket: >
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@53
@ -421,7 +421,7 @@ PatternVariableDeclaration
pattern: ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@29
type: int
@ -460,7 +460,7 @@ PatternVariableDeclaration
rightBracket: >
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@23
type: int
@ -497,7 +497,7 @@ PatternVariableDeclaration
pattern: ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int

View file

@ -34,7 +34,7 @@ MapPattern
literal: 0
staticType: int
separator: :
value: VariablePattern
value: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: String
@ -68,7 +68,7 @@ MapPattern
literal: 0
staticType: int
separator: :
value: VariablePattern
value: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@44
@ -113,7 +113,7 @@ MapPattern
literal: 0
staticType: int
separator: :
value: VariablePattern
value: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@57
@ -173,7 +173,7 @@ MapPattern
literal: ''
RestPatternElement
operator: ...
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: rest
declaredElement: hasImplicitType rest@57
@ -199,7 +199,7 @@ MapPattern
literal: 0
staticType: int
separator: :
value: VariablePattern
value: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@50
@ -241,7 +241,7 @@ MapPattern
literal: true
staticType: bool
separator: :
value: VariablePattern
value: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@62
@ -307,7 +307,7 @@ MapPattern
literal: true
staticType: bool
separator: :
value: VariablePattern
value: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -338,7 +338,7 @@ MapPattern
literal: true
staticType: bool
separator: :
value: VariablePattern
value: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@43
@ -421,7 +421,7 @@ MapPattern
literal: true
staticType: bool
separator: :
value: VariablePattern
value: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@54
@ -482,7 +482,7 @@ PatternVariableDeclaration
literal: true
staticType: bool
separator: :
value: VariablePattern
value: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@40
type: int
@ -532,7 +532,7 @@ PatternVariableDeclaration
literal: true
staticType: bool
separator: :
value: VariablePattern
value: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@35
type: int
@ -574,7 +574,7 @@ PatternVariableDeclaration
literal: true
staticType: bool
separator: :
value: VariablePattern
value: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int

View file

@ -107,7 +107,7 @@ ObjectPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: foo2
declaredElement: hasImplicitType foo2@90
@ -225,7 +225,7 @@ ObjectPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@83
@ -263,7 +263,7 @@ ObjectPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: foo2
declaredElement: hasImplicitType foo2@84
@ -338,7 +338,7 @@ ObjectPattern
RecordPatternField
fieldName: RecordPatternFieldName
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: foo
declaredElement: hasImplicitType foo@81
@ -376,7 +376,7 @@ ObjectPattern
fieldName: RecordPatternFieldName
colon: :
pattern: PostfixPattern
operand: VariablePattern
operand: DeclaredVariablePattern
keyword: var
name: foo
declaredElement: hasImplicitType foo@82
@ -416,7 +416,7 @@ ObjectPattern
colon: :
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: foo
declaredElement: hasImplicitType foo@82
@ -491,7 +491,7 @@ ObjectPattern
RecordPatternField
fieldName: RecordPatternFieldName
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: foo
declaredElement: hasImplicitType foo@65
@ -527,7 +527,7 @@ ObjectPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@77
@ -580,7 +580,7 @@ ObjectPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@145
@ -621,7 +621,7 @@ ObjectPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@141
@ -658,7 +658,7 @@ ObjectPattern
fieldName: RecordPatternFieldName
name: hashCode
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@90
@ -697,7 +697,7 @@ ObjectPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@85
@ -734,7 +734,7 @@ ObjectPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@73
@ -771,7 +771,7 @@ ObjectPattern
fieldName: RecordPatternFieldName
name: $0
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@71
@ -808,7 +808,7 @@ PatternVariableDeclaration
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@32
type: int
@ -862,7 +862,7 @@ PatternVariableDeclaration
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@29
type: int
@ -918,7 +918,7 @@ PatternVariableDeclaration
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int

View file

@ -30,7 +30,7 @@ PatternVariableDeclarationStatement
keyword: final
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: num
@ -63,7 +63,7 @@ PatternVariableDeclarationStatement
keyword: final
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType isFinal a@20
type: int
@ -91,7 +91,7 @@ PatternVariableDeclarationStatement
keyword: var
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@18
type: A
@ -128,7 +128,7 @@ PatternVariableDeclarationStatement
keyword: var
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: num
@ -162,7 +162,7 @@ PatternVariableDeclarationStatement
keyword: var
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -204,7 +204,7 @@ PatternVariableDeclarationStatement
keyword: var
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@18
type: int
@ -232,13 +232,13 @@ PatternVariableDeclarationStatement
leftParenthesis: (
fields
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@33
type: int
fieldElement: <null>
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: b
declaredElement: hasImplicitType b@36
type: String

View file

@ -23,7 +23,7 @@ void f(int? x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
PostfixPattern
operand: VariablePattern
operand: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@34
@ -44,7 +44,7 @@ void f(int? x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
PostfixPattern
operand: VariablePattern
operand: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@45
@ -66,7 +66,7 @@ PatternVariableDeclaration
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: PostfixPattern
operand: VariablePattern
operand: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@24
type: int
@ -89,7 +89,7 @@ void f(int? x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
PostfixPattern
operand: VariablePattern
operand: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@34
@ -110,7 +110,7 @@ void f(int? x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
PostfixPattern
operand: VariablePattern
operand: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@45

View file

@ -50,7 +50,7 @@ RecordPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@46
@ -73,7 +73,7 @@ void f(x) {
assertResolvedNodeText(node, r'''
ParenthesizedPattern
leftParenthesis: (
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@41
@ -144,7 +144,7 @@ RecordPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -177,7 +177,7 @@ RecordPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@54
@ -226,7 +226,7 @@ RecordPattern
leftParenthesis: (
fields
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -256,7 +256,7 @@ RecordPattern
leftParenthesis: (
fields
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@49
@ -284,7 +284,7 @@ RecordPattern
fieldName: RecordPatternFieldName
name: a
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: b
declaredElement: hasImplicitType b@47
@ -311,7 +311,7 @@ RecordPattern
RecordPatternField
fieldName: RecordPatternFieldName
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@46
@ -338,7 +338,7 @@ RecordPattern
RecordPatternField
fieldName: RecordPatternFieldName
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@53
@ -365,7 +365,7 @@ RecordPattern
RecordPatternField
fieldName: RecordPatternFieldName
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@60
@ -390,7 +390,7 @@ RecordPattern
leftParenthesis: (
fields
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@44
@ -415,7 +415,7 @@ RecordPattern
leftParenthesis: (
fields
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@55
@ -457,7 +457,7 @@ RecordPattern
leftParenthesis: (
fields
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@69
@ -467,14 +467,14 @@ RecordPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: b
declaredElement: hasImplicitType b@81
type: String
fieldElement: <null>
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: c
declaredElement: hasImplicitType c@88
@ -502,7 +502,7 @@ RecordPattern
fieldName: RecordPatternFieldName
name: bar
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@58
@ -530,7 +530,7 @@ RecordPattern
fieldName: RecordPatternFieldName
name: foo
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: y
declaredElement: hasImplicitType y@58
@ -585,7 +585,7 @@ RecordPattern
RecordPatternField
fieldName: RecordPatternFieldName
colon: :
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: foo
declaredElement: hasImplicitType foo@55
@ -613,7 +613,7 @@ RecordPattern
fieldName: RecordPatternFieldName
colon: :
pattern: PostfixPattern
operand: VariablePattern
operand: DeclaredVariablePattern
keyword: var
name: foo
declaredElement: hasImplicitType foo@56
@ -639,7 +639,7 @@ RecordPattern
leftParenthesis: (
fields
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@48
@ -663,13 +663,13 @@ PatternVariableDeclaration
leftParenthesis: (
fields
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: a
declaredElement: hasImplicitType a@33
type: int
fieldElement: <null>
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: b
declaredElement: hasImplicitType b@36
type: String
@ -699,7 +699,7 @@ PatternVariableDeclaration
leftParenthesis: (
fields
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -711,7 +711,7 @@ PatternVariableDeclaration
type: int
fieldElement: <null>
RecordPatternField
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: String

View file

@ -42,7 +42,7 @@ SwitchExpression
cases
SwitchExpressionCase
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: _
arrow: =>
expression: MethodInvocation
@ -75,7 +75,7 @@ void f(Object? x, int Function() a) {
assertResolvedNodeText(node, r'''
SwitchExpressionCase
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: _
arrow: =>
expression: FunctionExpressionInvocation
@ -200,7 +200,7 @@ SwitchExpression
cases
SwitchExpressionCase
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: _
arrow: =>
expression: IntegerLiteral
@ -245,7 +245,7 @@ SwitchExpression
staticType: int
SwitchExpressionCase
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: _
arrow: =>
expression: NullLiteral
@ -290,7 +290,7 @@ SwitchExpression
staticType: int
SwitchExpressionCase
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: _
arrow: =>
expression: IntegerLiteral
@ -332,7 +332,7 @@ SwitchExpression
pattern: ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -373,7 +373,7 @@ SwitchExpression
staticType: int
SwitchExpressionCase
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: _
arrow: =>
expression: IntegerLiteral
@ -410,7 +410,7 @@ SwitchExpression
cases
SwitchExpressionCase
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -442,7 +442,7 @@ SwitchExpression
staticType: int
SwitchExpressionCase
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
name: _
arrow: =>
expression: SimpleIdentifier

View file

@ -262,7 +262,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -291,7 +291,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -354,7 +354,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: final
type: NamedType
name: SimpleIdentifier
@ -384,7 +384,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: final
type: NamedType
name: SimpleIdentifier
@ -448,7 +448,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: final
type: NamedType
name: SimpleIdentifier
@ -478,7 +478,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: num
@ -541,7 +541,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -570,7 +570,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: num
@ -641,7 +641,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -704,7 +704,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -775,7 +775,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -850,7 +850,7 @@ SwitchStatement
colon: :
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -919,7 +919,7 @@ SwitchStatement
pattern: ListPattern
leftBracket: [
elements
VariablePattern
DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int
@ -990,7 +990,7 @@ SwitchStatement
SwitchPatternCase
keyword: case
guardedPattern: GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
type: NamedType
name: SimpleIdentifier
token: int

View file

@ -19,6 +19,7 @@ import 'constant_pattern_test.dart' as constant_pattern;
import 'constant_test.dart' as constant;
import 'constructor_reference_test.dart' as constructor_reference;
import 'constructor_test.dart' as constructor;
import 'declared_variable_pattern_test.dart' as declared_variable_pattern;
import 'enum_test.dart' as enum_resolution;
import 'extension_method_test.dart' as extension_method;
import 'extension_override_test.dart' as extension_override;
@ -88,7 +89,6 @@ import 'try_statement_test.dart' as try_statement;
import 'type_inference/test_all.dart' as type_inference;
import 'type_literal_test.dart' as type_literal;
import 'type_name_test.dart' as type_name;
import 'variable_pattern_test.dart' as variable_pattern;
import 'variance_test.dart' as variance_test;
import 'yield_statement_test.dart' as yield_statement;
@ -107,8 +107,9 @@ main() {
constant_pattern.main();
comment.main();
constant.main();
constructor.main();
constructor_reference.main();
constructor.main();
declared_variable_pattern.main();
enum_resolution.main();
extension_method.main();
extension_override.main();
@ -173,7 +174,6 @@ main() {
type_inference.main();
type_literal.main();
type_name.main();
variable_pattern.main();
variance_test.main();
yield_statement.main();
defineReflectiveTests(UpdateNodeTextExpectations);

View file

@ -27,13 +27,13 @@ void f(int x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@33
type: int
operator: &&
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@42
@ -56,13 +56,13 @@ void f(int x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@44
type: int
operator: &&
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: var
name: a
declaredElement: hasImplicitType a@53

View file

@ -27,7 +27,7 @@ void f(int x) {
final node1 = findNode.caseClause('case final a').guardedPattern;
assertResolvedNodeText(node1, r'''
GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@35
@ -37,7 +37,7 @@ GuardedPattern
final node2 = findNode.caseClause('case final b').guardedPattern;
assertResolvedNodeText(node2, r'''
GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: final
name: b
declaredElement: hasImplicitType isFinal b@61
@ -56,7 +56,7 @@ void f(int x) {
final node1 = findNode.caseClause('case final a').guardedPattern;
assertResolvedNodeText(node1, r'''
GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@35
@ -66,7 +66,7 @@ GuardedPattern
final node2 = findNode.caseClause('case final b').guardedPattern;
assertResolvedNodeText(node2, r'''
GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: final
name: b
declaredElement: hasImplicitType isFinal b@60
@ -83,13 +83,13 @@ void f(int x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@35
type: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@46
@ -112,13 +112,13 @@ BinaryPattern
literal: 0
staticType: int
operator: &&
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@40
type: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@51
@ -137,7 +137,7 @@ void f(int x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@35
@ -166,7 +166,7 @@ BinaryPattern
literal: 1
staticType: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@40
@ -187,7 +187,7 @@ void f(int x) {
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@35
@ -217,13 +217,13 @@ void f(int x) {
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@35
type: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@46
@ -246,19 +246,19 @@ void f(int x) {
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@35
type: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@46
type: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@57
@ -278,7 +278,7 @@ void f(int x) {
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@35
@ -289,7 +289,7 @@ BinaryPattern
literal: 2
staticType: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@51
@ -315,7 +315,7 @@ BinaryPattern
literal: 1
staticType: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@40
@ -345,13 +345,13 @@ BinaryPattern
literal: 1
staticType: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@40
type: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@51
@ -381,7 +381,7 @@ BinaryPattern
literal: 2
staticType: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@45
@ -401,13 +401,13 @@ void f(int x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@46
type: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@57
@ -429,7 +429,7 @@ void f(int x) {
final node = findNode.singleGuardedPattern.pattern;
assertResolvedNodeText(node, r'''
BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@46
@ -461,7 +461,7 @@ BinaryPattern
literal: 1
staticType: int
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@51
@ -483,7 +483,7 @@ void f(int x) {
final node1 = findNode.switchPatternCase('case /*1*/').guardedPattern;
assertResolvedNodeText(node1, r'''
GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@52
@ -493,7 +493,7 @@ GuardedPattern
final node2 = findNode.switchPatternCase('case /*2*/').guardedPattern;
assertResolvedNodeText(node2, r'''
GuardedPattern
pattern: VariablePattern
pattern: DeclaredVariablePattern
keyword: final
name: a
declaredElement: hasImplicitType isFinal a@76

View file

@ -61,10 +61,10 @@ PatternVariableDeclaration
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: BinaryPattern
leftOperand: VariablePattern
leftOperand: DeclaredVariablePattern
name: _
operator: ||
rightOperand: VariablePattern
rightOperand: DeclaredVariablePattern
name: _
rightParenthesis: )
equals: =
@ -91,7 +91,7 @@ PatternVariableDeclaration
pattern: ParenthesizedPattern
leftParenthesis: (
pattern: PostfixPattern
operand: VariablePattern
operand: DeclaredVariablePattern
name: _
operator: ?
rightParenthesis: )

View file

@ -375,6 +375,29 @@ class ResolvedAstPrinter extends ThrowingAstVisitor<void> {
});
}
@override
void visitDeclaredVariablePattern(
covariant DeclaredVariablePatternImpl node,
) {
_writeln('DeclaredVariablePattern');
_withIndent(() {
_writeNamedChildEntities(node);
if (_withResolution) {
final element = node.declaredElement;
if (element != null) {
_sink.write(_indent);
_sink.write('declaredElement: ');
_writeIf(element.hasImplicitType, 'hasImplicitType ');
_writeIf(element.isFinal, 'isFinal ');
_sink.writeln('${element.name}@${element.nameOffset}');
_withIndent(() {
_writeType('type', element.type);
});
}
}
});
}
@override
void visitDefaultFormalParameter(DefaultFormalParameter node) {
_writeln('DefaultFormalParameter');
@ -1488,27 +1511,6 @@ class ResolvedAstPrinter extends ThrowingAstVisitor<void> {
});
}
@override
void visitVariablePattern(covariant VariablePatternImpl node) {
_writeln('VariablePattern');
_withIndent(() {
_writeNamedChildEntities(node);
if (_withResolution) {
final element = node.declaredElement;
if (element != null) {
_sink.write(_indent);
_sink.write('declaredElement: ');
_writeIf(element.hasImplicitType, 'hasImplicitType ');
_writeIf(element.isFinal, 'isFinal ');
_sink.writeln('${element.name}@${element.nameOffset}');
_withIndent(() {
_writeType('type', element.type);
});
}
}
});
}
@override
void visitWhenClause(WhenClause node) {
_writeln('WhenClause');