Skip to content

Commit b40c308

Browse files
srawlinsCommit Queue
authored andcommitted
DAS: Fix ElementLocator for the SimpleIdentifier under a ConstructorSelector
With the `nodeCovering` utility, ElementLocator is given the SimpleIdentifier _under_ a ConstructorSelector, in code like: ```dart enum E { one, two.^new(); } ``` ElementLocator previously did not handle this SimpleIdentifier correctly. Change-Id: I32296dea2aaef6df33e56da23b77a4f83d06c9e6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/423063 Commit-Queue: Samuel Rawlins <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent adad55f commit b40c308

File tree

4 files changed

+15
-7
lines changed

4 files changed

+15
-7
lines changed

pkg/analysis_server/lib/src/cider/rename.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import 'package:analysis_server/src/utilities/change_builder.dart';
1212
import 'package:analyzer/dart/ast/ast.dart';
1313
import 'package:analyzer/dart/element/element2.dart';
1414
import 'package:analyzer/source/line_info.dart';
15-
import 'package:analyzer/src/dart/ast/utilities.dart';
1615
import 'package:analyzer/src/dart/micro/resolve_file.dart';
1716
import 'package:analyzer/src/dart/micro/utils.dart';
1817
import 'package:analyzer/src/generated/java_core.dart';
@@ -425,7 +424,7 @@ class CiderRenameComputer {
425424
var lineInfo = resolvedUnit.lineInfo;
426425
var offset = lineInfo.getOffsetOfLine(line) + column;
427426

428-
var node = NodeLocator(offset).searchWithin(resolvedUnit.unit);
427+
var node = resolvedUnit.unit.nodeCovering(offset: offset);
429428
var element = getElementOfNode2(node);
430429

431430
if (node == null || element == null) {

pkg/analysis_server/lib/src/services/refactoring/legacy/refactoring_manager.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import 'package:analyzer/dart/ast/ast.dart';
2020
import 'package:analyzer/dart/element/element2.dart';
2121
import 'package:analyzer/src/dart/ast/utilities.dart';
2222
import 'package:analyzer/src/utilities/cancellation.dart';
23+
import 'package:analyzer/utilities/extensions/ast.dart';
2324

2425
int test_resetCount = 0;
2526

@@ -315,7 +316,7 @@ class RefactoringManager {
315316
} else if (kind == RefactoringKind.RENAME) {
316317
var resolvedUnit = await server.getResolvedUnit(file);
317318
if (resolvedUnit != null) {
318-
var node = NodeLocator(offset).searchWithin(resolvedUnit.unit);
319+
var node = resolvedUnit.unit.nodeCovering(offset: offset);
319320
var element = server.getElementOfNode(node, useMockForImport: true);
320321
if (node is RepresentationDeclaration) {
321322
var extensionType = node.parent;

pkg/analysis_server/test/edit/refactoring_test.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2210,8 +2210,8 @@ enum E {
22102210
''',
22112211
feedbackValidator: (feedback) {
22122212
var renameFeedback = feedback as RenameFeedback;
2213-
expect(renameFeedback.offset, 17);
2214-
expect(renameFeedback.length, 4);
2213+
expect(renameFeedback.offset, 18);
2214+
expect(renameFeedback.length, 3);
22152215
},
22162216
);
22172217
}
@@ -2237,8 +2237,8 @@ enum E {
22372237
''',
22382238
feedbackValidator: (feedback) {
22392239
var renameFeedback = feedback as RenameFeedback;
2240-
expect(renameFeedback.offset, 24);
2241-
expect(renameFeedback.length, 5);
2240+
expect(renameFeedback.offset, 25);
2241+
expect(renameFeedback.length, 4);
22422242
},
22432243
);
22442244
}

pkg/analyzer/lib/src/dart/ast/element_locator.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,14 @@ class _ElementMapper2 extends GeneralizingAstVisitor<Element2> {
161161
} else if (parent.name == node.endToken) {
162162
return parent.declaredFragment?.element;
163163
}
164+
} else if (parent is ConstructorSelector) {
165+
var parent2 = parent.parent;
166+
if (parent2 is EnumConstantArguments) {
167+
var parent3 = parent2.parent;
168+
if (parent3 is EnumConstantDeclaration) {
169+
return parent3.constructorElement2;
170+
}
171+
}
164172
} else if (parent is LibraryIdentifier) {
165173
var grandParent = parent.parent;
166174
if (grandParent is LibraryDirective) {

0 commit comments

Comments
 (0)