Use writeDeclaredElement() for more nodes.
Change-Id: I904ca1c34189234614b390675aa67cb6af8bc286
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/288321
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/dart/ast/ast.dart b/pkg/analyzer/lib/dart/ast/ast.dart
index cf2b217..4e98a1c 100644
--- a/pkg/analyzer/lib/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/dart/ast/ast.dart
@@ -1963,6 +1963,9 @@
/// not be resolved.
ConstructorElement? get constructorElement;
+ @override
+ FieldElement? get declaredElement;
+
/// Return the name of the constant.
Token get name;
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index b38a91d..e89ba3c 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -3983,16 +3983,12 @@
} else if (nameNode is EnumConstantArguments) {
var parent = nameNode.parent;
if (parent is EnumConstantDeclaration) {
- var declaredElement = parent.declaredElement;
- if (declaredElement is VariableElement) {
- name = declaredElement.type.getDisplayString(withNullability: true);
- }
- }
- } else if (nameNode is EnumConstantDeclaration) {
- var declaredElement = nameNode.declaredElement;
- if (declaredElement is VariableElement) {
+ var declaredElement = parent.declaredElement!;
name = declaredElement.type.getDisplayString(withNullability: true);
}
+ } else if (nameNode is EnumConstantDeclaration) {
+ var declaredElement = nameNode.declaredElement!;
+ name = declaredElement.type.getDisplayString(withNullability: true);
} else if (nameNode is Annotation) {
var nameNodeName = nameNode.name;
name = nameNodeName is PrefixedIdentifier
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index e84591e..bff9883 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -3087,6 +3087,7 @@
staticType: Null
semicolon: ;
declaredElement: self::@function::f
+ type: T Function<T>(T)
staticType: T Function<T>(T)
declaredElement: self::@function::f
type: T Function<T>(T)
@@ -3129,6 +3130,7 @@
staticType: Null*
semicolon: ;
declaredElement: self::@function::f
+ type: T* Function<T>(T*)*
staticType: T* Function<T>(T*)*
declaredElement: self::@function::f
type: T* Function<T>(T*)*
@@ -3188,6 +3190,7 @@
staticType: Null
semicolon: ;
declaredElement: self::@function::f
+ type: T Function<T extends num>(T)
staticType: T Function<T extends num>(T)
declaredElement: self::@function::f
type: T Function<T extends num>(T)
@@ -3237,6 +3240,7 @@
staticType: Null*
semicolon: ;
declaredElement: self::@function::f
+ type: T* Function<T extends num*>(T*)*
staticType: T* Function<T extends num*>(T*)*
declaredElement: self::@function::f
type: T* Function<T extends num*>(T*)*
diff --git a/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart b/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
index bb161fa..2255127 100644
--- a/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/for_statement_test.dart
@@ -51,6 +51,7 @@
type: int
name: v
declaredElement: v@56
+ type: int
inKeyword: in
iterable: MethodInvocation
methodName: SimpleIdentifier
@@ -91,7 +92,8 @@
loopVariable: DeclaredIdentifier
keyword: var
name: v
- declaredElement: v@22
+ declaredElement: hasImplicitType v@22
+ type: dynamic
inKeyword: in
iterable: SimpleIdentifier
token: <empty> <synthetic>
@@ -133,6 +135,7 @@
type: dynamic
name: v
declaredElement: v@42
+ type: dynamic
inKeyword: in
iterable: SimpleIdentifier
token: values
@@ -171,7 +174,8 @@
loopVariable: DeclaredIdentifier
keyword: var
name: v
- declaredElement: v@56
+ declaredElement: hasImplicitType v@56
+ type: Object?
inKeyword: in
iterable: MethodInvocation
methodName: SimpleIdentifier
@@ -209,7 +213,8 @@
loopVariable: DeclaredIdentifier
keyword: var
name: v
- declaredElement: v@42
+ declaredElement: hasImplicitType v@42
+ type: int
inKeyword: in
iterable: SimpleIdentifier
token: values
@@ -246,7 +251,8 @@
loopVariable: DeclaredIdentifier
keyword: var
name: v
- declaredElement: v@38
+ declaredElement: hasImplicitType v@38
+ type: int
inKeyword: in
iterable: SimpleIdentifier
token: values
@@ -283,7 +289,8 @@
loopVariable: DeclaredIdentifier
keyword: var
name: v
- declaredElement: v@52
+ declaredElement: hasImplicitType v@52
+ type: int
inKeyword: in
iterable: SimpleIdentifier
token: values
@@ -322,7 +329,8 @@
loopVariable: DeclaredIdentifier
keyword: var
name: x
- declaredElement: x@39
+ declaredElement: hasImplicitType x@39
+ type: int
inKeyword: in
iterable: PrefixedIdentifier
prefix: SimpleIdentifier
diff --git a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
index b5c30d7..40bff5a 100644
--- a/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/function_reference_test.dart
@@ -4033,6 +4033,7 @@
leftBracket: {
rightBracket: }
declaredElement: @36
+ type: Null Function<T>(T)
staticType: Null Function<T>(T)
staticType: Null Function(int)
typeArgumentTypes
diff --git a/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart b/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
index 9824616..0b7b63a 100644
--- a/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/top_level_variable_test.dart
@@ -72,6 +72,7 @@
staticElement: <null>
staticType: dynamic
declaredElement: @99
+ type: int Function(Object?)
parameter: ParameterMember
base: root::@parameter::b
substitution: {T: String}
@@ -136,6 +137,7 @@
staticElement: dart:core::@class::String::@getter::length
staticType: int
declaredElement: @107
+ type: int Function(String)
parameter: ParameterMember
base: root::@parameter::b
substitution: {T: String}
diff --git a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
index 3b328bb..b1a9d7c 100644
--- a/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
+++ b/pkg/analyzer/test/src/summary/resolved_ast_printer.dart
@@ -244,9 +244,7 @@
_writeln('ClassDeclaration');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -255,9 +253,7 @@
_writeln('ClassTypeAlias');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -322,9 +318,7 @@
_writeln('ConstructorDeclaration');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -377,9 +371,7 @@
_writeln('DeclaredIdentifier');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -412,7 +404,8 @@
_writeln('DefaultFormalParameter');
_withIndent(() {
_writeNamedChildEntities(node);
- _writeDeclaredElement(node, node.declaredElement);
+ _assertFormalParameterDeclaredElement(node);
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -469,7 +462,7 @@
_writeNamedChildEntities(node);
if (_withResolution) {
_writeElement('constructorElement', node.constructorElement);
- _writeElement('declaredElement', node.declaredElement);
+ _writeDeclaredElement(node.declaredElement);
}
});
}
@@ -479,9 +472,7 @@
_writeln('EnumDeclaration');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -523,9 +514,7 @@
_writeln('ExtensionDeclaration');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -545,9 +534,7 @@
_writeln('FieldDeclaration');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -556,7 +543,8 @@
_writeln('FieldFormalParameter');
_withIndent(() {
_writeNamedChildEntities(node);
- _writeDeclaredElement(node, node.declaredElement);
+ _assertFormalParameterDeclaredElement(node);
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -637,7 +625,7 @@
_writeln('FunctionDeclaration');
_withIndent(() {
_writeNamedChildEntities(node);
- _writeDeclaredElement(node, node.declaredElement);
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -654,9 +642,7 @@
_writeln('FunctionExpression');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
_writeParameterElement(node);
_writeType('staticType', node.staticType);
});
@@ -690,9 +676,7 @@
_writeln('FunctionTypeAlias');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -701,7 +685,8 @@
_writeln('FunctionTypedFormalParameter');
_withIndent(() {
_writeNamedChildEntities(node);
- _writeDeclaredElement(node, node.declaredElement);
+ _assertFormalParameterDeclaredElement(node);
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -725,9 +710,7 @@
_writeln('GenericTypeAlias');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -954,7 +937,7 @@
_writeln('MethodDeclaration');
_withIndent(() {
_writeNamedChildEntities(node);
- _writeDeclaredElement(node, node.declaredElement);
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -975,9 +958,7 @@
_writeln('MixinDeclaration');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -1308,7 +1289,7 @@
_writeln('SimpleFormalParameter');
_withIndent(() {
_writeNamedChildEntities(node);
- _writeDeclaredElement(node, node.declaredElement);
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -1380,7 +1361,8 @@
_writeln('SuperFormalParameter');
_withIndent(() {
_writeNamedChildEntities(node);
- _writeDeclaredElement(node, node.declaredElement);
+ _assertFormalParameterDeclaredElement(node);
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -1468,9 +1450,7 @@
_writeln('TopLevelVariableDeclaration');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -1505,9 +1485,7 @@
_writeln('TypeParameter');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -1524,9 +1502,7 @@
_writeln('VariableDeclaration');
_withIndent(() {
_writeNamedChildEntities(node);
- if (_withResolution) {
- _writeElement('declaredElement', node.declaredElement);
- }
+ _writeDeclaredElement(node.declaredElement);
});
}
@@ -1627,6 +1603,14 @@
}
}
+ void _assertFormalParameterDeclaredElement(FormalParameter node) {
+ if (_withResolution) {
+ final declaredElement = node.declaredElement;
+ final expected = _expectedFormalParameterElements(node);
+ _assertHasIdenticalElement(expected, declaredElement);
+ }
+ }
+
/// Check that children entities of the [node] link to each other.
void _checkChildrenEntitiesLinking(AstNode node) {
Token? lastEnd;
@@ -1745,27 +1729,33 @@
});
}
- void _writeDeclaredElement(AstNode node, Element? declaredElement) {
+ void _writeDeclaredElement(Element? element) {
if (_withResolution) {
- if (node is FormalParameter) {
- final expected = _expectedFormalParameterElements(node);
- _assertHasIdenticalElement(expected, declaredElement);
- }
-
- _writeElement('declaredElement', declaredElement);
-
- DartType type;
- if (declaredElement is ExecutableElementImpl) {
- type = declaredElement.type;
- } else if (declaredElement is VariableElement) {
- type = declaredElement.type;
+ if (element is LocalVariableElement) {
+ _sink.write(_indent);
+ _sink.write('declaredElement:');
+ _writeIf(element.hasImplicitType, ' hasImplicitType');
+ _writeIf(element.isConst, ' isConst');
+ _writeIf(element.isFinal, ' isFinal');
+ _writeIf(element.isLate, ' isLate');
+ // TODO(scheglov) This crashes.
+ // _writeIf(element.hasInitializer, ' hasInitializer');
+ _writeln(' ${element.name}@${element.nameOffset}');
+ _withIndent(() {
+ _writeType('type', element.type);
+ });
} else {
- throw StateError('Unexpected: $declaredElement');
+ _writeElement('declaredElement', element);
+ if (element is ExecutableElement) {
+ _withIndent(() {
+ _writeType('type', element.type);
+ });
+ } else if (element is ParameterElement) {
+ _withIndent(() {
+ _writeType('type', element.type);
+ });
+ }
}
-
- _withIndent(() {
- _writeType('type', type);
- });
}
}