true
iff the semantic highlighting consumes the semantic token
*/
- public abstract boolean consumes(SemanticToken token);
+ public abstract boolean consumes(ISemanticToken token);
private String getThemeColorKey() {
return CUIPlugin.PLUGIN_ID + "." + getPreferenceKey() + "Highlighting"; //$NON-NLS-1$//$NON-NLS-2$
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SemanticHighlightings.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SemanticHighlightings.java
index e3df7aedf1e..5e6da1c7d65 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SemanticHighlightings.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SemanticHighlightings.java
@@ -11,7 +11,11 @@
*******************************************************************************/
package org.eclipse.cdt.internal.ui.editor;
+import java.util.Map;
+import java.util.TreeMap;
+
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
@@ -56,6 +60,7 @@ import org.eclipse.cdt.core.index.IIndexFile;
import org.eclipse.cdt.core.index.IIndexName;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.ui.PreferenceConstants;
+import org.eclipse.cdt.ui.text.ISemanticToken;
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding;
import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator;
@@ -228,7 +233,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTName) {
IASTName name= (IASTName) node;
@@ -279,7 +284,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTName) {
IASTName name= (IASTName) node;
@@ -330,7 +335,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTImplicitName)
return false;
@@ -407,7 +412,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTName) {
IASTName name= (IASTName) node;
@@ -461,7 +466,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTImplicitName)
return false;
@@ -514,7 +519,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTImplicitName)
return false;
@@ -585,7 +590,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTImplicitName)
return false;
@@ -638,7 +643,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTName) {
IASTName name= (IASTName) node;
@@ -698,7 +703,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTName) {
IASTName name= (IASTName) node;
@@ -774,7 +779,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTName) {
IASTName name= (IASTName) node;
@@ -836,7 +841,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IBinding binding= token.getBinding();
if (binding instanceof IParameter) {
return true;
@@ -880,7 +885,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTName) {
IBinding binding= token.getBinding();
@@ -927,7 +932,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof ICPPASTQualifiedName || node instanceof ICPPASTTemplateId) {
return false;
@@ -977,7 +982,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTName) {
IBinding binding= token.getBinding();
@@ -1024,7 +1029,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IBinding binding= token.getBinding();
if (binding instanceof IMacroBinding) {
IASTName name= (IASTName)token.getNode();
@@ -1071,7 +1076,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IBinding binding= token.getBinding();
if (binding instanceof IMacroBinding) {
IASTName name= (IASTName)token.getNode();
@@ -1118,7 +1123,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTName) {
IASTName name= (IASTName) node;
@@ -1169,7 +1174,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IBinding binding= token.getBinding();
if (binding instanceof ICPPNamespace) {
return true;
@@ -1213,7 +1218,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IBinding binding= token.getBinding();
if (binding instanceof ILabel) {
return true;
@@ -1257,7 +1262,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTName) {
IASTName name= (IASTName) node;
@@ -1313,7 +1318,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node.getTranslationUnit().isBasedOnIncompleteIndex()) {
// Do not highlight problems is the AST is unreliable.
@@ -1370,7 +1375,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node= token.getNode();
if (node instanceof IASTName) {
IASTName name= (IASTName) node;
@@ -1459,7 +1464,7 @@ public class SemanticHighlightings {
}
@Override
- public boolean consumes(SemanticToken token) {
+ public boolean consumes(ISemanticToken token) {
IASTNode node = token.getNode();
// So far we only have implicit names for overloaded operators and destructors,
// so this works.
@@ -1545,36 +1550,106 @@ public class SemanticHighlightings {
return PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_PREFIX + semanticHighlighting.getPreferenceKey() + PreferenceConstants.EDITOR_SEMANTIC_HIGHLIGHTING_ENABLED_SUFFIX;
}
+ private static class Key implements Comparablenull
.
*/
+ @Override
public IBinding getBinding() {
if (!fIsBindingResolved) {
fIsBindingResolved= true;
if (fNode instanceof IASTName)
fBinding= ((IASTName) fNode).resolveBinding();
}
-
+
return fBinding;
}
/**
* @return the AST node
*/
+ @Override
public IASTNode getNode() {
return fNode;
}
-
+
/**
* @return the AST root
*/
+ @Override
public IASTTranslationUnit getRoot() {
if (!fIsRootResolved) {
fIsRootResolved= true;
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/ISemanticHighlighter.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/ISemanticHighlighter.java
new file mode 100644
index 00000000000..65640501405
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/ISemanticHighlighter.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2013 QNX Software Systems and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.eclipse.cdt.ui.text;
+
+
+/**
+ * Interface that must be implemented by contributors to the org.eclipse.cdt.ui.semanticHighlighting extension
+ * point.
+ *
+ * @since 5.5
+ */
+public interface ISemanticHighlighter {
+ /**
+ * Returns true
iff the semantic highlighting consumes the semantic token.
+ * + * NOTE: Implementors are not allowed to keep a reference on the token or on any object retrieved from the + * token. + *
+ * + * @param token + * the semantic token for a {@link org.eclipse.cdt.core.dom.ast.IASTName} + * @returntrue
iff the semantic highlighting consumes the semantic token
+ */
+ public boolean consumes(ISemanticToken token);
+}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/ISemanticToken.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/ISemanticToken.java
new file mode 100644
index 00000000000..c9f3d65020c
--- /dev/null
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/text/ISemanticToken.java
@@ -0,0 +1,27 @@
+package org.eclipse.cdt.ui.text;
+
+import org.eclipse.cdt.core.dom.ast.IASTNode;
+import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
+import org.eclipse.cdt.core.dom.ast.IBinding;
+
+/**
+ * An interface for accessing details of the token that is being highlighted.
+ *
+ * @since 5.5
+ */
+public interface ISemanticToken {
+ /**
+ * @return Returns the binding, can be null
.
+ */
+ public IBinding getBinding();
+
+ /**
+ * @return the AST node
+ */
+ public IASTNode getNode();
+
+ /**
+ * @return the AST root
+ */
+ public IASTTranslationUnit getRoot();
+}