Skip to content

Commit de09d3c

Browse files
FMorscheldart-scoped@luci-project-accounts.iam.gserviceaccount.com
authored andcommitted
[DAS] Fixes Go To Definition and occurrences for extension type parameter
Fixes: #63898 Fixes: #63910 Change-Id: I1a07522926c25641ccda8230451ff6403b17ed46 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/528300 Reviewed-by: Keerti Parthasarathy <keertip@google.com> Commit-Queue: Keerti Parthasarathy <keertip@google.com> Auto-Submit: FMorschel <git@fmorschel.dev> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
1 parent 354c0d6 commit de09d3c

5 files changed

Lines changed: 65 additions & 2 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ class DartUnitOccurrencesComputerVisitor extends GeneralizingAstVisitor<void> {
283283
return;
284284
}
285285

286-
var element = node.writeOrReadElement;
286+
var element = node.writeOrReadElement?.baseElement;
287287
if (element != null) {
288288
_addOccurrence(element, node.token);
289289
}

pkg/analysis_server/test/analysis/notification_occurrences_test.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,14 @@ void f(E e) {
318318
''');
319319
}
320320

321+
Future<void> test_extensionType_parameter() async {
322+
await assertOccurrences(kind: ElementKind.FIELD, '''
323+
extension type E(int /*[0*/it/*0]*/) {
324+
int get value => /*[1*/it/*1]*/;
325+
}
326+
''');
327+
}
328+
321329
Future<void> test_extensionType_setter() async {
322330
await assertOccurrences(kind: ElementKind.SETTER, '''
323331
extension type E(int it) {

pkg/analysis_server/test/lsp/definition_test.dart

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,30 @@ class A {
517517
await testContents(contents);
518518
}
519519

520+
Future<void> test_constructor_newImplicit() async {
521+
var contents = '''
522+
class [!WithGeneric!]<T> {}
523+
524+
void fn() {
525+
final val = WithGeneric<String>.n^ew();
526+
}
527+
''';
528+
529+
await testContents(contents);
530+
}
531+
532+
Future<void> test_constructor_newImplicit_dotShorthands() async {
533+
var contents = '''
534+
class [!WithGeneric!]<T> {}
535+
536+
void fn() {
537+
final WithGeneric<String> val = .n^ew();
538+
}
539+
''';
540+
541+
await testContents(contents);
542+
}
543+
520544
Future<void> test_constructor_redirectingSuper_wildcards() async {
521545
var contents = '''
522546
class A {
@@ -662,6 +686,26 @@ extension [!StringExtension!] on String {
662686
await testContents(contents);
663687
}
664688

689+
Future<void> test_extensionType_parameter() async {
690+
var contents = '''
691+
extension type E(int [!it!]) {
692+
int get value => it^;
693+
}
694+
''';
695+
696+
await testContents(contents);
697+
}
698+
699+
Future<void> test_extensionType_parameter_ofTypeParameter() async {
700+
var contents = '''
701+
extension type E<T>(T [!it!]) {
702+
T get value => it^;
703+
}
704+
''';
705+
706+
await testContents(contents);
707+
}
708+
665709
Future<void> test_field_underscore() async {
666710
var contents = '''
667711
class A {

pkg/analysis_server/test/lsp/document_highlights_test.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -600,6 +600,17 @@ void f(E e) {
600600
);
601601
}
602602

603+
Future<void> test_extensionType_parameter() async {
604+
await _testMarkedContent(
605+
'''
606+
extension type E(int /*[0*/it/*0]*/) {
607+
int get value => /*[1*/it/*1]*/;
608+
}
609+
''',
610+
kinds: {0: .Write, 1: .Read},
611+
);
612+
}
613+
603614
Future<void> test_extensionType_setter() async {
604615
await _testMarkedContent('''
605616
extension type E(int it) {

pkg/analyzer_plugin/lib/src/utilities/navigation/navigation_dart.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -699,7 +699,7 @@ class _DartNavigationComputerVisitor extends RecursiveAstVisitor<void> {
699699

700700
@override
701701
void visitSimpleIdentifier(SimpleIdentifier node) {
702-
var element = node.writeOrReadElement;
702+
var element = node.writeOrReadElement?.baseElement;
703703
if (element case PrefixElement(:var fragments, :var name)) {
704704
for (var fragment in fragments) {
705705
computer._addRegionForFragmentRange(

0 commit comments

Comments
 (0)