diff --git a/pkg/analyzer/lib/src/dart/ast/element_locator.dart b/pkg/analyzer/lib/src/dart/ast/element_locator.dart index 53b0762a736..93711c27c7f 100644 --- a/pkg/analyzer/lib/src/dart/ast/element_locator.dart +++ b/pkg/analyzer/lib/src/dart/ast/element_locator.dart @@ -108,6 +108,11 @@ class _ElementMapper extends GeneralizingAstVisitor { return node.element; } + @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 4e76bddc7da..79bddce63d7 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 @@ class FindNode { 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 3510f55cc58..8657e7d7272 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 @@ enum E { 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 @@ void main() { 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');