Extension type. Support in ElementLocator.
Change-Id: Icfcaf19a5aaa3b4dfe2b9c1e0b453a261e50ef1f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/323428
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analyzer/lib/src/dart/ast/element_locator.dart b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
index 53b0762..93711c2 100644
--- a/pkg/analyzer/lib/src/dart/ast/element_locator.dart
+++ b/pkg/analyzer/lib/src/dart/ast/element_locator.dart
@@ -109,6 +109,11 @@
}
@override
+ Element? visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
+ return node.declaredElement;
+ }
+
+ @override
Element? visitFormalParameter(FormalParameter node) {
return node.declaredElement;
}
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index 4e76bdd..79bddce 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -57,6 +57,8 @@
ExtendsClause get singleExtendsClause => _single();
+ ExtensionDeclaration get singleExtensionDeclaration => _single();
+
ExtensionTypeDeclaration get singleExtensionTypeDeclaration => _single();
FieldDeclaration get singleFieldDeclaration => _single();
diff --git a/pkg/analyzer/test/src/dart/ast/element_locator_test.dart b/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
index 3510f55..8657e7d 100644
--- a/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
+++ b/pkg/analyzer/test/src/dart/ast/element_locator_test.dart
@@ -127,6 +127,20 @@
expect(element, isExportElement);
}
+ test_locate_ExtensionDeclaration() async {
+ await resolveTestCode('extension A on int {}');
+ var node = findNode.singleExtensionDeclaration;
+ var element = ElementLocator.locate(node);
+ expect(element, findElement.extension_('A'));
+ }
+
+ test_locate_ExtensionTypeDeclaration() async {
+ await resolveTestCode('extension type A(int it) {}');
+ var node = findNode.singleExtensionTypeDeclaration;
+ var element = ElementLocator.locate(node);
+ expect(element, findElement.extensionType('A'));
+ }
+
test_locate_FunctionDeclaration() async {
await resolveTestCode('int f() => 3;');
var node = findNode.functionDeclaration('f');
@@ -325,6 +339,13 @@
expect(element, isFunctionElement);
}
+ test_locate_MixinDeclaration() async {
+ await resolveTestCode('mixin A {}');
+ var node = findNode.singleMixinDeclaration;
+ var element = ElementLocator.locate(node);
+ expect(element, findElement.mixin('A'));
+ }
+
test_locate_PartOfDirective_withName() async {
var libPath = convertPath('$testPackageLibPath/lib.dart');
var partPath = convertPath('$testPackageLibPath/test.dart');