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>
This commit is contained in:
Konstantin Shcheglov
2023-08-30 18:56:06 +00:00
parent f722afcf0c
commit ca608ee54e
3 changed files with 28 additions and 0 deletions
@@ -108,6 +108,11 @@ class _ElementMapper extends GeneralizingAstVisitor<Element> {
return node.element;
}
@override
Element? visitExtensionTypeDeclaration(ExtensionTypeDeclaration node) {
return node.declaredElement;
}
@override
Element? visitFormalParameter(FormalParameter node) {
return node.declaredElement;
@@ -57,6 +57,8 @@ class FindNode {
ExtendsClause get singleExtendsClause => _single();
ExtensionDeclaration get singleExtensionDeclaration => _single();
ExtensionTypeDeclaration get singleExtensionTypeDeclaration => _single();
FieldDeclaration get singleFieldDeclaration => _single();
@@ -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');