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

Unified Diff: editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/AnalysisServerDataImpl.java

Issue 242513008: Outline view for information from analysis server. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 8 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
Index: editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/AnalysisServerDataImpl.java
diff --git a/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/AnalysisServerDataImpl.java b/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/AnalysisServerDataImpl.java
index 0e009e08e0ff0eaaffd566084b967053dc3c7c37..906a15e895a02341a1ec51efd1136c12d6303d68 100644
--- a/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/AnalysisServerDataImpl.java
+++ b/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/AnalysisServerDataImpl.java
@@ -15,6 +15,7 @@
package com.google.dart.tools.core.internal.analysis.model;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.google.dart.engine.source.Source;
@@ -22,7 +23,9 @@ import com.google.dart.server.AnalysisServer;
import com.google.dart.server.ListSourceSet;
import com.google.dart.server.NavigationRegion;
import com.google.dart.server.NotificationKind;
+import com.google.dart.server.Outline;
import com.google.dart.tools.core.analysis.model.AnalysisServerData;
+import com.google.dart.tools.core.analysis.model.AnalysisServerOutlineListener;
import java.util.Map;
import java.util.Set;
@@ -36,6 +39,7 @@ import java.util.Set;
public class AnalysisServerDataImpl implements AnalysisServerData {
private final Map<String, Map<Source, NavigationRegion[]>> navigationData = Maps.newHashMap();
private final Map<String, Set<Source>> navigationSubscriptions = Maps.newHashMap();
+ private final Map<String, Map<Source, Set<AnalysisServerOutlineListener>>> outlineSubscriptions = Maps.newHashMap();
private AnalysisServer server;
@@ -52,15 +56,6 @@ public class AnalysisServerDataImpl implements AnalysisServerData {
return sourceRegions;
}
- public void internalComputedNavigation(String contextId, Source source, NavigationRegion[] targets) {
- Map<Source, NavigationRegion[]> contextRegions = navigationData.get(contextId);
- if (contextRegions == null) {
- contextRegions = Maps.newHashMap();
- navigationData.put(contextId, contextRegions);
- }
- contextRegions.put(source, targets);
- }
-
/**
* Deletes all the data associated with the given context.
*/
@@ -91,6 +86,27 @@ public class AnalysisServerDataImpl implements AnalysisServerData {
}
@Override
+ public void subscribeOutline(String contextId, Source source,
+ AnalysisServerOutlineListener listener) {
+ Map<Source, Set<AnalysisServerOutlineListener>> sourceSubscriptions = outlineSubscriptions.get(contextId);
+ if (sourceSubscriptions == null) {
+ sourceSubscriptions = Maps.newHashMap();
+ outlineSubscriptions.put(contextId, sourceSubscriptions);
+ }
+ Set<AnalysisServerOutlineListener> subscriptions = sourceSubscriptions.get(source);
+ if (subscriptions == null) {
+ subscriptions = Sets.newHashSet();
+ sourceSubscriptions.put(source, subscriptions);
+ }
+ if (subscriptions.add(listener)) {
+ Set<Source> sourceSet = sourceSubscriptions.keySet();
+ server.subscribe(
+ contextId,
+ ImmutableMap.of(NotificationKind.OUTLINE, ListSourceSet.create(sourceSet)));
+ }
+ }
+
+ @Override
public void unsubscribeNavigation(String contextId, Source source) {
Set<Source> sources = navigationSubscriptions.get(contextId);
if (sources == null) {
@@ -102,4 +118,50 @@ public class AnalysisServerDataImpl implements AnalysisServerData {
ImmutableMap.of(NotificationKind.NAVIGATION, ListSourceSet.create(sources)));
}
}
+
+ @Override
+ public void unsubscribeOutline(String contextId, Source source,
+ AnalysisServerOutlineListener listener) {
+ Map<Source, Set<AnalysisServerOutlineListener>> sourceSubscriptions = outlineSubscriptions.get(contextId);
+ if (sourceSubscriptions == null) {
+ return;
+ }
+ Set<AnalysisServerOutlineListener> subscriptions = sourceSubscriptions.get(source);
+ if (subscriptions == null) {
+ return;
+ }
+ if (subscriptions.remove(listener)) {
+ if (subscriptions.isEmpty()) {
+ sourceSubscriptions.remove(source);
+ Set<Source> sourceSet = sourceSubscriptions.keySet();
+ server.subscribe(
+ contextId,
+ ImmutableMap.of(NotificationKind.OUTLINE, ListSourceSet.create(sourceSet)));
+ }
+ }
+ }
+
+ void internalComputedNavigation(String contextId, Source source, NavigationRegion[] targets) {
+ Map<Source, NavigationRegion[]> contextRegions = navigationData.get(contextId);
+ if (contextRegions == null) {
+ contextRegions = Maps.newHashMap();
+ navigationData.put(contextId, contextRegions);
+ }
+ contextRegions.put(source, targets);
+ }
+
+ void internalComputedOutline(String contextId, Source source, Outline outline) {
+ Map<Source, Set<AnalysisServerOutlineListener>> sourceSubscriptions = outlineSubscriptions.get(contextId);
+ if (sourceSubscriptions == null) {
+ return;
+ }
+ Set<AnalysisServerOutlineListener> subscriptions = sourceSubscriptions.get(source);
+ if (subscriptions == null) {
+ return;
+ }
+ subscriptions = ImmutableSet.copyOf(subscriptions);
+ for (AnalysisServerOutlineListener listener : subscriptions) {
+ listener.computedOutline(contextId, source, outline);
+ }
+ }
}

Powered by Google App Engine
This is Rietveld 408576698