mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 01:21:07 +00:00
Add PatternField.effectiveName
Change-Id: Icbeb5bfa8ee96fbed8f60f8b89ff7bf436579239 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/286064 Commit-Queue: Konstantin Shcheglov <scheglov@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
cfa6d0f735
commit
814eda8edc
|
@ -4277,8 +4277,13 @@ abstract class PatternAssignment implements Expression {
|
|||
/// Clients may not extend, implement or mix-in this class.
|
||||
@experimental
|
||||
abstract class PatternField implements AstNode {
|
||||
/// The element referenced explicitly by [name], or implicitly by the
|
||||
/// variable pattern inside [pattern]. Is `null` if not resolved yet,
|
||||
/// The name specified explicitly by [name], or implied by the variable
|
||||
/// pattern inside [pattern]. Always `null` if [name] is `null`. Can be `null`
|
||||
/// if [name] does not have the explicit name and [pattern] is not a variable
|
||||
/// pattern.
|
||||
String? get effectiveName;
|
||||
|
||||
/// The element referenced by [effectiveName]. Is `null` if not resolved yet,
|
||||
/// not `null` inside valid [ObjectPattern]s, always `null` inside
|
||||
/// [RecordPattern]s.
|
||||
Element? get element;
|
||||
|
|
|
@ -10455,6 +10455,16 @@ class PatternFieldImpl extends AstNodeImpl implements PatternField {
|
|||
@override
|
||||
Token get beginToken => name?.beginToken ?? pattern.beginToken;
|
||||
|
||||
@override
|
||||
String? get effectiveName {
|
||||
final nameNode = name;
|
||||
if (nameNode != null) {
|
||||
final nameToken = nameNode.name ?? pattern.variablePattern?.name;
|
||||
return nameToken?.lexeme;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@override
|
||||
Token get endToken => pattern.endToken;
|
||||
|
||||
|
|
|
@ -313,13 +313,7 @@ class PatternConverter {
|
|||
} else if (pattern is ObjectPattern) {
|
||||
Map<String, Space> fields = {};
|
||||
for (PatternField field in pattern.fields) {
|
||||
PatternFieldName? fieldName = field.name;
|
||||
String? name;
|
||||
if (fieldName?.name != null) {
|
||||
name = fieldName!.name!.lexeme;
|
||||
} else {
|
||||
name = field.element?.name;
|
||||
}
|
||||
final name = field.effectiveName;
|
||||
if (name == null) {
|
||||
// TODO(johnniwinther): How do we handle error cases?
|
||||
continue;
|
||||
|
@ -360,11 +354,7 @@ class PatternConverter {
|
|||
name = '\$${index++}';
|
||||
positional.add(cache.typeSystem.typeProvider.dynamicType);
|
||||
} else {
|
||||
if (fieldName.name != null) {
|
||||
name = fieldName.name!.lexeme;
|
||||
} else {
|
||||
name = field.pattern.variablePattern?.name.lexeme;
|
||||
}
|
||||
name = field.effectiveName;
|
||||
if (name != null) {
|
||||
named[name] = cache.typeSystem.typeProvider.dynamicType;
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue