Replace ExtractorPattern.typeName/typeArguments with 'NamedType get type'.

Change-Id: Iaa19aef8f2cb8727879b0eea41c6f8220205f226
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/262501
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
Konstantin Shcheglov 2022-10-04 00:35:51 +00:00 committed by Commit Queue
parent 2cf13806b2
commit 2a43b37898
12 changed files with 284 additions and 264 deletions

View file

@ -2188,12 +2188,8 @@ abstract class ExtractorPattern implements DartPattern {
/// Return the right parenthesis.
Token get rightParenthesis;
/// Return the type arguments associated with this pattern, or `null` if no
/// type arguments were declared.
TypeArgumentList? get typeArguments;
/// The name of the type of object from which values will be extracted.
Identifier get typeName;
NamedType get type;
}
/// The declaration of one or more fields of the same type.

View file

@ -4697,24 +4697,19 @@ class ExtractorPatternImpl extends DartPatternImpl implements ExtractorPattern {
final Token rightParenthesis;
@override
final TypeArgumentListImpl? typeArguments;
@override
final IdentifierImpl typeName;
final NamedTypeImpl type;
ExtractorPatternImpl(
{required this.typeName,
required this.typeArguments,
{required this.type,
required this.leftParenthesis,
required List<RecordPatternField> fields,
required this.rightParenthesis}) {
_becomeParentOf(typeName);
_becomeParentOf(typeArguments);
_becomeParentOf(type);
_fields._initialize(this, fields);
}
@override
Token get beginToken => typeName.beginToken;
Token get beginToken => type.beginToken;
@override
Token get endToken => rightParenthesis;
@ -4724,8 +4719,7 @@ class ExtractorPatternImpl extends DartPatternImpl implements ExtractorPattern {
@override
ChildEntities get _childEntities => super._childEntities
..addNode('typeName', typeName)
..addNode('typeArguments', typeArguments)
..addNode('type', type)
..addToken('leftParenthesis', leftParenthesis)
..addNodeList('fields', fields)
..addToken('rightParenthesis', rightParenthesis);
@ -4748,8 +4742,7 @@ class ExtractorPatternImpl extends DartPatternImpl implements ExtractorPattern {
@override
void visitChildren(AstVisitor visitor) {
typeName.accept(visitor);
typeArguments?.accept(visitor);
type.accept(visitor);
fields.accept(visitor);
}
}

View file

@ -448,8 +448,7 @@ class ToSourceVisitor implements AstVisitor<void> {
@override
void visitExtractorPattern(ExtractorPattern node) {
_visitNode(node.typeName);
_visitNode(node.typeArguments);
_visitNode(node.type);
sink.write('(');
_visitNodeList(node.fields, separator: ', ');
sink.write(')');

View file

@ -558,8 +558,7 @@ class AstComparator implements AstVisitor<bool> {
@override
bool visitExtractorPattern(ExtractorPattern node) {
var other = _other as ExtractorPattern;
return isEqualNodes(node.typeName, other.typeName) &&
isEqualNodes(node.typeArguments, other.typeArguments) &&
return isEqualNodes(node.type, other.type) &&
isEqualTokens(node.leftParenthesis, other.leftParenthesis) &&
_isEqualNodeLists(node.fields, other.fields) &&
isEqualTokens(node.rightParenthesis, other.rightParenthesis);

View file

@ -3702,12 +3702,18 @@ class AstBuilder extends StackListener {
? firstIdentifier
: PrefixedIdentifierImpl(
firstIdentifier, dot, SimpleIdentifierImpl(secondIdentifierToken!));
push(ExtractorPatternImpl(
typeName: typeName,
typeArguments: typeArguments,
push(
ExtractorPatternImpl(
type: NamedTypeImpl(
name: typeName,
typeArguments: typeArguments,
question: null,
),
leftParenthesis: arguments.leftParenthesis,
fields: arguments.fields,
rightParenthesis: arguments.rightParenthesis));
rightParenthesis: arguments.rightParenthesis,
),
);
}
@override

View file

@ -59,8 +59,9 @@ void f(x) {
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -94,8 +95,9 @@ void f(x) {
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -2147,15 +2149,16 @@ void f(x) {
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
type: NamedType
name: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
''');
@ -2175,19 +2178,20 @@ void f(x) {
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: PrefixedIdentifier
prefix: SimpleIdentifier
token: async
period: .
identifier: SimpleIdentifier
token: Future
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
type: NamedType
name: PrefixedIdentifier
prefix: SimpleIdentifier
token: async
period: .
identifier: SimpleIdentifier
token: Future
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
''');
@ -2210,19 +2214,20 @@ SwitchPatternCase
keyword: case
pattern: CastPattern
pattern: ExtractorPattern
typeName: PrefixedIdentifier
prefix: SimpleIdentifier
token: async
period: .
identifier: SimpleIdentifier
token: Future
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
type: NamedType
name: PrefixedIdentifier
prefix: SimpleIdentifier
token: async
period: .
identifier: SimpleIdentifier
token: Future
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
asToken: as
@ -2252,19 +2257,20 @@ void f(x) {
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: PrefixedIdentifier
prefix: SimpleIdentifier
token: async
period: .
identifier: SimpleIdentifier
token: Future
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
type: NamedType
name: PrefixedIdentifier
prefix: SimpleIdentifier
token: async
period: .
identifier: SimpleIdentifier
token: Future
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
operator: !
@ -2286,19 +2292,20 @@ void f(x) {
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: PrefixedIdentifier
prefix: SimpleIdentifier
token: async
period: .
identifier: SimpleIdentifier
token: Future
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
type: NamedType
name: PrefixedIdentifier
prefix: SimpleIdentifier
token: async
period: .
identifier: SimpleIdentifier
token: Future
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
operator: ?
@ -2321,8 +2328,9 @@ void f(x) {
assertParsedNodeText(node, r'''
CastPattern
pattern: ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -2356,8 +2364,9 @@ void f(x) {
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -2388,8 +2397,9 @@ void f(x) {
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -2420,15 +2430,16 @@ void f(x) {
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
type: NamedType
name: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
fields
RecordPatternField
@ -3477,8 +3488,9 @@ void f(x) {
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -3509,8 +3521,9 @@ void f(x) {
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -3835,8 +3848,9 @@ void f(x) {
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -3867,8 +3881,9 @@ void f(x) {
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -4526,8 +4541,9 @@ void f(x) {
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -5139,8 +5155,9 @@ void f(x) {
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -5171,8 +5188,9 @@ void f(x) {
var node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField

View file

@ -30,8 +30,9 @@ void f(x) {
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -66,8 +67,9 @@ void f(x) {
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField

View file

@ -2,7 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/src/error/codes.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import 'context_collection_resolution.dart';
@ -32,8 +31,9 @@ void f(x) {
assertParsedNodeText(node, r'''
CastPattern
pattern: ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -68,8 +68,9 @@ void f(x) {
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -101,8 +102,9 @@ void f(x) {
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -131,15 +133,16 @@ void f(x) {
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
type: NamedType
name: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
''');
@ -160,15 +163,16 @@ void f(x) {
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
type: NamedType
name: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
operator: !
@ -190,15 +194,16 @@ void f(x) {
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
type: NamedType
name: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
operator: ?
@ -212,7 +217,7 @@ class C {
}
''');
await assertErrorsInCode(r'''
await assertNoErrorsInCode(r'''
import 'a.dart' as prefix;
void f(x) {
@ -221,20 +226,19 @@ void f(x) {
break;
}
}
''', [
error(HintCode.UNUSED_IMPORT, 7, 8),
]);
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
CastPattern
pattern: ExtractorPattern
typeName: PrefixedIdentifier
prefix: SimpleIdentifier
token: prefix
period: .
identifier: SimpleIdentifier
token: C
type: NamedType
name: PrefixedIdentifier
prefix: SimpleIdentifier
token: prefix
period: .
identifier: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -259,7 +263,7 @@ class C {
}
''');
await assertErrorsInCode(r'''
await assertNoErrorsInCode(r'''
import 'a.dart' as prefix;
void f(x) {
@ -268,20 +272,19 @@ void f(x) {
break;
}
}
''', [
error(HintCode.UNUSED_IMPORT, 7, 8),
]);
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: PrefixedIdentifier
prefix: SimpleIdentifier
token: prefix
period: .
identifier: SimpleIdentifier
token: C
type: NamedType
name: PrefixedIdentifier
prefix: SimpleIdentifier
token: prefix
period: .
identifier: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -303,7 +306,7 @@ class C {
}
''');
await assertErrorsInCode(r'''
await assertNoErrorsInCode(r'''
import 'a.dart' as prefix;
void f(x) {
@ -312,20 +315,19 @@ void f(x) {
break;
}
}
''', [
error(HintCode.UNUSED_IMPORT, 7, 8),
]);
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: PrefixedIdentifier
prefix: SimpleIdentifier
token: prefix
period: .
identifier: SimpleIdentifier
token: C
type: NamedType
name: PrefixedIdentifier
prefix: SimpleIdentifier
token: prefix
period: .
identifier: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -345,7 +347,7 @@ PostfixPattern
class C<T> {}
''');
await assertErrorsInCode(r'''
await assertNoErrorsInCode(r'''
import 'a.dart' as prefix;
void f(x) {
@ -354,54 +356,13 @@ void f(x) {
break;
}
}
''', [
error(HintCode.UNUSED_IMPORT, 7, 8),
]);
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: PrefixedIdentifier
prefix: SimpleIdentifier
token: prefix
period: .
identifier: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
''');
}
test_prefixedIdentifier_withTypeArguments_inside_nullAssert() async {
newFile('$testPackageLibPath/a.dart', r'''
class C<T> {}
''');
await assertErrorsInCode(r'''
import 'a.dart' as prefix;
void f(x) {
switch (x) {
case prefix.C<int>()!:
break;
}
}
''', [
error(HintCode.UNUSED_IMPORT, 7, 8),
]);
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: PrefixedIdentifier
type: NamedType
name: PrefixedIdentifier
prefix: SimpleIdentifier
token: prefix
period: .
@ -414,6 +375,45 @@ PostfixPattern
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
''');
}
test_prefixedIdentifier_withTypeArguments_inside_nullAssert() async {
newFile('$testPackageLibPath/a.dart', r'''
class C<T> {}
''');
await assertNoErrorsInCode(r'''
import 'a.dart' as prefix;
void f(x) {
switch (x) {
case prefix.C<int>()!:
break;
}
}
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
type: NamedType
name: PrefixedIdentifier
prefix: SimpleIdentifier
token: prefix
period: .
identifier: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
operator: !
@ -425,7 +425,7 @@ PostfixPattern
class C<T> {}
''');
await assertErrorsInCode(r'''
await assertNoErrorsInCode(r'''
import 'a.dart' as prefix;
void f(x) {
@ -434,27 +434,26 @@ void f(x) {
break;
}
}
''', [
error(HintCode.UNUSED_IMPORT, 7, 8),
]);
''');
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
PostfixPattern
operand: ExtractorPattern
typeName: PrefixedIdentifier
prefix: SimpleIdentifier
token: prefix
period: .
identifier: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
type: NamedType
name: PrefixedIdentifier
prefix: SimpleIdentifier
token: prefix
period: .
identifier: SimpleIdentifier
token: C
typeArguments: TypeArgumentList
leftBracket: <
arguments
NamedType
name: SimpleIdentifier
token: int
rightBracket: >
leftParenthesis: (
rightParenthesis: )
operator: ?

View file

@ -15,6 +15,7 @@ class NodeTextExpectationsCollector {
'ContextResolutionTest.assertDriverStateString',
'FileResolutionTest.assertStateString',
'ParserDiagnosticsTest.assertParsedNodeText',
'ResolutionTest.assertParsedNodeText',
'ResolutionTest.assertResolvedNodeText',
};

View file

@ -31,8 +31,9 @@ void f(x) {
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -64,8 +65,9 @@ void f(x) {
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -404,8 +406,9 @@ void f(x) {
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -437,8 +440,9 @@ void f(x) {
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField

View file

@ -96,8 +96,9 @@ void f(x) {
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField

View file

@ -430,8 +430,9 @@ void f(x) {
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField
@ -463,8 +464,9 @@ void f(x) {
final node = findNode.switchPatternCase('case').pattern;
assertParsedNodeText(node, r'''
ExtractorPattern
typeName: SimpleIdentifier
token: C
type: NamedType
name: SimpleIdentifier
token: C
leftParenthesis: (
fields
RecordPatternField