Skip to content

Commit 5b09a3d

Browse files
DanTupCommit Queue
authored andcommitted
[analysis_server] Include Class/Enum/Mixin declaration names in occurrences
Fixes Dart-Code/Dart-Code#4376. Change-Id: I55cb9ca7947c828137e5e01c9b0fef4f7afe7ed4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/281182 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Brian Wilkerson <[email protected]>
1 parent 4e7d71b commit 5b09a3d

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,27 @@ void addDartOccurrences(OccurrencesCollector collector, CompilationUnit unit) {
2626
class _DartUnitOccurrencesComputerVisitor extends RecursiveAstVisitor<void> {
2727
final Map<Element, List<int>> elementsOffsets = <Element, List<int>>{};
2828

29+
@override
30+
void visitClassDeclaration(ClassDeclaration node) {
31+
_addOccurrence(node.declaredElement!, node.name.offset);
32+
33+
super.visitClassDeclaration(node);
34+
}
35+
2936
@override
3037
void visitEnumConstantDeclaration(EnumConstantDeclaration node) {
3138
_addOccurrence(node.declaredElement!, node.name.offset);
3239

3340
super.visitEnumConstantDeclaration(node);
3441
}
3542

43+
@override
44+
void visitEnumDeclaration(EnumDeclaration node) {
45+
_addOccurrence(node.declaredElement!, node.name.offset);
46+
47+
super.visitEnumDeclaration(node);
48+
}
49+
3650
@override
3751
void visitFieldFormalParameter(FieldFormalParameter node) {
3852
final declaredElement = node.declaredElement;
@@ -58,6 +72,13 @@ class _DartUnitOccurrencesComputerVisitor extends RecursiveAstVisitor<void> {
5872
super.visitMethodDeclaration(node);
5973
}
6074

75+
@override
76+
void visitMixinDeclaration(MixinDeclaration node) {
77+
_addOccurrence(node.declaredElement!, node.name.offset);
78+
79+
super.visitMixinDeclaration(node);
80+
}
81+
6182
@override
6283
void visitSimpleFormalParameter(SimpleFormalParameter node) {
6384
final nameToken = node.name;

pkg/analysis_server/test/analysis/notification_occurrences_test.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ void f(E e) {
126126
expect(testOccurrences.element.name, 'E');
127127
assertHasOffset('E e');
128128
assertHasOffset('E.v');
129+
assertHasOffset('E {');
129130
}
130131

131132
Future<void> test_enum_constant() async {
@@ -301,6 +302,20 @@ void f() {
301302
assertHasOffset('mmm(); // b');
302303
}
303304

305+
Future<void> test_mixin() async {
306+
addTestFile('''
307+
mixin A { // 1
308+
void aaa() {}
309+
}
310+
class B with A {}
311+
''');
312+
await prepareOccurrences();
313+
assertHasRegion('A { // 1');
314+
expect(testOccurrences.element.kind, ElementKind.MIXIN);
315+
expect(testOccurrences.element.name, 'A');
316+
assertHasOffset('A {}');
317+
}
318+
304319
Future<void> test_parameter_named() async {
305320
addTestFile('''
306321
void f(int aaa, int bbb, {int? ccc, int? ddd}) {
@@ -381,6 +396,18 @@ int VVV = 4;
381396
assertHasOffset('int VVV');
382397
}
383398

399+
Future<void> test_type_class_definition() async {
400+
addTestFile('''
401+
class A {}
402+
A a;
403+
''');
404+
await prepareOccurrences();
405+
assertHasRegion('A a');
406+
expect(testOccurrences.element.kind, ElementKind.CLASS);
407+
expect(testOccurrences.element.name, 'A');
408+
assertHasOffset('A {}');
409+
}
410+
384411
Future<void> test_type_dynamic() async {
385412
addTestFile('''
386413
void f() {

0 commit comments

Comments
 (0)