mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 08:55:25 +02:00
Fix for 177457: Invalid syntax coloring of macros
and 171675: Syntax Coloring & Macro arguments
This commit is contained in:
parent
5e04b06ded
commit
ca89f453d0
7 changed files with 313 additions and 582 deletions
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2006 IBM Corporation and others.
|
||||
* Copyright (c) 2000, 2007 IBM Corporation 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
|
||||
|
@ -27,7 +27,7 @@ import org.eclipse.cdt.internal.ui.editor.SemanticHighlightings;
|
|||
*/
|
||||
public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
|
||||
|
||||
private static final boolean PRINT_POSITIONS= false;
|
||||
private static final boolean PRINT_POSITIONS= true;
|
||||
|
||||
private static final Class THIS= SemanticHighlightingTest.class;
|
||||
|
||||
|
@ -35,17 +35,6 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
|
|||
return new SemanticHighlightingTestSetup(new TestSuite(THIS), "/SHTest/src/SHTest.cpp");
|
||||
}
|
||||
|
||||
// public void testStaticConstFieldHighlighting() throws Exception {
|
||||
// setUpSemanticHighlighting(SemanticHighlightings.STATIC_CONST_FIELD);
|
||||
// Position[] expected= new Position[] {
|
||||
// createPosition(6, 18, 16),
|
||||
// createPosition(35, 37, 16),
|
||||
// };
|
||||
// Position[] actual= getSemanticHighlightingPositions();
|
||||
//// System.out.println(toString(actual));
|
||||
// assertEqualPositions(expected, actual);
|
||||
// }
|
||||
|
||||
public void testStaticFieldHighlighting() throws Exception {
|
||||
setUpSemanticHighlighting(SemanticHighlightings.STATIC_FIELD);
|
||||
Position[] actual= getSemanticHighlightingPositions();
|
||||
|
@ -108,12 +97,9 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
|
|||
createPosition(63, 8, 10),
|
||||
createPosition(77, 4, 13),
|
||||
createPosition(104, 4, 26),
|
||||
createPosition(104, 20, 10),
|
||||
createPosition(108, 4, 25),
|
||||
createPosition(108, 20, 9),
|
||||
createPosition(113, 4, 32),
|
||||
createPosition(113, 20, 16),
|
||||
};
|
||||
};
|
||||
if (PRINT_POSITIONS) System.out.println(toString(actual));
|
||||
assertEqualPositions(expected, actual);
|
||||
}
|
||||
|
@ -129,50 +115,25 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
|
|||
createPosition(63, 8, 10),
|
||||
createPosition(77, 4, 13),
|
||||
createPosition(104, 4, 26),
|
||||
createPosition(104, 20, 10),
|
||||
createPosition(108, 4, 25),
|
||||
createPosition(108, 20, 9),
|
||||
createPosition(113, 4, 32),
|
||||
createPosition(113, 20, 16),
|
||||
createPosition(114, 23, 9),
|
||||
createPosition(118, 4, 15),
|
||||
};
|
||||
};
|
||||
Position[] actual= getSemanticHighlightingPositions();
|
||||
if (PRINT_POSITIONS) System.out.println(toString(actual));
|
||||
assertEqualPositions(expected, actual);
|
||||
}
|
||||
|
||||
// public void testStaticMethodInvocationHighlighting() throws Exception {
|
||||
// setUpSemanticHighlighting(SemanticHighlightings.STATIC_METHOD_INVOCATION);
|
||||
// Position[] expected= new Position[] {
|
||||
// };
|
||||
// Position[] actual= getSemanticHighlightingPositions();
|
||||
// System.out.println(toString(actual));
|
||||
// assertEqualPositions(expected, actual);
|
||||
// }
|
||||
|
||||
/*
|
||||
*/
|
||||
// public void testVirtualMethodInvocationHighlighting() throws Exception {
|
||||
// setUpSemanticHighlighting(SemanticHighlightings.VIRTUAL_METHOD_INVOCATION);
|
||||
// Position[] expected= new Position[] {
|
||||
// createPosition(11, 2, 14),
|
||||
// };
|
||||
// Position[] actual= getSemanticHighlightingPositions();
|
||||
//// System.out.println(toString(actual));
|
||||
// assertEqualPositions(expected, actual);
|
||||
// }
|
||||
|
||||
// public void testInheritedMethodInvocationHighlighting() throws Exception {
|
||||
// setUpSemanticHighlighting(SemanticHighlightings.INHERITED_METHOD_INVOCATION);
|
||||
// Position[] expected= new Position[] {
|
||||
// createPosition(12, 2, 8),
|
||||
// createPosition(15, 17, 8),
|
||||
// };
|
||||
// Position[] actual= getSemanticHighlightingPositions();
|
||||
//// System.out.println(toString(actual));
|
||||
// assertEqualPositions(expected, actual);
|
||||
// }
|
||||
public void testStaticMethodInvocationHighlighting() throws Exception {
|
||||
setUpSemanticHighlighting(SemanticHighlightings.STATIC_METHOD_INVOCATION);
|
||||
Position[] expected= new Position[] {
|
||||
createPosition(118, 4, 15),
|
||||
};
|
||||
Position[] actual= getSemanticHighlightingPositions();
|
||||
System.out.println(toString(actual));
|
||||
assertEqualPositions(expected, actual);
|
||||
}
|
||||
|
||||
public void testLocalVariableDeclarationHighlighting() throws Exception {
|
||||
setUpSemanticHighlighting(SemanticHighlightings.LOCAL_VARIABLE_DECLARATION);
|
||||
|
@ -206,7 +167,6 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
|
|||
Position[] expected= new Position[] {
|
||||
createPosition(11, 20, 1),
|
||||
createPosition(28, 35, 3),
|
||||
createPosition(29, 8, 19),
|
||||
createPosition(30, 19, 3),
|
||||
createPosition(77, 21, 4),
|
||||
createPosition(77, 30, 4),
|
||||
|
@ -234,16 +194,6 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
|
|||
assertEqualPositions(expected, actual);
|
||||
}
|
||||
|
||||
// public void testTemplateArgumentHighlighting() throws Exception {
|
||||
// setUpSemanticHighlighting(SemanticHighlightings.TEMPLATE_ARGUMENT);
|
||||
// Position[] actual= getSemanticHighlightingPositions();
|
||||
// Position[] expected= new Position[] {
|
||||
// createPosition(41, 8, 6),
|
||||
// };
|
||||
//// System.out.println(toString(actual));
|
||||
// assertEqualPositions(expected, actual);
|
||||
// }
|
||||
|
||||
public void testEnumHighlighting() throws Exception {
|
||||
setUpSemanticHighlighting(SemanticHighlightings.ENUM);
|
||||
Position[] actual= getSemanticHighlightingPositions();
|
||||
|
@ -282,11 +232,13 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
|
|||
createPosition(74, 35, 13),
|
||||
createPosition(83, 25, 24),
|
||||
createPosition(83, 52, 13),
|
||||
createPosition(83, 52, 24),
|
||||
createPosition(83, 70, 5),
|
||||
createPosition(86, 7, 9),
|
||||
createPosition(90, 6, 8),
|
||||
createPosition(94, 8, 8),
|
||||
createPosition(104, 4, 14),
|
||||
createPosition(108, 4, 14),
|
||||
createPosition(113, 4, 14),
|
||||
createPosition(114, 4, 9),
|
||||
createPosition(116, 4, 8),
|
||||
};
|
||||
|
@ -314,11 +266,9 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
|
|||
createPosition(11, 5, 10),
|
||||
createPosition(12, 12, 16),
|
||||
createPosition(19, 16, 10),
|
||||
createPosition(29, 8, 19),
|
||||
createPosition(30, 8, 10),
|
||||
createPosition(98, 8, 13),
|
||||
createPosition(99, 1, 16),
|
||||
createPosition(120, 4, 17),
|
||||
};
|
||||
if (PRINT_POSITIONS) System.out.println(toString(actual));
|
||||
assertEqualPositions(expected, actual);
|
||||
|
@ -340,15 +290,26 @@ public class SemanticHighlightingTest extends AbstractSemanticHighlightingTest {
|
|||
assertEqualPositions(expected, actual);
|
||||
}
|
||||
|
||||
public void testMacroSubstitutionHighlighting() throws Exception {
|
||||
setUpSemanticHighlighting(SemanticHighlightings.MACRO_SUBSTITUTION);
|
||||
public void testMacroDefinitionHighlighting() throws Exception {
|
||||
setUpSemanticHighlighting(SemanticHighlightings.MACRO_DEFINITION);
|
||||
Position[] actual= getSemanticHighlightingPositions();
|
||||
Position[] expected= new Position[] {
|
||||
createPosition(29, 8, 19),
|
||||
createPosition(0, 8, 3),
|
||||
createPosition(1, 8, 14),
|
||||
};
|
||||
if (PRINT_POSITIONS) System.out.println(toString(actual));
|
||||
assertEqualPositions(expected, actual);
|
||||
}
|
||||
|
||||
public void testMacroReferencesHighlighting() throws Exception {
|
||||
setUpSemanticHighlighting(SemanticHighlightings.MACRO_REFERENCE);
|
||||
Position[] actual= getSemanticHighlightingPositions();
|
||||
Position[] expected= new Position[] {
|
||||
createPosition(29, 8, 14),
|
||||
createPosition(104, 0, 3),
|
||||
createPosition(108, 0, 3),
|
||||
createPosition(113, 0, 3),
|
||||
createPosition(120, 4, 17),
|
||||
createPosition(120, 4, 14),
|
||||
};
|
||||
if (PRINT_POSITIONS) System.out.println(toString(actual));
|
||||
assertEqualPositions(expected, actual);
|
||||
|
|
|
@ -153,8 +153,6 @@ SemanticHighlighting_staticField= Static fields
|
|||
SemanticHighlighting_staticConstField= Constants
|
||||
SemanticHighlighting_methodDeclaration= Method declarations
|
||||
SemanticHighlighting_staticMethodInvocation= Static method invocations
|
||||
SemanticHighlighting_virtualMethodInvocation= Virtual method invocations
|
||||
SemanticHighlighting_inheritedMethodInvocation= Inherited method invocations
|
||||
SemanticHighlighting_localVariableDeclaration= Local variable declarations
|
||||
SemanticHighlighting_localVariable= Local variable references
|
||||
SemanticHighlighting_globalVariable= Global variables
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2006 IBM Corporation and others.
|
||||
* Copyright (c) 2000, 2007 IBM Corporation 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
|
||||
|
@ -84,20 +84,4 @@ public abstract class SemanticHighlighting {
|
|||
* @return <code>true</code> iff the semantic highlighting consumes the semantic token
|
||||
*/
|
||||
public abstract boolean consumes(SemanticToken token);
|
||||
|
||||
/**
|
||||
* Returns <code>true</code> iff the semantic highlighting consumes the
|
||||
* semantic token.
|
||||
* <p>
|
||||
* NOTE: Implementors are not allowed to keep a reference on the token or on
|
||||
* any object retrieved from the token.
|
||||
* </p>
|
||||
* @param token the semantic token for a
|
||||
* {@link org.eclipse.cdt.core.dom.ast.IASTLiteralExpression}
|
||||
* @return <code>true</code> iff the semantic highlighting consumes the
|
||||
* semantic token
|
||||
*/
|
||||
public boolean consumesLiteral(SemanticToken token) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2006 IBM Corporation and others.
|
||||
* Copyright (c) 2000, 2007 IBM Corporation 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
|
||||
|
@ -39,6 +39,8 @@ import org.eclipse.cdt.core.dom.ast.IASTMacroExpansion;
|
|||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNodeLocation;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTPreprocessorMacroDefinition;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTStatement;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
|
@ -62,9 +64,11 @@ public class SemanticHighlightingReconciler implements ICReconcilingListener {
|
|||
*/
|
||||
private class PositionCollector extends ASTVisitor {
|
||||
{
|
||||
shouldVisitTranslationUnit= true;
|
||||
shouldVisitNames= true;
|
||||
shouldVisitDeclarations= true;
|
||||
shouldVisitExpressions= true;
|
||||
shouldVisitStatements= true;
|
||||
shouldVisitDeclSpecifiers= true;
|
||||
}
|
||||
|
||||
|
@ -82,6 +86,21 @@ public class SemanticHighlightingReconciler implements ICReconcilingListener {
|
|||
fPositionTracker= positionTracker;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.core.dom.ast.ASTVisitor#visit(org.eclipse.cdt.core.dom.ast.IASTTranslationUnit)
|
||||
*/
|
||||
public int visit(IASTTranslationUnit tu) {
|
||||
// visit macro definitions
|
||||
IASTPreprocessorMacroDefinition[] macroDefs= tu.getMacroDefinitions();
|
||||
for (int i= 0; i < macroDefs.length; i++) {
|
||||
IASTPreprocessorMacroDefinition macroDef= macroDefs[i];
|
||||
if (fFilePath.equals(macroDef.getContainingFilename())) {
|
||||
visit(macroDef.getName());
|
||||
}
|
||||
}
|
||||
return super.visit(tu);
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.core.dom.ast.ASTVisitor#visit(org.eclipse.cdt.core.dom.ast.IASTDeclaration)
|
||||
*/
|
||||
|
@ -115,29 +134,63 @@ public class SemanticHighlightingReconciler implements ICReconcilingListener {
|
|||
return PROCESS_CONTINUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.core.dom.ast.ASTVisitor#visit(org.eclipse.cdt.core.dom.ast.IASTStatement)
|
||||
*/
|
||||
public int visit(IASTStatement statement) {
|
||||
if (checkForMacro(statement)) {
|
||||
return PROCESS_SKIP;
|
||||
}
|
||||
return PROCESS_CONTINUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.core.dom.ast.ASTVisitor#visit(org.eclipse.cdt.core.dom.ast.IASTName)
|
||||
*/
|
||||
public int visit(IASTName node) {
|
||||
visitNode(node);
|
||||
if (visitNode(node)) {
|
||||
return PROCESS_SKIP;
|
||||
}
|
||||
return PROCESS_CONTINUE;
|
||||
}
|
||||
|
||||
private boolean checkForMacro(IASTNode node) {
|
||||
IASTNodeLocation[] nodeLocations= node.getNodeLocations();
|
||||
if (nodeLocations.length == 1 && nodeLocations[0] instanceof IASTMacroExpansion) {
|
||||
return visitNode(node);
|
||||
IASTNodeLocation useLocation= getMinFileLocation(nodeLocations);
|
||||
if (useLocation != null) {
|
||||
IASTPreprocessorMacroDefinition macroDef= ((IASTMacroExpansion)nodeLocations[0]).getMacroDefinition();
|
||||
IASTNodeLocation defLocation= macroDef.getName().getFileLocation();
|
||||
IASTNode macroNode= node.getTranslationUnit().selectNodeForLocation(fFilePath, useLocation.getNodeOffset(), defLocation.getNodeLength());
|
||||
if (macroNode != null && visitMacro(macroNode, defLocation.getNodeLength())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean visitMacro(IASTNode node, int macroLength) {
|
||||
fToken.update(node);
|
||||
for (int i= 0, n= fJobSemanticHighlightings.length; i < n; ++i) {
|
||||
SemanticHighlighting semanticHighlighting= fJobSemanticHighlightings[i];
|
||||
if (fJobHighlightings[i].isEnabled() && semanticHighlighting.consumes(fToken)) {
|
||||
addMacroLocation(node.getFileLocation(), macroLength, fJobHighlightings[i]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
fToken.clear();
|
||||
// always consume this node
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean visitNode(IASTNode node) {
|
||||
boolean consumed= false;
|
||||
fToken.update(node);
|
||||
for (int i= 0, n= fJobSemanticHighlightings.length; i < n; ++i) {
|
||||
SemanticHighlighting semanticHighlighting= fJobSemanticHighlightings[i];
|
||||
if (fJobHighlightings[i].isEnabled() && semanticHighlighting.consumes(fToken)) {
|
||||
addNodeLocations(node.getNodeLocations(), fJobHighlightings[i]);
|
||||
addNodeLocation(node.getFileLocation(), fJobHighlightings[i]);
|
||||
consumed= true;
|
||||
break;
|
||||
}
|
||||
|
@ -149,20 +202,15 @@ public class SemanticHighlightingReconciler implements ICReconcilingListener {
|
|||
/**
|
||||
* Add the a location range for the given highlighting.
|
||||
*
|
||||
* @param nodeLocations The node locations
|
||||
* @param nodeLocation The node location
|
||||
* @param highlighting The highlighting
|
||||
*/
|
||||
private void addNodeLocations(IASTNodeLocation[] nodeLocations, HighlightingStyle highlighting) {
|
||||
final IASTFileLocation minLocation= getMinFileLocation(nodeLocations);
|
||||
if (minLocation == null) {
|
||||
private void addNodeLocation(IASTNodeLocation nodeLocation, HighlightingStyle highlighting) {
|
||||
if (nodeLocation == null) {
|
||||
return;
|
||||
}
|
||||
final IASTFileLocation maxLocation= getMaxFileLocation(nodeLocations);
|
||||
if (maxLocation == null) {
|
||||
return;
|
||||
}
|
||||
int offset= minLocation.getNodeOffset();
|
||||
int length= maxLocation.getNodeOffset() + maxLocation.getNodeLength() - offset;
|
||||
int offset= nodeLocation.getNodeOffset();
|
||||
int length= nodeLocation.getNodeLength();
|
||||
if (fPositionTracker != null) {
|
||||
IRegion actualPos= fPositionTracker.historicToActual(new Region(offset, length));
|
||||
offset= actualPos.getOffset();
|
||||
|
@ -173,18 +221,27 @@ public class SemanticHighlightingReconciler implements ICReconcilingListener {
|
|||
}
|
||||
}
|
||||
|
||||
private IASTFileLocation getMaxFileLocation(IASTNodeLocation[] locations) {
|
||||
if (locations == null || locations.length == 0) {
|
||||
return null;
|
||||
/**
|
||||
* Add the a location range for the given macro highlighting.
|
||||
*
|
||||
* @param macroUseLocaton The location of the macro occurrence
|
||||
* @param macroLength the length of the macro name
|
||||
* @param highlighting The highlighting
|
||||
*/
|
||||
private void addMacroLocation(IASTNodeLocation macroUseLocation, int macroLength, HighlightingStyle highlighting) {
|
||||
if (macroUseLocation == null) {
|
||||
return;
|
||||
}
|
||||
final IASTNodeLocation nodeLocation= locations[locations.length-1];
|
||||
if (nodeLocation instanceof IASTFileLocation) {
|
||||
return (IASTFileLocation)nodeLocation;
|
||||
} else if (nodeLocation instanceof IASTMacroExpansion) {
|
||||
IASTNodeLocation[] macroLocations= ((IASTMacroExpansion)nodeLocation).getExpansionLocations();
|
||||
return getMaxFileLocation(macroLocations);
|
||||
int offset= macroUseLocation.getNodeOffset();
|
||||
int length= macroLength;
|
||||
if (fPositionTracker != null) {
|
||||
IRegion actualPos= fPositionTracker.historicToActual(new Region(offset, length));
|
||||
offset= actualPos.getOffset();
|
||||
length= actualPos.getLength();
|
||||
}
|
||||
if (offset > -1 && length > 0) {
|
||||
addPosition(offset, length, highlighting);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private IASTFileLocation getMinFileLocation(IASTNodeLocation[] locations) {
|
||||
|
@ -298,14 +355,11 @@ public class SemanticHighlightingReconciler implements ICReconcilingListener {
|
|||
return;
|
||||
|
||||
PositionCollector collector= new PositionCollector(ast.getFilePath(), positionTracker);
|
||||
IASTNode[] subtrees= getAffectedSubtrees(ast);
|
||||
if (subtrees.length == 0)
|
||||
return;
|
||||
|
||||
|
||||
startReconcilingPositions();
|
||||
|
||||
if (!fJobPresenter.isCanceled())
|
||||
reconcilePositions(subtrees, collector);
|
||||
reconcilePositions(ast, collector);
|
||||
|
||||
TextPresentation textPresentation= null;
|
||||
if (!fJobPresenter.isCanceled())
|
||||
|
@ -325,14 +379,6 @@ public class SemanticHighlightingReconciler implements ICReconcilingListener {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param node Root node
|
||||
* @return Array of subtrees that may be affected by past document changes
|
||||
*/
|
||||
private IASTNode[] getAffectedSubtrees(IASTNode node) {
|
||||
return new IASTNode[] { node };
|
||||
}
|
||||
|
||||
/**
|
||||
* Start reconciling positions.
|
||||
*/
|
||||
|
@ -342,15 +388,13 @@ public class SemanticHighlightingReconciler implements ICReconcilingListener {
|
|||
}
|
||||
|
||||
/**
|
||||
* Reconcile positions based on the AST subtrees
|
||||
* Reconcile positions based on the AST.
|
||||
*
|
||||
* @param subtrees the AST subtrees
|
||||
* @param ast the AST
|
||||
* @param visitor the AST visitor
|
||||
*/
|
||||
private void reconcilePositions(IASTNode[] subtrees, ASTVisitor visitor) {
|
||||
// FIXME: remove positions not covered by subtrees
|
||||
for (int i= 0, n= subtrees.length; i < n; i++) {
|
||||
subtrees[i].accept(visitor);
|
||||
}
|
||||
private void reconcilePositions(IASTTranslationUnit ast, PositionCollector visitor) {
|
||||
ast.accept(visitor);
|
||||
List oldPositions= fRemovedPositions;
|
||||
List newPositions= new ArrayList(fNOfRemovedPositions);
|
||||
for (int i= 0, n= oldPositions.size(); i < n; i ++) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2006 IBM Corporation and others.
|
||||
* Copyright (c) 2000, 2007 IBM Corporation 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
|
||||
|
@ -21,10 +21,8 @@ import org.eclipse.swt.graphics.RGB;
|
|||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTMacroExpansion;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTNodeLocation;
|
||||
import org.eclipse.cdt.core.dom.ast.IASTProblem;
|
||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IEnumeration;
|
||||
|
@ -32,6 +30,7 @@ import org.eclipse.cdt.core.dom.ast.IEnumerator;
|
|||
import org.eclipse.cdt.core.dom.ast.IField;
|
||||
import org.eclipse.cdt.core.dom.ast.IFunction;
|
||||
import org.eclipse.cdt.core.dom.ast.ILabel;
|
||||
import org.eclipse.cdt.core.dom.ast.IMacroBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IParameter;
|
||||
import org.eclipse.cdt.core.dom.ast.IProblemBinding;
|
||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
|
@ -41,6 +40,7 @@ import org.eclipse.cdt.core.dom.ast.c.ICFunctionScope;
|
|||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBlockScope;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionScope;
|
||||
|
@ -60,11 +60,6 @@ public class SemanticHighlightings {
|
|||
|
||||
private static final RGB RGB_BLACK = new RGB(0, 0, 0);
|
||||
|
||||
/**
|
||||
* A named preference part that controls the highlighting of static const fields.
|
||||
*/
|
||||
public static final String STATIC_CONST_FIELD="staticConstField"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A named preference part that controls the highlighting of static fields.
|
||||
*/
|
||||
|
@ -83,17 +78,7 @@ public class SemanticHighlightings {
|
|||
/**
|
||||
* A named preference part that controls the highlighting of static method invocations.
|
||||
*/
|
||||
public static final String STATIC_METHOD_INVOCATION="staticMethodInvocation"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A named preference part that controls the highlighting of inherited method invocations.
|
||||
*/
|
||||
public static final String INHERITED_METHOD_INVOCATION="inheritedMethodInvocation"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A named preference part that controls the highlighting of virtual method invocations.
|
||||
*/
|
||||
public static final String VIRTUAL_METHOD_INVOCATION="virtualMethodInvocation"; //$NON-NLS-1$
|
||||
public static final String STATIC_METHOD_INVOCATION="staticMethod"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A named preference part that controls the highlighting of function declarations.
|
||||
|
@ -146,15 +131,9 @@ public class SemanticHighlightings {
|
|||
public static final String ENUM="enum"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A named preference part that controls the highlighting of template arguments.
|
||||
* A named preference part that controls the highlighting of macro references.
|
||||
*/
|
||||
public static final String TEMPLATE_ARGUMENT="templateArgument"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A named preference part that controls the highlighting of macro substitutions
|
||||
* (=references).
|
||||
*/
|
||||
public static final String MACRO_SUBSTITUTION="macroSubstitution"; //$NON-NLS-1$
|
||||
public static final String MACRO_REFERENCE="macroSubstitution"; //$NON-NLS-1$
|
||||
|
||||
/**
|
||||
* A named preference part that controls the highlighting of macro definitions.
|
||||
|
@ -194,73 +173,6 @@ public class SemanticHighlightings {
|
|||
*/
|
||||
private static SemanticHighlighting[] fgSemanticHighlightings;
|
||||
|
||||
/**
|
||||
* Semantic highlighting for static const fields.
|
||||
*/
|
||||
// private static final class StaticConstFieldHighlighting extends SemanticHighlighting {
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getPreferenceKey()
|
||||
// */
|
||||
// public String getPreferenceKey() {
|
||||
// return STATIC_CONST_FIELD;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextColor()
|
||||
// */
|
||||
// public RGB getDefaultTextColor() {
|
||||
// return RGB_BLACK;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextStyleBold()
|
||||
// */
|
||||
// public boolean isBoldByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isItalicByDefault()
|
||||
// */
|
||||
// public boolean isItalicByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isEnabledByDefault()
|
||||
// */
|
||||
// public boolean isEnabledByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDisplayName()
|
||||
// */
|
||||
// public String getDisplayName() {
|
||||
// return CEditorMessages.getString("SemanticHighlighting_staticConstField"); //$NON-NLS-1$
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
// */
|
||||
// public boolean consumes(SemanticToken token) {
|
||||
// IBinding binding= token.getBinding();
|
||||
// if (binding instanceof ICPPField && !(binding instanceof IProblemBinding)) {
|
||||
// ICPPField field= (ICPPField)binding;
|
||||
// try {
|
||||
// // TLETODO [semanticHighlighting] need access to const storage class
|
||||
// return field.isStatic() /* && field.isConst() */;
|
||||
// } catch (DOMException exc) {
|
||||
// CUIPlugin.getDefault().log(exc.getStatus());
|
||||
// } catch (Error e) /* PDOMNotImplementedError */ {
|
||||
// // ignore
|
||||
// }
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* Semantic highlighting for static fields.
|
||||
*/
|
||||
|
@ -312,14 +224,21 @@ public class SemanticHighlightings {
|
|||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
*/
|
||||
public boolean consumes(SemanticToken token) {
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof IField && !(binding instanceof IProblemBinding)) {
|
||||
try {
|
||||
return ((IField)binding).isStatic();
|
||||
} catch (DOMException exc) {
|
||||
CUIPlugin.getDefault().log(exc);
|
||||
} catch (Error e) /* PDOMNotImplementedError */ {
|
||||
// ignore
|
||||
IASTNode node= token.getNode();
|
||||
if (node instanceof IASTName) {
|
||||
IASTName name= (IASTName)node;
|
||||
if (name instanceof ICPPASTQualifiedName && name.isReference()) {
|
||||
return false;
|
||||
}
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof IField && !(binding instanceof IProblemBinding)) {
|
||||
try {
|
||||
return ((IField)binding).isStatic();
|
||||
} catch (DOMException exc) {
|
||||
CUIPlugin.getDefault().log(exc);
|
||||
} catch (Error e) /* PDOMNotImplementedError */ {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
@ -377,9 +296,16 @@ public class SemanticHighlightings {
|
|||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
*/
|
||||
public boolean consumes(SemanticToken token) {
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof IField) {
|
||||
return true;
|
||||
IASTNode node= token.getNode();
|
||||
if (node instanceof IASTName) {
|
||||
IASTName name= (IASTName)node;
|
||||
if (name instanceof ICPPASTQualifiedName && name.isReference()) {
|
||||
return false;
|
||||
}
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof IField) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -439,7 +365,7 @@ public class SemanticHighlightings {
|
|||
IASTNode node= token.getNode();
|
||||
if (node instanceof IASTName) {
|
||||
IASTName name= (IASTName)node;
|
||||
if (name.isDeclaration() || name.isDefinition()) {
|
||||
if (!name.isReference()) {
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof ICPPMethod) {
|
||||
return true;
|
||||
|
@ -477,198 +403,77 @@ public class SemanticHighlightings {
|
|||
/**
|
||||
* Semantic highlighting for static method invocations.
|
||||
*/
|
||||
// private static final class StaticMethodInvocationHighlighting extends SemanticHighlighting {
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getPreferenceKey()
|
||||
// */
|
||||
// public String getPreferenceKey() {
|
||||
// return STATIC_METHOD_INVOCATION;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextColor()
|
||||
// */
|
||||
// public RGB getDefaultTextColor() {
|
||||
// return RGB_BLACK;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextStyleBold()
|
||||
// */
|
||||
// public boolean isBoldByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isItalicByDefault()
|
||||
// */
|
||||
// public boolean isItalicByDefault() {
|
||||
// return true;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isEnabledByDefault()
|
||||
// */
|
||||
// public boolean isEnabledByDefault() {
|
||||
// return true;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDisplayName()
|
||||
// */
|
||||
// public String getDisplayName() {
|
||||
// return CEditorMessages.getString("SemanticHighlighting_staticMethodInvocation"); //$NON-NLS-1$
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
// */
|
||||
// public boolean consumes(SemanticToken token) {
|
||||
// IASTNode node= token.getNode();
|
||||
// if (node instanceof IASTName) {
|
||||
// IASTName name= (IASTName)node;
|
||||
// if (name.isReference()) {
|
||||
// IBinding binding= token.getBinding();
|
||||
// if (binding instanceof ICPPMethod) {
|
||||
// try {
|
||||
// return ((ICPPMethod)binding).isStatic();
|
||||
// } catch (DOMException exc) {
|
||||
// CUIPlugin.getDefault().log(exc.getStatus());
|
||||
// } catch (Error e) /* PDOMNotImplementedError */ {
|
||||
// // ignore
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
private static final class StaticMethodInvocationHighlighting extends SemanticHighlighting {
|
||||
|
||||
/**
|
||||
* Semantic highlighting for virtual method invocations.
|
||||
*/
|
||||
// private static final class VirtualMethodInvocationHighlighting extends SemanticHighlighting {
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getPreferenceKey()
|
||||
// */
|
||||
// public String getPreferenceKey() {
|
||||
// return VIRTUAL_METHOD_INVOCATION;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextColor()
|
||||
// */
|
||||
// public RGB getDefaultTextColor() {
|
||||
// return RGB_BLACK;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextStyleBold()
|
||||
// */
|
||||
// public boolean isBoldByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isItalicByDefault()
|
||||
// */
|
||||
// public boolean isItalicByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isEnabledByDefault()
|
||||
// */
|
||||
// public boolean isEnabledByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDisplayName()
|
||||
// */
|
||||
// public String getDisplayName() {
|
||||
// return CEditorMessages.getString("SemanticHighlighting_virtualMethodInvocation"); //$NON-NLS-1$
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
// */
|
||||
// public boolean consumes(SemanticToken token) {
|
||||
// IASTName node= token.getNode();
|
||||
// if (node.isReference()) {
|
||||
// IBinding binding= token.getBinding();
|
||||
// if (binding instanceof ICPPMethod) {
|
||||
// try {
|
||||
// // TLETODO [semanticHighlighting] need proper check for virtual method
|
||||
// return ((ICPPMethod)binding).isVirtual();
|
||||
// } catch (DOMException exc) {
|
||||
// CUIPlugin.getDefault().log(exc.getStatus());
|
||||
// } catch (Error e) /* PDOMNotImplementedError */ {
|
||||
// // ignore
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getPreferenceKey()
|
||||
*/
|
||||
public String getPreferenceKey() {
|
||||
return STATIC_METHOD_INVOCATION;
|
||||
}
|
||||
|
||||
/**
|
||||
* Semantic highlighting for inherited method invocations.
|
||||
*/
|
||||
// private static final class InheritedMethodInvocationHighlighting extends SemanticHighlighting {
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getPreferenceKey()
|
||||
// */
|
||||
// public String getPreferenceKey() {
|
||||
// return INHERITED_METHOD_INVOCATION;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextColor()
|
||||
// */
|
||||
// public RGB getDefaultTextColor() {
|
||||
// return RGB_BLACK;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextStyleBold()
|
||||
// */
|
||||
// public boolean isBoldByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isItalicByDefault()
|
||||
// */
|
||||
// public boolean isItalicByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isEnabledByDefault()
|
||||
// */
|
||||
// public boolean isEnabledByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDisplayName()
|
||||
// */
|
||||
// public String getDisplayName() {
|
||||
// return CEditorMessages.getString("SemanticHighlighting_inheritedMethodInvocation"); //$NON-NLS-1$
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
// */
|
||||
// public boolean consumes(SemanticToken token) {
|
||||
// // TLETODO [semanticHighlighting] inherited method invocation
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextColor()
|
||||
*/
|
||||
public RGB getDefaultTextColor() {
|
||||
return RGB_BLACK;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextStyleBold()
|
||||
*/
|
||||
public boolean isBoldByDefault() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isItalicByDefault()
|
||||
*/
|
||||
public boolean isItalicByDefault() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isEnabledByDefault()
|
||||
*/
|
||||
public boolean isEnabledByDefault() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDisplayName()
|
||||
*/
|
||||
public String getDisplayName() {
|
||||
return CEditorMessages.getString("SemanticHighlighting_staticMethodInvocation"); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
*/
|
||||
public boolean consumes(SemanticToken token) {
|
||||
IASTNode node= token.getNode();
|
||||
if (node instanceof IASTName) {
|
||||
IASTName name= (IASTName)node;
|
||||
if (name instanceof ICPPASTQualifiedName) {
|
||||
return false;
|
||||
}
|
||||
if (!name.isReference()) {
|
||||
return false;
|
||||
}
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof ICPPMethod) {
|
||||
try {
|
||||
return ((ICPPMethod)binding).isStatic();
|
||||
} catch (DOMException exc) {
|
||||
CUIPlugin.getDefault().log(exc);
|
||||
} catch (Error e) /* PDOMNotImplementedError */ {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Semantic highlighting for methods.
|
||||
|
@ -723,6 +528,10 @@ public class SemanticHighlightings {
|
|||
public boolean consumes(SemanticToken token) {
|
||||
IASTNode node= token.getNode();
|
||||
if (node instanceof IASTName) {
|
||||
IASTName name= (IASTName)node;
|
||||
if (name instanceof ICPPASTQualifiedName && name.isReference()) {
|
||||
return false;
|
||||
}
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof ICPPMethod) {
|
||||
return true;
|
||||
|
@ -1296,22 +1105,13 @@ public class SemanticHighlightings {
|
|||
*/
|
||||
public boolean consumes(SemanticToken token) {
|
||||
IASTNode node= token.getNode();
|
||||
if (node instanceof ICPPASTQualifiedName || node instanceof ICPPASTTemplateId) {
|
||||
return false;
|
||||
}
|
||||
if (node instanceof IASTName) {
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof ICPPClassType) {
|
||||
IASTName name= (IASTName)node;
|
||||
if (name.isReference()) {
|
||||
if (node.getParent() instanceof ICPPASTQualifiedName) {
|
||||
ICPPASTQualifiedName qName= (ICPPASTQualifiedName)node.getParent();
|
||||
if (qName.getLastName() == name) {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
@ -1369,83 +1169,27 @@ public class SemanticHighlightings {
|
|||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
*/
|
||||
public boolean consumes(SemanticToken token) {
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof IEnumeration) {
|
||||
return true;
|
||||
IASTNode node= token.getNode();
|
||||
if (node instanceof IASTName) {
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof IEnumeration) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Semantic highlighting for template arguments.
|
||||
* Semantic highlighting for macro references.
|
||||
*/
|
||||
// private static final class TemplateArgumentHighlighting extends SemanticHighlighting {
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getPreferenceKey()
|
||||
// */
|
||||
// public String getPreferenceKey() {
|
||||
// return TEMPLATE_ARGUMENT;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextColor()
|
||||
// */
|
||||
// public RGB getDefaultTextColor() {
|
||||
// return new RGB(13, 100, 0);
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextStyleBold()
|
||||
// */
|
||||
// public boolean isBoldByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isItalicByDefault()
|
||||
// */
|
||||
// public boolean isItalicByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isEnabledByDefault()
|
||||
// */
|
||||
// public boolean isEnabledByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDisplayName()
|
||||
// */
|
||||
// public String getDisplayName() {
|
||||
// return CEditorMessages.getString("SemanticHighlighting_templateArguments"); //$NON-NLS-1$
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
// */
|
||||
// public boolean consumes(SemanticToken token) {
|
||||
// IBinding binding= token.getBinding();
|
||||
// if (binding instanceof ICPPTemplateParameter) {
|
||||
// return true;
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
/**
|
||||
* Semantic highlighting for macro substitutions (references).
|
||||
*/
|
||||
private static final class MacroSubstitutionHighlighting extends SemanticHighlighting {
|
||||
private static final class MacroReferenceHighlighting extends SemanticHighlighting {
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getPreferenceKey()
|
||||
*/
|
||||
public String getPreferenceKey() {
|
||||
return MACRO_SUBSTITUTION;
|
||||
return MACRO_REFERENCE;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1487,10 +1231,12 @@ public class SemanticHighlightings {
|
|||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
*/
|
||||
public boolean consumes(SemanticToken token) {
|
||||
IASTNode node= token.getNode();
|
||||
IASTNodeLocation[] nodeLocations= node.getNodeLocations();
|
||||
if (nodeLocations.length == 1 && nodeLocations[0] instanceof IASTMacroExpansion) {
|
||||
return true;
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof IMacroBinding) {
|
||||
IASTName name= (IASTName)token.getNode();
|
||||
if (name.isReference()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -1499,61 +1245,64 @@ public class SemanticHighlightings {
|
|||
/**
|
||||
* Semantic highlighting for macro definitions.
|
||||
*/
|
||||
// private static final class MacroDefinitionHighlighting extends SemanticHighlighting {
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getPreferenceKey()
|
||||
// */
|
||||
// public String getPreferenceKey() {
|
||||
// return MACRO_DEFINITION;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextColor()
|
||||
// */
|
||||
// public RGB getDefaultTextColor() {
|
||||
// return RGB_BLACK;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextStyleBold()
|
||||
// */
|
||||
// public boolean isBoldByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isItalicByDefault()
|
||||
// */
|
||||
// public boolean isItalicByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isEnabledByDefault()
|
||||
// */
|
||||
// public boolean isEnabledByDefault() {
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDisplayName()
|
||||
// */
|
||||
// public String getDisplayName() {
|
||||
// return CEditorMessages.getString("SemanticHighlighting_macroDefinition"); //$NON-NLS-1$
|
||||
// }
|
||||
//
|
||||
// /*
|
||||
// * @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
// */
|
||||
// public boolean consumes(SemanticToken token) {
|
||||
// IASTNode node= token.getNode();
|
||||
// if (node instanceof IASTName && node.getParent() instanceof IASTPreprocessorMacroDefinition) {
|
||||
// return true;
|
||||
// }
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
private static final class MacroDefinitionHighlighting extends SemanticHighlighting {
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getPreferenceKey()
|
||||
*/
|
||||
public String getPreferenceKey() {
|
||||
return MACRO_DEFINITION;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextColor()
|
||||
*/
|
||||
public RGB getDefaultTextColor() {
|
||||
return RGB_BLACK;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDefaultTextStyleBold()
|
||||
*/
|
||||
public boolean isBoldByDefault() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isItalicByDefault()
|
||||
*/
|
||||
public boolean isItalicByDefault() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#isEnabledByDefault()
|
||||
*/
|
||||
public boolean isEnabledByDefault() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#getDisplayName()
|
||||
*/
|
||||
public String getDisplayName() {
|
||||
return CEditorMessages.getString("SemanticHighlighting_macroDefintion"); //$NON-NLS-1$
|
||||
}
|
||||
|
||||
/*
|
||||
* @see org.eclipse.cdt.internal.ui.editor.SemanticHighlighting#consumes(org.eclipse.cdt.internal.ui.editor.SemanticToken)
|
||||
*/
|
||||
public boolean consumes(SemanticToken token) {
|
||||
IBinding binding= token.getBinding();
|
||||
if (binding instanceof IMacroBinding) {
|
||||
IASTName name= (IASTName)token.getNode();
|
||||
if (!name.isReference()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Semantic highlighting for typedefs.
|
||||
|
@ -1927,31 +1676,21 @@ public class SemanticHighlightings {
|
|||
public static SemanticHighlighting[] getSemanticHighlightings() {
|
||||
if (fgSemanticHighlightings == null)
|
||||
fgSemanticHighlightings= new SemanticHighlighting[] {
|
||||
new MacroSubstitutionHighlighting(), // before all others!
|
||||
new MacroReferenceHighlighting(), // before all others!
|
||||
new ProblemHighlighting(),
|
||||
new ClassHighlighting(),
|
||||
// new StaticConstFieldHighlighting(),
|
||||
new StaticFieldHighlighting(),
|
||||
new FieldHighlighting(), // after all other fields
|
||||
new MethodDeclarationHighlighting(),
|
||||
// TLETODO [semanticHighlighting] Static method invocations
|
||||
// new StaticMethodInvocationHighlighting(),
|
||||
// TLETODO [semanticHighlighting] Virtual method invocations
|
||||
// new VirtualMethodInvocationHighlighting(),
|
||||
// TLETODO [semanticHighlighting] Inherited method invocations
|
||||
// new InheritedMethodInvocationHighlighting(),
|
||||
new StaticMethodInvocationHighlighting(),
|
||||
new ParameterVariableHighlighting(), // before local variables
|
||||
new LocalVariableDeclarationHighlighting(),
|
||||
new LocalVariableHighlighting(),
|
||||
new GlobalVariableHighlighting(),
|
||||
// TLETODO [semanticHighlighting] Template parameter highlighting
|
||||
new TemplateParameterHighlighting(), // before template arguments!
|
||||
new MethodHighlighting(), // before types to get ctors
|
||||
// TLETODO [semanticHighlighting] Template argument highlighting
|
||||
// new TemplateArgumentHighlighting(), // before other types
|
||||
new EnumHighlighting(),
|
||||
// TLETODO [semanticHighlighting] Macro definition highlighting
|
||||
// new MacroDefinitionHighlighting(),
|
||||
new MacroDefinitionHighlighting(),
|
||||
new FunctionDeclarationHighlighting(),
|
||||
new FunctionHighlighting(),
|
||||
new TypedefHighlighting(),
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2000, 2006 IBM Corporation and others.
|
||||
* Copyright (c) 2000, 2007 IBM Corporation 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
|
||||
|
@ -851,6 +851,7 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
|
|||
*/
|
||||
private SemanticHighlightingManager.HighlightedRange[][] createPreviewerRanges() {
|
||||
return new SemanticHighlightingManager.HighlightedRange[][] {
|
||||
{ createHighlightedRange( 2, 8, 5, SemanticHighlightings.MACRO_DEFINITION) },
|
||||
{ createHighlightedRange( 3, 16, 3, SemanticHighlightings.NAMESPACE) },
|
||||
{ createHighlightedRange( 5, 21, 4, SemanticHighlightings.TYPEDEF) },
|
||||
{ createHighlightedRange( 6, 11, 6, SemanticHighlightings.FUNCTION_DECLARATION), createHighlightedRange( 6, 11, 6, SemanticHighlightings.FUNCTION) },
|
||||
|
@ -877,9 +878,11 @@ class CEditorColoringConfigurationBlock extends AbstractConfigurationBlock {
|
|||
{ createHighlightedRange(18, 0, 5, SemanticHighlightings.LABEL) },
|
||||
{ createHighlightedRange(18, 7, 6, SemanticHighlightings.FUNCTION) },
|
||||
{ createHighlightedRange(18, 14, 5, SemanticHighlightings.LOCAL_VARIABLE) },
|
||||
{ createHighlightedRange(18, 21, 11, SemanticHighlightings.MACRO_SUBSTITUTION) },
|
||||
{ createHighlightedRange(18, 21, 5, SemanticHighlightings.MACRO_REFERENCE) },
|
||||
{ createHighlightedRange(19, 4, 7, SemanticHighlightings.METHOD) },
|
||||
{ createHighlightedRange(20, 4, 7, SemanticHighlightings.PROBLEM) },
|
||||
{ createHighlightedRange(20, 4, 12, SemanticHighlightings.STATIC_METHOD_INVOCATION), createHighlightedRange(20, 4, 12, SemanticHighlightings.METHOD) },
|
||||
{ createHighlightedRange(21, 4, 7, SemanticHighlightings.PROBLEM) },
|
||||
{ createHighlightedRange(23, 14, 12, SemanticHighlightings.METHOD_DECLARATION), createHighlightedRange(23, 14, 12, SemanticHighlightings.METHOD) },
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -18,6 +18,8 @@ public:
|
|||
int local= (int)n;
|
||||
label: myfunc(local, MACRO('\0'));
|
||||
vmethod();
|
||||
staticMethod();
|
||||
problem();
|
||||
}
|
||||
static void staticMethod();
|
||||
};
|
Loading…
Add table
Reference in a new issue