Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1492)

Unified Diff: pkg/analysis_server/lib/src/domains/analysis/navigation.dart

Issue 1403373018: Fix for regions reported with multiple targets. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analysis_server/test/analysis/navigation_collector_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/domains/analysis/navigation.dart
diff --git a/pkg/analysis_server/lib/src/domains/analysis/navigation.dart b/pkg/analysis_server/lib/src/domains/analysis/navigation.dart
index 9911d9292f0ec032a28b366da661319790b171e3..c9913533e37961ab19dbc0b0fd3096c0ace9824e 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/navigation.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/navigation.dart
@@ -13,7 +13,7 @@ import 'package:analysis_server/src/protocol_server.dart' as protocol;
import 'package:analyzer/src/generated/engine.dart'
show AnalysisContext, AnalysisEngine;
import 'package:analyzer/src/generated/java_engine.dart' show CaughtException;
-import 'package:analyzer/src/generated/source.dart' show Source;
+import 'package:analyzer/src/generated/source.dart' show Source, SourceRange;
/**
* Compute all known navigation information for the given part of [source].
@@ -32,7 +32,7 @@ NavigationCollectorImpl computeNavigation(AnalysisServer server,
new CaughtException(exception, stackTrace));
}
}
- collector.sortRegions();
+ collector.createRegions();
return collector;
}
@@ -44,6 +44,8 @@ class NavigationCollectorImpl implements NavigationCollector {
* A list of navigation regions.
*/
final List<protocol.NavigationRegion> regions = <protocol.NavigationRegion>[];
+ final Map<SourceRange, List<int>> regionMap =
+ new HashMap<SourceRange, List<int>>();
/**
* All the unique targets referenced by [regions].
@@ -61,13 +63,24 @@ class NavigationCollectorImpl implements NavigationCollector {
@override
void addRegion(int offset, int length, protocol.ElementKind targetKind,
protocol.Location targetLocation) {
+ SourceRange range = new SourceRange(offset, length);
+ // prepare targets
+ List<int> targets = regionMap[range];
+ if (targets == null) {
+ targets = <int>[];
+ regionMap[range] = targets;
+ }
+ // add new target
int targetIndex = _addTarget(targetKind, targetLocation);
- protocol.NavigationRegion region =
- new protocol.NavigationRegion(offset, length, <int>[targetIndex]);
- regions.add(region);
+ targets.add(targetIndex);
}
- void sortRegions() {
+ void createRegions() {
+ regionMap.forEach((range, targets) {
+ protocol.NavigationRegion region =
+ new protocol.NavigationRegion(range.offset, range.length, targets);
+ regions.add(region);
+ });
regions.sort((a, b) {
return a.offset - b.offset;
});
« no previous file with comments | « no previous file | pkg/analysis_server/test/analysis/navigation_collector_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698