Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SemanticHighlightings.java')
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SemanticHighlightings.java91
1 files changed, 74 insertions, 17 deletions
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 f821724b0ad..7bb05d8a341 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
@@ -76,6 +76,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPReferenceType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateNonTypeParameter;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
+import org.eclipse.cdt.core.dom.ast.cpp.ICPPEnumeration;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPUsingDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.SemanticQueries;
import org.eclipse.cdt.core.index.IIndex;
@@ -177,6 +178,11 @@ public class SemanticHighlightings {
public static final String ENUM= "enum"; //$NON-NLS-1$
/**
+ * A named preference part that controls the highlighting of enum classes.
+ */
+ public static final String ENUM_CLASS= "enumClass"; //$NON-NLS-1$
+
+ /**
* A named preference part that controls the highlighting of macro references.
*/
public static final String MACRO_REFERENCE= "macroSubstitution"; //$NON-NLS-1$
@@ -343,7 +349,7 @@ public class SemanticHighlightings {
IBinding binding= token.getBinding();
if (binding instanceof IField) {
if (binding instanceof ICPPUnknownBinding) {
- if (heuristicallyResolvesToEnumerator((ICPPUnknownBinding) binding)) {
+ if (heuristicallyResolve((ICPPUnknownBinding) binding) instanceof IEnumerator) {
return false;
}
}
@@ -1065,7 +1071,7 @@ public class SemanticHighlightings {
IBinding binding= token.getBinding();
if (binding instanceof ICompositeType && !(binding instanceof ICPPTemplateParameter)) {
if (binding instanceof ICPPUnknownBinding) {
- if (heuristicallyResolvesToEnumeration((ICPPUnknownBinding) binding)) {
+ if (heuristicallyResolve((ICPPUnknownBinding) binding) instanceof IEnumeration) {
return false;
}
}
@@ -1118,13 +1124,67 @@ public class SemanticHighlightings {
return false;
}
IBinding binding= token.getBinding();
+ if (binding instanceof ICPPUnknownBinding) {
+ binding= heuristicallyResolve((ICPPUnknownBinding) binding);
+ }
if (binding instanceof IEnumeration) {
+ if (binding instanceof ICPPEnumeration) {
+ return !((ICPPEnumeration) binding).isScoped();
+ }
return true;
}
+ }
+ return false;
+ }
+ }
+
+ /**
+ * Semantic highlighting for enum classes.
+ */
+ private static final class EnumClassHighlighting extends SemanticHighlightingWithOwnPreference {
+ @Override
+ public String getPreferenceKey() {
+ return ENUM_CLASS;
+ }
+
+ @Override
+ public RGB getDefaultDefaultTextColor() {
+ return new RGB(0, 80, 50);
+ }
+
+ @Override
+ public boolean isBoldByDefault() {
+ return false;
+ }
+
+ @Override
+ public boolean isItalicByDefault() {
+ return false;
+ }
+
+ @Override
+ public boolean isEnabledByDefault() {
+ return true;
+ }
+
+ @Override
+ public String getDisplayName() {
+ return CEditorMessages.SemanticHighlighting_enumClasses;
+ }
+
+ @Override
+ public boolean consumes(ISemanticToken token) {
+ IASTNode node= token.getNode();
+ if (node instanceof IASTName) {
+ if (node instanceof ICPPASTQualifiedName) {
+ return false;
+ }
+ IBinding binding= token.getBinding();
if (binding instanceof ICPPUnknownBinding) {
- if (heuristicallyResolvesToEnumeration((ICPPUnknownBinding) binding)) {
- return true;
- }
+ binding= heuristicallyResolve((ICPPUnknownBinding) binding);
+ }
+ if (binding instanceof ICPPEnumeration) {
+ return ((ICPPEnumeration) binding).isScoped();
}
}
return false;
@@ -1419,14 +1479,12 @@ public class SemanticHighlightings {
return false;
}
IBinding binding= token.getBinding();
+ if (binding instanceof ICPPUnknownBinding) {
+ binding= heuristicallyResolve((ICPPUnknownBinding) binding);
+ }
if (binding instanceof IEnumerator) {
return true;
}
- if (binding instanceof ICPPUnknownBinding) {
- if (heuristicallyResolvesToEnumerator((ICPPUnknownBinding) binding)) {
- return true;
- }
- }
}
return false;
}
@@ -1852,14 +1910,12 @@ public class SemanticHighlightings {
}
}
- private static boolean heuristicallyResolvesToEnumeration(ICPPUnknownBinding binding) {
+ private static IBinding heuristicallyResolve(ICPPUnknownBinding binding) {
IBinding[] resolved = HeuristicResolver.resolveUnknownBinding(binding);
- return resolved.length == 1 && resolved[0] instanceof IEnumeration;
- }
-
- private static boolean heuristicallyResolvesToEnumerator(ICPPUnknownBinding binding) {
- IBinding[] resolved = HeuristicResolver.resolveUnknownBinding(binding);
- return resolved.length == 1 && resolved[0] instanceof IEnumerator;
+ if (resolved.length == 1) {
+ return resolved[0];
+ }
+ return binding;
}
// Note on the get___PreferenceKey() functions below:
@@ -2024,6 +2080,7 @@ public class SemanticHighlightings {
highlightings.put(new Key(230), new EnumeratorHighlighting());
highlightings.put(new Key(240), new ContextSensitiveKeywordHighlighting());
highlightings.put(new Key(250), new VariablePassedByNonconstRefHighlighting());
+ highlightings.put(new Key(260), new EnumClassHighlighting());
}
private static final String ExtensionPoint = "semanticHighlighting"; //$NON-NLS-1$

Back to the top