Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 64a8d2a

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
Fix for indexing constructor references in documentation comments.
Bug: Dart-Code/Dart-Code#2816 Change-Id: I4515b6887f5d8bd93fc6ba59812c5a9ec14f0d3c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/181260 Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Konstantin Shcheglov <[email protected]>
1 parent a2a9bbb commit 64a8d2a

File tree

3 files changed

+48
-12
lines changed

3 files changed

+48
-12
lines changed

pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ class A {
9595

9696
Future<void> test_createChange_add() async {
9797
await indexTestUnit('''
98+
/// Documentation for [new A]
9899
class A {
99100
A() {} // marker
100101
factory A._() = A;
@@ -114,6 +115,7 @@ main() {
114115
// validate change
115116
refactoring.newName = 'newName';
116117
return assertSuccessfulRefactoring('''
118+
/// Documentation for [new A.newName]
117119
class A {
118120
A.newName() {} // marker
119121
factory A._() = A.newName;
@@ -129,6 +131,7 @@ main() {
129131

130132
Future<void> test_createChange_add_toSynthetic() async {
131133
await indexTestUnit('''
134+
/// Documentation for [new A]
132135
class A {
133136
}
134137
class B extends A {
@@ -146,6 +149,7 @@ main() {
146149
// validate change
147150
refactoring.newName = 'newName';
148151
return assertSuccessfulRefactoring('''
152+
/// Documentation for [new A.newName]
149153
class A {
150154
A.newName();
151155
}
@@ -160,6 +164,7 @@ main() {
160164

161165
Future<void> test_createChange_change() async {
162166
await indexTestUnit('''
167+
/// Documentation for [A.test] and [new A.test]
163168
class A {
164169
A.test() {} // marker
165170
factory A._() = A.test;
@@ -179,6 +184,7 @@ main() {
179184
// validate change
180185
refactoring.newName = 'newName';
181186
return assertSuccessfulRefactoring('''
187+
/// Documentation for [A.newName] and [new A.newName]
182188
class A {
183189
A.newName() {} // marker
184190
factory A._() = A.newName;
@@ -194,6 +200,7 @@ main() {
194200

195201
Future<void> test_createChange_remove() async {
196202
await indexTestUnit('''
203+
/// Documentation for [A.test] and [new A.test]
197204
class A {
198205
A.test() {} // marker
199206
factory A._() = A.test;
@@ -213,6 +220,7 @@ main() {
213220
// validate change
214221
refactoring.newName = '';
215222
return assertSuccessfulRefactoring('''
223+
/// Documentation for [A] and [new A]
216224
class A {
217225
A() {} // marker
218226
factory A._() = A;

pkg/analyzer/lib/src/dart/analysis/index.dart

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,28 @@ class _IndexContributor extends GeneralizingAstVisitor {
583583
super.visitClassTypeAlias(node);
584584
}
585585

586+
@override
587+
visitCommentReference(CommentReference node) {
588+
var identifier = node.identifier;
589+
var element = identifier.staticElement;
590+
if (element is ConstructorElement) {
591+
if (identifier is PrefixedIdentifier) {
592+
var offset = identifier.prefix.end;
593+
var length = identifier.end - offset;
594+
recordRelationOffset(
595+
element, IndexRelationKind.IS_REFERENCED_BY, offset, length, true);
596+
return;
597+
} else {
598+
var offset = identifier.end;
599+
recordRelationOffset(
600+
element, IndexRelationKind.IS_REFERENCED_BY, offset, 0, true);
601+
return;
602+
}
603+
}
604+
605+
return super.visitCommentReference(node);
606+
}
607+
586608
@override
587609
void visitConstructorFieldInitializer(ConstructorFieldInitializer node) {
588610
SimpleIdentifier fieldName = node.fieldName;

pkg/analyzer/test/src/dart/analysis/index_test.dart

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -602,33 +602,39 @@ part 'b.dart';
602602

603603
test_isReferencedBy_ConstructorElement() async {
604604
await _indexTestUnit('''
605+
/// [new A.foo] 1
606+
/// [A.foo] 2
607+
/// [new A] 3
605608
class A implements B {
606609
A() {}
607610
A.foo() {}
608611
}
609612
class B extends A {
610-
B() : super(); // 1
611-
B.foo() : super.foo(); // 2
612-
factory B.bar() = A.foo; // 3
613+
B() : super(); // 4
614+
B.foo() : super.foo(); // 5
615+
factory B.bar() = A.foo; // 6
613616
}
614617
main() {
615-
new A(); // 4
616-
new A.foo(); // 5
618+
new A(); // 7
619+
new A.foo(); // 8
617620
}
618621
''');
619622
var constA = findElement.unnamedConstructor('A');
620623
var constA_foo = findElement.constructor('foo', of: 'A');
621624
// A()
622625
assertThat(constA)
623-
..hasRelationCount(2)
624-
..isReferencedAt('(); // 1', true, length: 0)
625-
..isReferencedAt('(); // 4', true, length: 0);
626+
..hasRelationCount(3)
627+
..isReferencedAt('] 3', true, length: 0)
628+
..isReferencedAt('(); // 4', true, length: 0)
629+
..isReferencedAt('(); // 7', true, length: 0);
626630
// A.foo()
627631
assertThat(constA_foo)
628-
..hasRelationCount(3)
629-
..isReferencedAt('.foo(); // 2', true, length: 4)
630-
..isReferencedAt('.foo; // 3', true, length: 4)
631-
..isReferencedAt('.foo(); // 5', true, length: 4);
632+
..hasRelationCount(5)
633+
..isReferencedAt('.foo] 1', true, length: 4)
634+
..isReferencedAt('.foo] 2', true, length: 4)
635+
..isReferencedAt('.foo(); // 5', true, length: 4)
636+
..isReferencedAt('.foo; // 6', true, length: 4)
637+
..isReferencedAt('.foo(); // 8', true, length: 4);
632638
}
633639

634640
test_isReferencedBy_ConstructorElement_classTypeAlias() async {

0 commit comments

Comments
 (0)