From 7411260aef9d247bfe61bb9af991bff1461bb4fe Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 14 Nov 2007 11:06:55 +0000 Subject: [PATCH] Makes CPreprocessor the default scanner. --- .../cdt/core/model/tests/IIncludeTests.java | 4 +- .../core/parser/tests/ast2/AST2BaseTest.java | 2 +- .../tests/scanner/LocationMapTests.java | 32 +++----------- .../core/dom/parser/c/AbstractCLanguage.java | 2 +- .../dom/parser/cpp/AbstractCPPLanguage.java | 2 +- .../cdt/internal/core/dom/parser/ASTNode.java | 12 ++++- .../parser/scanner/ASTPreprocessorName.java | 2 +- .../parser/scanner/ASTPreprocessorNode.java | 44 ++++--------------- .../core/parser/scanner2/DOMScanner.java | 3 ++ .../core/dom/InternalASTServiceProvider.java | 2 +- 10 files changed, 35 insertions(+), 70 deletions(-) diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/IIncludeTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/IIncludeTests.java index be732e92380..c50d86e2d10 100644 --- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/IIncludeTests.java +++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/IIncludeTests.java @@ -23,7 +23,7 @@ import junit.framework.TestSuite; import org.eclipse.cdt.core.model.CModelException; import org.eclipse.cdt.core.model.IInclude; import org.eclipse.cdt.core.model.ITranslationUnit; -import org.eclipse.cdt.internal.core.parser.scanner.CPreprocessor; +import org.eclipse.cdt.internal.core.parser.scanner2.DOMScanner; /** * @author bnicolle @@ -38,7 +38,7 @@ public class IIncludeTests extends IntegratedCModelTest { */ public IIncludeTests(String string) { super( string ); - fUseCPreprocessor= CPreprocessor.PROP_VALUE.equals(System.getProperty("scanner")); + fUseCPreprocessor= !DOMScanner.PROP_VALUE.equals(System.getProperty("scanner")); } /** diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java index 53d2920cd27..cc58c8d8e37 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java @@ -162,7 +162,7 @@ public class AST2BaseTest extends BaseTestCase { else configuration = new GPPScannerExtensionConfiguration(); IScanner scanner; - if (CPreprocessor.PROP_VALUE.equals(System.getProperty("scanner"))) { + if (!DOMScanner.PROP_VALUE.equals(System.getProperty("scanner"))) { scanner= new CPreprocessor(codeReader, scannerInfo, lang, NULL_LOG, configuration, FileCodeReaderFactory.getInstance()); } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/LocationMapTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/LocationMapTests.java index 0bc4dd866ab..68a700770db 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/LocationMapTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/scanner/LocationMapTests.java @@ -125,32 +125,15 @@ public class LocationMapTests extends BaseTestCase { assertSame(parent, node.getParent()); assertEquals(property, node.getPropertyInParent()); assertSame(parent.getTranslationUnit(), node.getTranslationUnit()); + assertEquals(filename, node.getContainingFilename()); if (offset >= 0) { - assertEquals(filename, node.getContainingFilename()); IASTFileLocation loc= node.getFileLocation(); checkLocation(loc, filename, offset, length, line, endline); assertEquals(sig, node.getRawSignature()); } else { - try { - node.getContainingFilename(); - fail(); - } - catch (UnsupportedOperationException e) { - } - try { - node.getFileLocation(); - fail(); - } - catch (UnsupportedOperationException e) { - } - try { - node.getRawSignature(); - fail(); - } - catch (UnsupportedOperationException e) { - } + assertNull(node.getFileLocation()); } } @@ -287,12 +270,9 @@ public class LocationMapTests extends BaseTestCase { checkASTNode(mp, fd, IASTPreprocessorFunctionStyleMacroDefinition.PARAMETER, filename, -1, 0, -1, 0, null); } } - int expectCount= offset >= 0 ? 1 : 0; IASTName[] decls= fLocationMap.getDeclarations(binding); - assertEquals(expectCount, decls.length); - if (expectCount > 0) { - assertSame(macro.getName(), decls[0]); - } + assertEquals(1, decls.length); + assertSame(macro.getName(), decls[0]); } private void checkMacroUndef(IASTPreprocessorStatement s, IBinding binding, String image, String name, String nameImage, @@ -439,8 +419,8 @@ public class LocationMapTests extends BaseTestCase { fLocationMap.registerPredefinedMacro(macro2); IASTPreprocessorMacroDefinition[] prep= fLocationMap.getBuiltinMacroDefinitions(); assertEquals(2, prep.length); - checkMacroDefinition(prep[0], macro1, "", "n1", "n1", "exp1", null, FN, -1, 0, 0, -1, 0); - checkMacroDefinition(prep[1], macro2, "", "n2", "n2", "exp2", params, FN, -1, 0, 0, -1, 0); + checkMacroDefinition(prep[0], macro1, "", "n1", "n1", "exp1", null, "", -1, 0, 0, -1, 0); + checkMacroDefinition(prep[1], macro2, "", "n2", "n2", "exp2", params, "", -1, 0, 0, -1, 0); } public void testIndexDefine() { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/c/AbstractCLanguage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/c/AbstractCLanguage.java index b776222dd94..2f5e7f654ac 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/c/AbstractCLanguage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/c/AbstractCLanguage.java @@ -152,7 +152,7 @@ public abstract class AbstractCLanguage extends AbstractLanguage implements ICLa * @return an instance of IScanner */ protected IScanner createScanner(CodeReader reader, IScannerInfo scanInfo, ICodeReaderFactory fileCreator, IParserLogService log) { - if (CPreprocessor.PROP_VALUE.equals(System.getProperty("scanner"))) { //$NON-NLS-1$ + if (!DOMScanner.PROP_VALUE.equals(System.getProperty("scanner"))) { //$NON-NLS-1$ return new CPreprocessor(reader, scanInfo, ParserLanguage.C, log, getScannerExtensionConfiguration(), fileCreator); } return new DOMScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE, ParserLanguage.C, diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/AbstractCPPLanguage.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/AbstractCPPLanguage.java index 5d22119112c..18cab1fa647 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/AbstractCPPLanguage.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/parser/cpp/AbstractCPPLanguage.java @@ -148,7 +148,7 @@ public abstract class AbstractCPPLanguage extends AbstractLanguage implements IC * @return an instance of IScanner */ protected IScanner createScanner(CodeReader reader, IScannerInfo scanInfo, ICodeReaderFactory fileCreator, IParserLogService log) { - if (CPreprocessor.PROP_VALUE.equals(System.getProperty("scanner"))) { //$NON-NLS-1$ + if (!DOMScanner.PROP_VALUE.equals(System.getProperty("scanner"))) { //$NON-NLS-1$ return new CPreprocessor(reader, scanInfo, ParserLanguage.CPP, log, getScannerExtensionConfiguration(), fileCreator); } return new DOMScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java index 7b631d68321..fa2ff7fca3e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java @@ -126,13 +126,23 @@ public abstract class ASTNode implements IASTNode { } public String getContainingFilename() { + if (offset <= 0 && (length == 0 || offset < 0)) { + final IASTNode parent = getParent(); + if (parent == null) { + if (this instanceof IASTTranslationUnit) { + return ((IASTTranslationUnit) this).getFilePath(); + } + return ""; //$NON-NLS-1$ + } + return parent.getContainingFilename(); + } return getTranslationUnit().getContainingFilename(offset); } public IASTFileLocation getFileLocation() { if( fileLocation != null ) return fileLocation; - if (offset == 0 && length == 0) { + if (offset <= 0 && (length == 0 || offset < 0)) { return null; } IASTTranslationUnit ast = getTranslationUnit(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java index e96fa238fa9..5846add5258 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorName.java @@ -92,7 +92,7 @@ class ASTBuiltinName extends ASTPreprocessorDefinition { public String getContainingFilename() { if (fFileLocation == null) { - throw new UnsupportedOperationException(); + return ""; //$NON-NLS-1$ } return fFileLocation.getFileName(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java index 0b49a4ee68d..dbc05543e5e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ASTPreprocessorNode.java @@ -68,42 +68,6 @@ abstract class ASTPreprocessorNode extends ASTNode { return CharArrayUtils.EMPTY; } - public String getContainingFilename() { - if (super.getOffset() == -1) { - throw new UnsupportedOperationException(); - } - return super.getContainingFilename(); - } - - public IASTFileLocation getFileLocation() { - if (super.getOffset() == -1) { - throw new UnsupportedOperationException(); - } - return super.getFileLocation(); - } - - public int getLength() { - if (super.getOffset() == -1) { - throw new UnsupportedOperationException(); - } - return super.getLength(); - } - - public int getOffset() { - final int offset = super.getOffset(); - if (offset == -1) { - throw new UnsupportedOperationException(); - } - return offset; - } - - public String getRawSignature() { - if (super.getOffset() == -1) { - throw new UnsupportedOperationException(); - } - return super.getRawSignature(); - } - /** * Returns a subnode surrounding the given range or this. */ @@ -293,6 +257,14 @@ class ASTObjectStyleMacroDefinition extends ASTPreprocessorNode implements IASTP fExpansionOffset= expansionOffset; } + + public String getContainingFilename() { + if (fName instanceof ASTBuiltinName) { + return fName.getContainingFilename(); + } + return super.getContainingFilename(); + } + protected IMacroBinding getMacro() { return (IMacroBinding) fName.getBinding(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java index f246e96033d..1470305fc3a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/DOMScanner.java @@ -36,10 +36,13 @@ import org.eclipse.cdt.core.parser.util.CharArrayUtils; /** * @author jcamelon + * @deprecated will be removed in 5.0 */ public class DOMScanner extends BaseScanner { private static final Class CHAR_ARRAY_CLASS = new char[]{}.getClass(); + public static final String PROP_VALUE = "DOMScanner"; //$NON-NLS-1$ + private final IScannerPreprocessorLog locationMap = new LocationMap(); private final IIncludeFileTester createPathTester= new IIncludeFileTester() { public Object checkFile(String path, String fileName) { diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/InternalASTServiceProvider.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/InternalASTServiceProvider.java index 14a8797d5d2..6b8099e8ca5 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/InternalASTServiceProvider.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/dom/InternalASTServiceProvider.java @@ -231,7 +231,7 @@ public class InternalASTServiceProvider implements IASTServiceProvider { private IScanner createScanner(CodeReader reader, IScannerInfo scanInfo, ParserMode mode, ParserLanguage lang, IParserLogService log, IScannerExtensionConfiguration scanConfig, ICodeReaderFactory fileCreator) { - if (CPreprocessor.PROP_VALUE.equals(System.getProperty("scanner"))) { //$NON-NLS-1$ + if (!DOMScanner.PROP_VALUE.equals(System.getProperty("scanner"))) { //$NON-NLS-1$ return new CPreprocessor(reader, scanInfo, lang, log, scanConfig, fileCreator); } return new DOMScanner(reader, scanInfo, mode, lang, log, scanConfig, fileCreator);