Chromium Code Reviews

Unified Diff: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/completion/AbstractDartCompletionProposal.java

Issue 69883003: Issue 249. Show documentation for highlighted code completion. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Index: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/completion/AbstractDartCompletionProposal.java
diff --git a/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/completion/AbstractDartCompletionProposal.java b/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/completion/AbstractDartCompletionProposal.java
index 6b09f13d66b6ba13d46eb01c9d4acf901fbbeece..11f531665f1c1f4c90fe28db8e3a5d62bca77446 100644
--- a/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/completion/AbstractDartCompletionProposal.java
+++ b/editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/internal/text/completion/AbstractDartCompletionProposal.java
@@ -15,14 +15,12 @@ package com.google.dart.tools.ui.internal.text.completion;
import com.google.dart.engine.utilities.instrumentation.Instrumentation;
import com.google.dart.engine.utilities.instrumentation.InstrumentationBuilder;
+import com.google.dart.tools.core.DartCore;
import com.google.dart.tools.core.completion.CompletionProposal;
import com.google.dart.tools.core.internal.util.CharOperation;
-import com.google.dart.tools.core.model.DartElement;
-import com.google.dart.tools.core.model.DartModelException;
import com.google.dart.tools.ui.DartToolsPlugin;
import com.google.dart.tools.ui.PreferenceConstants;
import com.google.dart.tools.ui.internal.text.dart.SmartSemicolonAutoEditStrategy;
-import com.google.dart.tools.ui.internal.text.html.BrowserInformationControl;
import com.google.dart.tools.ui.internal.text.html.HTMLPrinter;
import com.google.dart.tools.ui.text.DartPartitions;
import com.google.dart.tools.ui.text.DartTextTools;
@@ -96,6 +94,19 @@ public abstract class AbstractDartCompletionProposal implements IDartCompletionP
ICompletionProposalExtension5, ICompletionProposalExtension6 {
/**
+ * Presenter control creator.
+ */
+ public static final class PresenterControlCreator extends
+ AbstractReusableInformationControlCreator {
+ @Override
+ @SuppressWarnings("restriction")
+ public IInformationControl doCreateInformationControl(Shell parent) {
+ String font = PreferenceConstants.APPEARANCE_JAVADOC_FONT;
+ return new org.eclipse.jface.internal.text.html.BrowserInformationControl(parent, font, true);
+ }
+ }
+
+ /**
* Allow the linked mode editor to continue running even when the exit character is typed as part
* of a function argument. Using shift operators in a context that expects balanced angle brackets
* is not legal syntax and will confuse the linked mode editor.
@@ -307,8 +318,18 @@ public abstract class AbstractDartCompletionProposal implements IDartCompletionP
*/
private static final class ControlCreator extends AbstractReusableInformationControlCreator {
@Override
+ @SuppressWarnings("restriction")
public IInformationControl doCreateInformationControl(Shell parent) {
- return new BrowserInformationControl(parent, SWT.NO_TRIM | SWT.TOOL, SWT.NONE, null);
+ String font = PreferenceConstants.APPEARANCE_JAVADOC_FONT;
+ return new org.eclipse.jface.internal.text.html.BrowserInformationControl(
+ parent,
+ font,
+ DartToolsPlugin.getAdditionalInfoAffordanceString()) {
+ @Override
+ public IInformationControlCreator getInformationPresenterControlCreator() {
+ return new PresenterControlCreator();
+ }
+ };
}
}
@@ -402,26 +423,26 @@ public abstract class AbstractDartCompletionProposal implements IDartCompletionP
instrumentation.metric("Trigger", trigger);
try {
- if (isSupportingRequiredProposals()) {
- CompletionProposal coreProposal = ((MemberProposalInfo) getProposalInfo()).fProposal;
- CompletionProposal[] requiredProposals = coreProposal.getRequiredProposals();
- for (int i = 0; requiredProposals != null && i < requiredProposals.length; i++) {
- int oldLen = document.getLength();
- if (requiredProposals[i].getKind() == CompletionProposal.TYPE_REF) {
- LazyDartCompletionProposal proposal = createRequiredTypeCompletionProposal(
- requiredProposals[i],
- fInvocationContext);
- proposal.apply(document);
- setReplacementOffset(getReplacementOffset() + document.getLength() - oldLen);
- } else {
- /*
- * we only support the above required proposals, see
- * CompletionProposal#getRequiredProposals()
- */
- Assert.isTrue(false);
- }
- }
- }
+// if (isSupportingRequiredProposals()) {
+// CompletionProposal coreProposal = ((MemberProposalInfo) getProposalInfo()).fProposal;
+// CompletionProposal[] requiredProposals = coreProposal.getRequiredProposals();
+// for (int i = 0; requiredProposals != null && i < requiredProposals.length; i++) {
+// int oldLen = document.getLength();
+// if (requiredProposals[i].getKind() == CompletionProposal.TYPE_REF) {
+// LazyDartCompletionProposal proposal = createRequiredTypeCompletionProposal(
+// requiredProposals[i],
+// fInvocationContext);
+// proposal.apply(document);
+// setReplacementOffset(getReplacementOffset() + document.getLength() - oldLen);
+// } else {
+// /*
+// * we only support the above required proposals, see
+// * CompletionProposal#getRequiredProposals()
+// */
+// Assert.isTrue(false);
+// }
+// }
+// }
try {
boolean isSmartTrigger = isSmartTrigger(trigger);
@@ -547,22 +568,6 @@ public abstract class AbstractDartCompletionProposal implements IDartCompletionP
return getReplacementOffset() + getCursorPosition();
}
- /**
- * Returns the java element proposed by the receiver, possibly <code>null</code>.
- *
- * @return the java element proposed by the receiver, possibly <code>null</code>
- */
- public DartElement getDartElement() {
- if (getProposalInfo() != null) {
- try {
- return getProposalInfo().getJavaElement();
- } catch (DartModelException x) {
- DartToolsPlugin.log(x);
- }
- }
- return null;
- }
-
@Override
public String getDisplayString() {
if (fDisplayString != null) {
@@ -577,18 +582,25 @@ public abstract class AbstractDartCompletionProposal implements IDartCompletionP
}
@Override
+ @SuppressWarnings("restriction")
public IInformationControlCreator getInformationControlCreator() {
- // FIXME(scheglov) disabled because of https://code.google.com/p/dart/issues/detail?id=12903
- return null;
-// Shell shell = DartToolsPlugin.getActiveWorkbenchShell();
-// if (shell == null || !BrowserInformationControl.isAvailable(shell)) {
-// return null;
-// }
-//
-// if (fCreator == null) {
-// fCreator = new ControlCreator();
-// }
-// return fCreator;
+ // TODO(scheglov) Linux is known to crash sometimes when we create Browser.
+ // https://code.google.com/p/dart/issues/detail?id=12903
+ // It always was like this.
+ if (DartCore.isLinux()) {
+ return null;
+ }
+ // For luckier OSes.
pquitslund 2013/11/12 16:47:44 Ha. This makes me happy and sad at the same time.
+ Shell shell = DartToolsPlugin.getActiveWorkbenchShell();
+ if (shell == null
+ || !org.eclipse.jface.internal.text.html.BrowserInformationControl.isAvailable(shell)) {
+ return null;
+ }
+
+ if (fCreator == null) {
+ fCreator = new ControlCreator();
+ }
+ return fCreator;
}
@Override
@@ -1038,18 +1050,17 @@ public abstract class AbstractDartCompletionProposal implements IDartCompletionP
}
ProposalInfo proposalInfo = getProposalInfo();
- if (!(proposalInfo instanceof MemberProposalInfo)) {
+ CompletionProposal proposal = proposalInfo.getProposal();
+
+ if (proposal == null) {
return false;
}
- CompletionProposal proposal = ((MemberProposalInfo) proposalInfo).fProposal;
- return proposal != null
- && (proposal.getKind() == CompletionProposal.METHOD_REF
- || proposal.getKind() == CompletionProposal.ARGUMENT_LIST
- || proposal.getKind() == CompletionProposal.FIELD_REF
- || proposal.getKind() == CompletionProposal.TYPE_REF
-// || proposal.getKind() == CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION
- || proposal.getKind() == CompletionProposal.CONSTRUCTOR_INVOCATION);
+ int kind = proposal.getKind();
+ return (kind == CompletionProposal.METHOD_REF || kind == CompletionProposal.ARGUMENT_LIST
+ || kind == CompletionProposal.FIELD_REF || kind == CompletionProposal.TYPE_REF
+// || kind == CompletionProposal.ANONYMOUS_CLASS_CONSTRUCTOR_INVOCATION
+ || kind == CompletionProposal.CONSTRUCTOR_INVOCATION);
}
protected boolean isToggleEating() {

Powered by Google App Engine