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');