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

Unified Diff: pkg/analysis_server/lib/src/computer/computer_navigation.dart

Issue 766323002: Compressed/optimized navigation notification. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updates for review comments. Created 6 years 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 | « pkg/analysis_server/doc/api.html ('k') | pkg/analysis_server/lib/src/generated_protocol.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/computer/computer_navigation.dart
diff --git a/pkg/analysis_server/lib/src/computer/computer_navigation.dart b/pkg/analysis_server/lib/src/computer/computer_navigation.dart
index c2af2b516a89a4763bd94cc6e8feea1f81f8da90..ab0d8547f53b5cb462b1c4da2deb29dcb1c06b02 100644
--- a/pkg/analysis_server/lib/src/computer/computer_navigation.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_navigation.dart
@@ -4,6 +4,8 @@
library computer.navigation;
+import 'dart:collection';
+
import 'package:analysis_server/src/protocol_server.dart' as protocol;
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
@@ -16,17 +18,19 @@ import 'package:analyzer/src/generated/scanner.dart';
class DartUnitNavigationComputer {
final CompilationUnit _unit;
- final List<protocol.NavigationRegion> _regions = <protocol.NavigationRegion>[
- ];
+ final List<String> files = <String>[];
+ final Map<String, int> fileMap = new HashMap<String, int>();
+ final List<protocol.NavigationTarget> targets = <protocol.NavigationTarget>[];
+ final Map<Element, int> targetMap = new HashMap<Element, int>();
+ final List<protocol.NavigationRegion> regions = <protocol.NavigationRegion>[];
DartUnitNavigationComputer(this._unit);
/**
- * Returns the computed navigation regions, not `null`.
+ * Computes [regions], [targets] and [files].
*/
- List<protocol.NavigationRegion> compute() {
+ void compute() {
_unit.accept(new _DartUnitNavigationComputerVisitor(this));
- return new List.from(_regions);
}
void _addRegion(int offset, int length, Element element) {
@@ -39,8 +43,31 @@ class DartUnitNavigationComputer {
if (element.location == null) {
return;
}
- protocol.Element target = protocol.newElement_fromEngine(element);
- _regions.add(new protocol.NavigationRegion(offset, length, [target]));
+ int targetIndex = _addTarget(element);
+ regions.add(
+ new protocol.NavigationRegion(offset, length, <int>[targetIndex]));
+ }
+
+ int _addTarget(Element element) {
+ int index = targetMap[element];
+ if (index == null) {
+ index = targets.length;
+ protocol.NavigationTarget target =
+ protocol.newNavigationTarget_fromElement(element, _addFile);
+ targets.add(target);
+ targetMap[element] = index;
+ }
+ return index;
+ }
+
+ int _addFile(String file) {
+ int index = fileMap[file];
+ if (index == null) {
+ index = files.length;
+ files.add(file);
+ fileMap[file] = index;
+ }
+ return index;
}
void _addRegion_nodeStart_nodeEnd(AstNode a, AstNode b, Element element) {
« no previous file with comments | « pkg/analysis_server/doc/api.html ('k') | pkg/analysis_server/lib/src/generated_protocol.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698