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

Unified Diff: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/editor/DartEditor.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.ui/src/com/google/dart/tools/ui/internal/text/editor/DartEditor.java
diff --git a/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/editor/DartEditor.java b/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/editor/DartEditor.java
index 65f18c6ca2367f9ae801973f888698b7eff559be..3eddcd384009cd84dccf4d66e4f988e015407d55 100644
--- a/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/editor/DartEditor.java
+++ b/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/editor/DartEditor.java
@@ -32,9 +32,12 @@ import com.google.dart.engine.services.assist.AssistContext;
import com.google.dart.engine.source.FileBasedSource;
import com.google.dart.engine.source.Source;
import com.google.dart.engine.utilities.source.SourceRange;
+import com.google.dart.server.Outline;
import com.google.dart.tools.core.DartCore;
import com.google.dart.tools.core.DartCoreDebug;
import com.google.dart.tools.core.MessageConsole;
+import com.google.dart.tools.core.analysis.model.AnalysisServerData;
+import com.google.dart.tools.core.analysis.model.AnalysisServerOutlineListener;
import com.google.dart.tools.core.analysis.model.Project;
import com.google.dart.tools.core.analysis.model.ProjectManager;
import com.google.dart.tools.core.formatter.DefaultCodeFormatterConstants;
@@ -1714,7 +1717,24 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
protected final static char[] BRACKETS = {'{', '}', '(', ')', '[', ']', '<', '>'};
/** The outline page */
- protected DartOutlinePage fOutlinePage;
+ protected DartOutlinePage fOutlinePage_OLD;
+
+ /** The outline page */
+ protected DartOutlinePage_NEW fOutlinePage_NEW;
+
+ private AnalysisServerOutlineListener analysisServerOutlineListener = new AnalysisServerOutlineListener() {
+ @Override
+ public void computedOutline(String contextId, Source source, final Outline outline) {
+ if (fOutlinePage_NEW != null) {
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ fOutlinePage_NEW.setInput(outline);
+ }
+ });
+ }
+ }
+ };
/** Outliner context menu Id */
protected String fOutlinerContextMenuId;
@@ -1932,9 +1952,9 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
return;
}
// update Outline
- if (resolvedUnit != null && fOutlinePage != null) {
- if (fOutlinePage != null) {
- fOutlinePage.setInput(resolvedUnit);
+ if (resolvedUnit != null && fOutlinePage_OLD != null) {
+ if (fOutlinePage_OLD != null) {
+ fOutlinePage_OLD.setInput(resolvedUnit);
}
applySelectionToOutline();
}
@@ -2001,9 +2021,13 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
@Override
public void dispose() {
if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) {
- DartCore.getAnalysisServerData().unsubscribeNavigation(
- getInputAnalysisContextId(),
- getInputSource());
+ AnalysisServerData analysisServerData = DartCore.getAnalysisServerData();
+ String contextId = getInputAnalysisContextId();
+ Source source = getInputSource();
+ if (contextId != null && source != null) {
+ analysisServerData.unsubscribeNavigation(contextId, source);
+ analysisServerData.unsubscribeOutline(contextId, source, analysisServerOutlineListener);
+ }
}
DartX.todo("folding");
@@ -2142,10 +2166,17 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
DartX.todo("outline");
if (IContentOutlinePage.class.equals(required)) {
- if (fOutlinePage == null) {
- fOutlinePage = createOutlinePage();
+ if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) {
+ if (fOutlinePage_NEW == null) {
+ fOutlinePage_NEW = createOutlinePage_NEW();
+ }
+ return fOutlinePage_NEW;
+ } else {
+ if (fOutlinePage_OLD == null) {
+ fOutlinePage_OLD = createOutlinePage_OLD();
+ }
+ return fOutlinePage_OLD;
}
- return fOutlinePage;
}
if (IEncodingSupport.class.equals(required)) {
@@ -2504,9 +2535,16 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
* Informs the editor that its outliner has been closed.
*/
public void outlinePageClosed() {
- if (fOutlinePage != null) {
- fOutlinePage = null;
- resetHighlightRange();
+ if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) {
+ if (fOutlinePage_NEW != null) {
+ fOutlinePage_NEW = null;
+ resetHighlightRange();
+ }
+ } else {
+ if (fOutlinePage_OLD != null) {
+ fOutlinePage_OLD = null;
+ resetHighlightRange();
+ }
}
}
@@ -2542,7 +2580,46 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
installSemanticHighlighting();
}
- public void setSelection(LightNodeElement element, boolean moveCursor) {
+ public void setSelection_NEW(Outline element, boolean moveCursor) {
+ // validate Outline
+ if (element == null) {
+ return;
+ }
+ // prepare range
+ int offset = element.getOffset();
+ int length = element.getLength();
+ // prepare ISourceViewer
+ ISourceViewer sourceViewer = getSourceViewer();
+ if (sourceViewer == null) {
+ return;
+ }
+ // highlight range (not selection - just highlighting on left editor band)
+ if (offset < 0) {
+ return;
+ }
+ setHighlightRange(offset, length, moveCursor);
+ // do we want to change selection?
+ if (!moveCursor) {
+ return;
+ }
+ // prepare StyledText
+ StyledText textWidget = sourceViewer.getTextWidget();
+ if (textWidget == null) {
+ return;
+ }
+ // set selection in StyledText
+ try {
+ textWidget.setRedraw(false);
+ sourceViewer.revealRange(offset, length);
+ sourceViewer.setSelectedRange(offset, length);
+ fForcedMarkOccurrencesSelection = getSelectionProvider().getSelection();
+ updateOccurrenceAnnotations((ITextSelection) fForcedMarkOccurrencesSelection, getInputUnit());
+ } finally {
+ textWidget.setRedraw(true);
+ }
+ }
+
+ public void setSelection_OLD(LightNodeElement element, boolean moveCursor) {
// validate LightNodeElement
if (element == null) {
return;
@@ -2596,22 +2673,28 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
@Override
protected void adjustHighlightRange(int offset, int length) {
- Object element = getElementAt(offset, false);
+ if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) {
+ if (fOutlinePage_NEW != null) {
+ fOutlinePage_NEW.select(offset);
+ }
+ } else {
+ Object element = getElementAt(offset, false);
- if (element instanceof LightNodeElement) {
- LightNodeElement sourceElement = (LightNodeElement) element;
- int elementOffset = sourceElement.getNameOffset();
- int elementLength = sourceElement.getNameLength();
+ if (element instanceof LightNodeElement) {
+ LightNodeElement sourceElement = (LightNodeElement) element;
+ int elementOffset = sourceElement.getNameOffset();
+ int elementLength = sourceElement.getNameLength();
- ISourceViewer viewer = getSourceViewer();
- if (viewer instanceof ITextViewerExtension5) {
- ITextViewerExtension5 extension = (ITextViewerExtension5) viewer;
- extension.exposeModelRange(new Region(elementOffset, elementLength));
- }
+ ISourceViewer viewer = getSourceViewer();
+ if (viewer instanceof ITextViewerExtension5) {
+ ITextViewerExtension5 extension = (ITextViewerExtension5) viewer;
+ extension.exposeModelRange(new Region(elementOffset, elementLength));
+ }
- setHighlightRange(elementOffset, elementLength, true);
- if (fOutlinePage != null) {
- fOutlinePage.select((LightNodeElement) element);
+ setHighlightRange(elementOffset, elementLength, true);
+ if (fOutlinePage_OLD != null) {
+ fOutlinePage_OLD.select((LightNodeElement) element);
+ }
}
}
@@ -3013,9 +3096,20 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
*
* @return the created Dart outline page
*/
- protected DartOutlinePage createOutlinePage() {
+ protected DartOutlinePage_NEW createOutlinePage_NEW() {
+ DartOutlinePage_NEW page = new DartOutlinePage_NEW(fOutlinerContextMenuId, this);
+ setOutlinePageInput_NEW(page, getEditorInput());
+ return page;
+ }
+
+ /**
+ * Creates the outline page used with this editor.
+ *
+ * @return the created Dart outline page
+ */
+ protected DartOutlinePage createOutlinePage_OLD() {
DartOutlinePage page = new DartOutlinePage(fOutlinerContextMenuId, this);
- setOutlinePageInput(page, getEditorInput());
+ setOutlinePageInput_OLD(page, getEditorInput());
return page;
}
@@ -3108,9 +3202,16 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
if (selection instanceof IStructuredSelection) {
IStructuredSelection structuredSelection = (IStructuredSelection) selection;
for (Object selectionObject : structuredSelection.toList()) {
- if (selectionObject instanceof LightNodeElement) {
- setSelection((LightNodeElement) selectionObject, !isActivePart());
- break;
+ if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) {
+ if (selectionObject instanceof Outline) {
+ setSelection_NEW((Outline) selectionObject, !isActivePart());
+ break;
+ }
+ } else {
+ if (selectionObject instanceof LightNodeElement) {
+ setSelection_OLD((LightNodeElement) selectionObject, !isActivePart());
+ break;
+ }
}
}
}
@@ -3134,9 +3235,12 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
}
if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) {
- DartCore.getAnalysisServerData().subscribeNavigation(
- getInputAnalysisContextId(),
- getInputSource());
+ AnalysisServerData analysisServerData = DartCore.getAnalysisServerData();
+ String contextId = getInputAnalysisContextId();
+ Source source = getInputSource();
+ if (contextId != null && source != null) {
+ analysisServerData.subscribeNavigation(contextId, source);
+ }
}
ISourceViewer sourceViewer = getSourceViewer();
@@ -3838,7 +3942,25 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
* @param page the Dart outline page
* @param input the editor input
*/
- protected void setOutlinePageInput(DartOutlinePage page, IEditorInput input) {
+ protected void setOutlinePageInput_NEW(DartOutlinePage_NEW page, IEditorInput input) {
+ if (page == null) {
+ return;
+ }
+ AnalysisServerData analysisServerData = DartCore.getAnalysisServerData();
+ String contextId = getInputAnalysisContextId();
+ Source source = getInputSource();
+ if (contextId != null && source != null) {
+ analysisServerData.subscribeOutline(contextId, source, analysisServerOutlineListener);
+ }
+ }
+
+ /**
+ * Sets the input of the editor's outline page.
+ *
+ * @param page the Dart outline page
+ * @param input the editor input
+ */
+ protected void setOutlinePageInput_OLD(DartOutlinePage page, IEditorInput input) {
if (page == null) {
return;
}
@@ -4028,7 +4150,7 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
*/
protected void synchronizeOutlinePage(Object /* ASTNode */element,
boolean checkIfOutlinePageActive) {
- if (fOutlinePage != null && element != null
+ if (fOutlinePage_OLD != null && element != null
&& !(checkIfOutlinePageActive && isOutlinePageActive())) {
// TODO(scheglov)
// ((DartOutlinePage) fOutlinePage).select((LightNodeElement) element);
@@ -4341,9 +4463,15 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
}
int offset = ((TextSelection) selection).getOffset();
// apply selected element
- LightNodeElement element = computeHighlightRangeSourceElement(resolvedUnit, offset);
- if (element != null && fOutlinePage != null) {
- fOutlinePage.select(element);
+ if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) {
+ if (fOutlinePage_NEW != null) {
+ fOutlinePage_NEW.select(offset);
+ }
+ } else {
+ LightNodeElement element = computeHighlightRangeSourceElement(resolvedUnit, offset);
+ if (element != null && fOutlinePage_OLD != null) {
+ fOutlinePage_OLD.select(element);
+ }
}
}
@@ -4538,7 +4666,11 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
fEncodingSupport.reset();
}
- setOutlinePageInput(fOutlinePage, input);
+ if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) {
+ setOutlinePageInput_NEW(fOutlinePage_NEW, input);
+ } else {
+ setOutlinePageInput_OLD(fOutlinePage_OLD, input);
+ }
if (isShowingOverrideIndicators()) {
installOverrideIndicator(false);
@@ -4566,8 +4698,13 @@ public abstract class DartEditor extends AbstractDecoratedTextEditor implements
private boolean isOutlinePageActive() {
IWorkbenchPart part = getActivePart();
- return part instanceof ContentOutline
- && ((ContentOutline) part).getCurrentPage() == fOutlinePage;
+ if (DartCoreDebug.ENABLE_ANALYSIS_SERVER) {
+ return part instanceof ContentOutline
+ && ((ContentOutline) part).getCurrentPage() == fOutlinePage_NEW;
+ } else {
+ return part instanceof ContentOutline
+ && ((ContentOutline) part).getCurrentPage() == fOutlinePage_OLD;
+ }
}
private boolean isRemoveTrailingWhitespaceEnabled() {

Powered by Google App Engine
This is Rietveld 408576698