Issue 24599. Fix for requesting navigation for directives.
R=brianwilkerson@google.com
BUG= https://github.com/dart-lang/sdk/issues/24599
Review URL: https://codereview.chromium.org/1405033002 .
diff --git a/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
index 7f58ad7..a4971ce 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
@@ -58,8 +58,7 @@
if (element.location == null) {
return;
}
- protocol.ElementKind kind =
- protocol.convertElementKind(element.kind);
+ protocol.ElementKind kind = protocol.convertElementKind(element.kind);
protocol.Location location = protocol.newLocation_fromElement(element);
if (location == null) {
return;
@@ -326,9 +325,11 @@
return;
}
// The node starts or ends in the range.
- if (isInRange(node.offset) || isInRange(node.end)) {
- node.accept(visitor);
- return;
+ if (node is! CompilationUnit) {
+ if (isInRange(node.offset) || isInRange(node.end) || node is Directive) {
+ node.accept(visitor);
+ return;
+ }
}
// Go deeper.
super.visitNode(node);
diff --git a/pkg/analysis_server/test/analysis/get_navigation_test.dart b/pkg/analysis_server/test/analysis/get_navigation_test.dart
index 34a8010..fb49169 100644
--- a/pkg/analysis_server/test/analysis/get_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/get_navigation_test.dart
@@ -58,6 +58,48 @@
return _checkInvalid(file, -1, -1);
}
+ test_issue24599_importDirective() async {
+ addTestFile('''
+import 'dart:math';
+
+main() {
+}''');
+ await waitForTasksFinished();
+ await _getNavigation(testFile, 0, 17);
+ expect(regions, hasLength(1));
+ assertHasRegionString("'dart:math'");
+ expect(testTargets, hasLength(1));
+ expect(testTargets[0].kind, ElementKind.LIBRARY);
+ }
+
+ test_issue24599_importKeyword() async {
+ addTestFile('''
+import 'dart:math';
+
+main() {
+}''');
+ await waitForTasksFinished();
+ await _getNavigation(testFile, 0, 1);
+ expect(regions, hasLength(1));
+ assertHasRegionString("'dart:math'");
+ expect(testTargets, hasLength(1));
+ expect(testTargets[0].kind, ElementKind.LIBRARY);
+ }
+
+ test_issue24599_importUri() async {
+ addTestFile('''
+import 'dart:math';
+
+main() {
+}''');
+ await waitForTasksFinished();
+ await _getNavigation(testFile, 7, 11);
+ expect(regions, hasLength(1));
+ assertHasRegionString("'dart:math'");
+ expect(testTargets, hasLength(1));
+ expect(testTargets[0].kind, ElementKind.LIBRARY);
+ }
+
test_multipleRegions() async {
addTestFile('''
main() {
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index 4accf97..5e66eca 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -26,6 +26,7 @@
NavigationRegion testRegion;
List<int> testTargetIndexes;
+ List<NavigationTarget> testTargets;
NavigationTarget testTarget;
/**
@@ -33,8 +34,6 @@
* at [offset] and with the given [length].
*/
void assertHasFileTarget(String file, int offset, int length) {
- List<NavigationTarget> testTargets =
- testTargetIndexes.map((int index) => targets[index]).toList();
for (NavigationTarget target in testTargets) {
if (targetFiles[target.fileIndex] == file &&
target.offset == offset &&
@@ -167,6 +166,7 @@
}
testRegion = region;
testTargetIndexes = region.targets;
+ testTargets = testTargetIndexes.map((i) => targets[i]).toList();
return;
}
}