diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index 2bd4e4ba97b..7ee8739aec9 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,7 @@ +2004-01-26 John Camelon + Updated clients to use new Scanner logging service. + Added ScannerTestCase.testBug46402(). + 2004-01-22 John Camelon Updated Scanner tests for package updates in the core. diff --git a/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java b/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java index b34e6571573..d6f192fdcfa 100644 --- a/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java +++ b/core/org.eclipse.cdt.core.tests/build/org/eclipse/cdt/core/build/managed/tests/ManagedBuildTests.java @@ -28,6 +28,7 @@ import org.eclipse.cdt.core.parser.IScannerInfo; import org.eclipse.cdt.core.parser.IScannerInfoChangeListener; import org.eclipse.cdt.core.parser.IScannerInfoProvider; import org.eclipse.cdt.core.parser.ISourceElementRequestor; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.NullSourceElementRequestor; import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserLanguage; @@ -982,7 +983,7 @@ public class ManagedBuildTests extends TestCase { ISourceElementRequestor callback = new NullSourceElementRequestor(); IScanner scanner = ParserFactory.createScanner( new StringReader( "#include \n int A::i = 1;" ), - "TEST", info, ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, callback, null); + "TEST", info, ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, callback, new NullLogService()); IParser parser = ParserFactory.createParser( scanner, callback, ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, null ); assertTrue( parser.parse() ); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseASTTest.java index 9d558605c31..d5a78555f6e 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseASTTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseASTTest.java @@ -17,6 +17,7 @@ import junit.framework.TestCase; import org.eclipse.cdt.core.parser.IParser; import org.eclipse.cdt.core.parser.IQuickParseCallback; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserFactoryError; import org.eclipse.cdt.core.parser.ParserLanguage; @@ -50,7 +51,7 @@ public class BaseASTTest extends TestCase { ParserMode mode = quick ? ParserMode.QUICK_PARSE : ParserMode.COMPLETE_PARSE; quickParseCallback = ParserFactory.createQuickParseCallback(); - parser = ParserFactory.createParser( ParserFactory.createScanner( new StringReader( code ), "code", new ScannerInfo(), mode, lang, quickParseCallback, null), quickParseCallback, mode, lang, null ); + parser = ParserFactory.createParser( ParserFactory.createScanner( new StringReader( code ), "code", new ScannerInfo(), mode, lang, quickParseCallback, new NullLogService()), quickParseCallback, mode, lang, null ); if( ! parser.parse() && throwExceptionOnError ) throw new ParserException("Parse failure"); return quickParseCallback.getCompilationUnit(); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java index ac4a3232bcd..a22b9288cbc 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BranchTrackerTest.java @@ -1,3 +1,13 @@ +/******************************************************************************* + * Copyright (c) 2003,2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v05.html + * + * Contributors: + * IBM Corp. - Rational Software - initial implementation + ******************************************************************************/ package org.eclipse.cdt.core.parser.tests; import java.util.EmptyStackException; @@ -8,11 +18,6 @@ import org.eclipse.cdt.internal.core.parser.scanner.BranchTracker; /** * @author jcamelon - * - * To change this generated comment edit the template variable "typecomment": - * Window>Preferences>Java>Templates. - * To enable and disable the creation of type comments go to - * Window>Preferences>Java>Code Generation. */ public class BranchTrackerTest extends TestCase { @@ -42,13 +47,13 @@ public class BranchTrackerTest extends TestCase { * #endif */ - assertFalse( bt.poundif( false ) ); - assertFalse( bt.poundif( true ) ); - assertFalse( bt.poundelif( true ) ); - assertFalse( bt.poundelse() ); - assertFalse( bt.poundendif() ); - assertTrue( bt.poundelse() ); - assertTrue( bt.poundendif() ); + assertFalse( bt.poundIf( false ) ); + assertFalse( bt.poundIf( true ) ); + assertFalse( bt.poundElif( true ) ); + assertFalse( bt.poundElse() ); + assertFalse( bt.poundEndif() ); + assertTrue( bt.poundElse() ); + assertTrue( bt.poundEndif() ); /* * #if 0 @@ -67,19 +72,19 @@ public class BranchTrackerTest extends TestCase { */ bt = new BranchTracker(); - assertFalse( bt.poundif( false ) ); - assertFalse( bt.poundif( true )); - assertFalse( bt.poundelif( true ) ); - assertFalse( bt.poundelse() ); - assertFalse( bt.poundendif() ); - assertTrue( bt.poundelse() ); - assertFalse( bt.poundif( false ) ); - assertTrue( bt.poundelif( true ) ); - assertFalse( bt.poundelif( false ) ); - assertFalse( bt.poundelif( true ) ); - assertFalse( bt.poundelse() ); - assertTrue( bt.poundendif() ); - assertTrue( bt.poundendif() ); + assertFalse( bt.poundIf( false ) ); + assertFalse( bt.poundIf( true )); + assertFalse( bt.poundElif( true ) ); + assertFalse( bt.poundElse() ); + assertFalse( bt.poundEndif() ); + assertTrue( bt.poundElse() ); + assertFalse( bt.poundIf( false ) ); + assertTrue( bt.poundElif( true ) ); + assertFalse( bt.poundElif( false ) ); + assertFalse( bt.poundElif( true ) ); + assertFalse( bt.poundElse() ); + assertTrue( bt.poundEndif() ); + assertTrue( bt.poundEndif() ); assertEquals( 0, bt.getDepth() ); /* @@ -110,31 +115,31 @@ public class BranchTrackerTest extends TestCase { * #endif */ - assertFalse(bt.poundif(false)); - assertFalse(bt.poundif(true)); - assertFalse(bt.poundelif(false)); - assertFalse(bt.poundelif(true)); - assertFalse(bt.poundelse()); - assertFalse( bt.poundendif() ); - assertFalse(bt.poundelif(false)); - assertFalse(bt.poundif(false)); - assertFalse(bt.poundelif(false)); - assertFalse(bt.poundelif(true)); - assertFalse(bt.poundelse()); - assertFalse( bt.poundendif()); - assertTrue(bt.poundelif(true)); - assertFalse(bt.poundif(false)); - assertFalse(bt.poundelif(false)); - assertFalse(bt.poundelif(false)); - assertTrue(bt.poundelse()); - assertTrue( bt.poundendif() ); - assertFalse(bt.poundelse()); - assertFalse(bt.poundif(true)); - assertFalse(bt.poundelif(false)); - assertFalse(bt.poundelif(true)); - assertFalse(bt.poundelse()); - assertFalse( bt.poundendif() ); - assertTrue( bt.poundendif() ); + assertFalse(bt.poundIf(false)); + assertFalse(bt.poundIf(true)); + assertFalse(bt.poundElif(false)); + assertFalse(bt.poundElif(true)); + assertFalse(bt.poundElse()); + assertFalse( bt.poundEndif() ); + assertFalse(bt.poundElif(false)); + assertFalse(bt.poundIf(false)); + assertFalse(bt.poundElif(false)); + assertFalse(bt.poundElif(true)); + assertFalse(bt.poundElse()); + assertFalse( bt.poundEndif()); + assertTrue(bt.poundElif(true)); + assertFalse(bt.poundIf(false)); + assertFalse(bt.poundElif(false)); + assertFalse(bt.poundElif(false)); + assertTrue(bt.poundElse()); + assertTrue( bt.poundEndif() ); + assertFalse(bt.poundElse()); + assertFalse(bt.poundIf(true)); + assertFalse(bt.poundElif(false)); + assertFalse(bt.poundElif(true)); + assertFalse(bt.poundElse()); + assertFalse( bt.poundEndif() ); + assertTrue( bt.poundEndif() ); assertEquals(0, bt.getDepth()); } catch (EmptyStackException se) { fail("Unexpected Scanner exception thrown"); @@ -152,9 +157,9 @@ public class BranchTrackerTest extends TestCase { * #endif */ BranchTracker bt = new BranchTracker(); - assertTrue( bt.poundif( true ) ); - assertFalse( bt.poundelse() ); - assertTrue( bt.poundendif() ); + assertTrue( bt.poundIf( true ) ); + assertFalse( bt.poundElse() ); + assertTrue( bt.poundEndif() ); /* * code sequence is @@ -167,13 +172,13 @@ public class BranchTrackerTest extends TestCase { * #endif */ bt = new BranchTracker(); - assertTrue( bt.poundif( true )); - assertFalse( bt.poundif( false )); - assertFalse( bt.poundelif( false )); - assertTrue( bt.poundelse()); - assertTrue( bt.poundendif() ); - assertFalse( bt.poundelse() ); - assertTrue( bt.poundendif() ); + assertTrue( bt.poundIf( true )); + assertFalse( bt.poundIf( false )); + assertFalse( bt.poundElif( false )); + assertTrue( bt.poundElse()); + assertTrue( bt.poundEndif() ); + assertFalse( bt.poundElse() ); + assertTrue( bt.poundEndif() ); /* * #if 1 @@ -184,11 +189,11 @@ public class BranchTrackerTest extends TestCase { */ bt = new BranchTracker(); - assertTrue( bt.poundif( true ) ); - assertFalse( bt.poundelif( true )); - assertFalse( bt.poundelif( false )); - assertFalse( bt.poundelse()); - assertTrue( bt.poundendif() ); + assertTrue( bt.poundIf( true ) ); + assertFalse( bt.poundElif( true )); + assertFalse( bt.poundElif( false )); + assertFalse( bt.poundElse()); + assertTrue( bt.poundEndif() ); } @@ -197,5 +202,4 @@ public class BranchTrackerTest extends TestCase { fail( "Exception" ); } } - } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java index 7427bdc405c..e0e099f4721 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java @@ -25,6 +25,7 @@ import org.eclipse.cdt.core.parser.IParser; import org.eclipse.cdt.core.parser.IProblem; import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate; import org.eclipse.cdt.core.parser.ISourceElementRequestor; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserFactoryError; import org.eclipse.cdt.core.parser.ParserLanguage; @@ -697,7 +698,7 @@ public class CompleteParseBaseTest extends TestCase callback = new FullParseCallback(); IParser parser = ParserFactory.createParser( ParserFactory.createScanner( new StringReader( code ), "test-code", new ScannerInfo(), - ParserMode.COMPLETE_PARSE, language, callback, null ), callback, ParserMode.COMPLETE_PARSE, language, null + ParserMode.COMPLETE_PARSE, language, callback, new NullLogService() ), callback, ParserMode.COMPLETE_PARSE, language, null ); if( ! parser.parse() && throwOnError ) throw new ParserException( "FAILURE"); return callback.getCompilationUnit(); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ContextualParseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ContextualParseTest.java index c656261ad53..68c0b772cca 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ContextualParseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ContextualParseTest.java @@ -12,10 +12,11 @@ import java.io.Writer; import java.util.Iterator; import org.eclipse.cdt.core.parser.IParser; -import org.eclipse.cdt.core.parser.IParserLogService; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserMode; +import org.eclipse.cdt.core.parser.ParserUtil; import org.eclipse.cdt.core.parser.ScannerInfo; import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; import org.eclipse.cdt.core.parser.ast.IASTCodeScope; @@ -28,7 +29,6 @@ import org.eclipse.cdt.core.parser.ast.IASTParameterDeclaration; import org.eclipse.cdt.core.parser.ast.IASTVariable; import org.eclipse.cdt.core.parser.ast.IASTNode.ILookupResult; import org.eclipse.cdt.core.parser.ast.IASTNode.LookupKind; -import org.eclipse.cdt.internal.core.parser.ParserLogService; /** * @author jcamelon @@ -45,7 +45,6 @@ public class ContextualParseTest extends CompleteParseBaseTest { protected IASTCompletionNode parse(String code, int offset) throws Exception { - IParserLogService log = new ParserLogService(); callback = new FullParseCallback(); IParser parser = null; @@ -58,11 +57,11 @@ public class ContextualParseTest extends CompleteParseBaseTest { ParserMode.COMPLETION_PARSE, ParserLanguage.CPP, callback, - log), + new NullLogService()), callback, ParserMode.COMPLETION_PARSE, ParserLanguage.CPP, - log); + ParserUtil.getParserLogService()); return parser.parse( offset ); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ExprEvalTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ExprEvalTest.java index 68072d7394f..6693466c27a 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ExprEvalTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ExprEvalTest.java @@ -7,12 +7,13 @@ import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.NullSourceElementRequestor; -import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserMode; -import org.eclipse.cdt.core.parser.ast.IASTExpression; import org.eclipse.cdt.core.parser.ScannerInfo; +import org.eclipse.cdt.core.parser.ast.IASTExpression; public class ExprEvalTest extends TestCase { @@ -27,7 +28,7 @@ public class ExprEvalTest extends TestCase { public void runTest(String code, int expectedValue) throws Exception { final NullSourceElementRequestor nullCallback = new NullSourceElementRequestor(); - IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), getClass().getName(), new ScannerInfo(), null, ParserLanguage.CPP, nullCallback, null ), nullCallback, ParserMode.QUICK_PARSE, ParserLanguage.CPP, null ); + IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), getClass().getName(), new ScannerInfo(), null, ParserLanguage.CPP, nullCallback, new NullLogService() ), nullCallback, ParserMode.QUICK_PARSE, ParserLanguage.CPP, null ); IASTExpression expression = parser.expression(null); assertEquals(expectedValue, expression.evaluateExpression()); } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/FractionalAutomatedTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/FractionalAutomatedTest.java index 615499b4ec3..fb7b309bde9 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/FractionalAutomatedTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/FractionalAutomatedTest.java @@ -23,6 +23,7 @@ import java.util.StringTokenizer; import junit.framework.Test; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserMode; @@ -241,7 +242,7 @@ public class FractionalAutomatedTest extends AutomatedFramework { result = null; ParserLanguage language = cppNature ? ParserLanguage.CPP : ParserLanguage.C; IParser parser = ParserFactory.createParser( - ParserFactory.createScanner( new StringReader( code ), null, new ScannerInfo(), ParserMode.QUICK_PARSE, language, nullCallback, null ), nullCallback, ParserMode.QUICK_PARSE, language, null ); + ParserFactory.createScanner( new StringReader( code ), null, new ScannerInfo(), ParserMode.QUICK_PARSE, language, nullCallback, new NullLogService() ), nullCallback, ParserMode.QUICK_PARSE, language, null ); parser.parse(); } catch ( Exception e ){ diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java index 205b5500e4c..3824cdd8bf4 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java @@ -1,3 +1,14 @@ +/******************************************************************************* + * Copyright (c) 2003,2004 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v05.html + * + * Contributors: + * IBM Corp. - Rational Software - initial implementation + ******************************************************************************/ + package org.eclipse.cdt.core.parser.tests; import java.io.StringWriter; @@ -18,11 +29,6 @@ import org.eclipse.cdt.internal.core.parser.token.Token; /** * @author jcamelon - * - * To change this generated comment edit the template variable "typecomment": - * Window>Preferences>Java>Templates. - * To enable and disable the creation of type comments go to - * Window>Preferences>Java>Code Generation. */ public class ScannerTestCase extends BaseScannerTest { @@ -1528,4 +1534,17 @@ public class ScannerTestCase extends BaseScannerTest assertEquals( callback.inclusions.size(), 1 ); assertEquals( callback.inclusions.get(0), "stdio.h"); } + + public void testBug46402() throws Exception + { + StringBuffer buffer = new StringBuffer(); + buffer.append( "#define X 5\n" ); + buffer.append( "#if defined( X )\n" ); + buffer.append( "// blah\n" ); + buffer.append( "#elif Y > 5 \n" ); + buffer.append( "// coo\n" ); + buffer.append( "#endif\n" ); + initializeScanner( buffer.toString(), ParserMode.COMPLETE_PARSE ); + validateEOF(); + } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/TortureTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/TortureTest.java index 630b25a72fa..8a8cb12d6ca 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/TortureTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/TortureTest.java @@ -24,6 +24,7 @@ import junit.framework.Test; import org.eclipse.cdt.core.parser.ILineOffsetReconciler; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserMode; @@ -280,7 +281,7 @@ public class TortureTest extends FractionalAutomatedTest { ParserMode parserMode = quickParse ? ParserMode.QUICK_PARSE : ParserMode.COMPLETE_PARSE; ParserLanguage language = cppNature ? ParserLanguage.CPP : ParserLanguage.C; parser = ParserFactory.createParser( - ParserFactory.createScanner( new StringReader( code ), null, new ScannerInfo(), parserMode, language, nullCallback, null ), nullCallback, parserMode, language, null); + ParserFactory.createScanner( new StringReader( code ), null, new ScannerInfo(), parserMode, language, nullCallback, new NullLogService() ), nullCallback, parserMode, language, null); mapping = ParserFactory.createLineOffsetReconciler( new StringReader( code ) ); diff --git a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/ParseTestOnSearchFiles.java b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/ParseTestOnSearchFiles.java index 9e099a55684..0d245bbb75b 100644 --- a/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/ParseTestOnSearchFiles.java +++ b/core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/ParseTestOnSearchFiles.java @@ -18,6 +18,7 @@ import junit.framework.TestCase; import org.eclipse.cdt.core.parser.IParser; import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.ISourceElementRequestor; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.NullSourceElementRequestor; import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserLanguage; @@ -58,7 +59,7 @@ public class ParseTestOnSearchFiles extends TestCase public void testParseOfAndrewsFile() throws Exception { ISourceElementRequestor requestor = new NullSourceElementRequestor(); - IScanner scanner = ParserFactory.createScanner( new InputStreamReader( fileIn ), name, new ScannerInfo(), ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, requestor, null ); + IScanner scanner = ParserFactory.createScanner( new InputStreamReader( fileIn ), name, new ScannerInfo(), ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, requestor, new NullLogService() ); IParser parser = ParserFactory.createParser( scanner, requestor, ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, null ); assertTrue( parser.parse() ); } diff --git a/core/org.eclipse.cdt.core/.options b/core/org.eclipse.cdt.core/.options index 0bca2486a24..b6b5aef4f4b 100644 --- a/core/org.eclipse.cdt.core/.options +++ b/core/org.eclipse.cdt.core/.options @@ -6,6 +6,9 @@ org.eclipse.cdt.core/debug/model=false # Reports parser activity org.eclipse.cdt.core/debug/parser=false +# Reports scanner activity +org.eclipse.cdt.core/debug/scanner=false + # Reports background indexer activity: indexing, saving index file, index queries org.eclipse.cdt.core/debug/indexmanager=false diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index 8e80a5f70b9..aaa75df634e 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,6 @@ +2004-01-26 John Camelon + Updated clients to use new Scanner logging service. + 2004-01-06 Alain Magloire Simple draft implementation of debug format parsing. diff --git a/core/org.eclipse.cdt.core/index/ChangeLog b/core/org.eclipse.cdt.core/index/ChangeLog index 550e7f2e8a8..ec3883690ae 100644 --- a/core/org.eclipse.cdt.core/index/ChangeLog +++ b/core/org.eclipse.cdt.core/index/ChangeLog @@ -1,3 +1,6 @@ +2004-01-26 John Camelon + Updated clients to use new Scanner logging service. + 2003-10-22 Bogdan Gheorghe Added updateDependencies() to the IndexManager to request diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java index 2091ffe5bf1..75cada09a3c 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java @@ -91,7 +91,7 @@ public class SourceIndexer extends AbstractIndexer { try { parser = ParserFactory.createParser( - ParserFactory.createScanner( new StringReader( document.getStringContent() ), resourceFile.getLocation().toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getParserLogService() ), + ParserFactory.createScanner( new StringReader( document.getStringContent() ), resourceFile.getLocation().toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getScannerLogService() ), requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() ); } catch( ParserFactoryError pfe ) { diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java index f975b457003..40b444271f4 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java @@ -26,6 +26,7 @@ import org.eclipse.cdt.core.parser.IParser; import org.eclipse.cdt.core.parser.IQuickParseCallback; import org.eclipse.cdt.core.parser.IScannerInfo; import org.eclipse.cdt.core.parser.IScannerInfoProvider; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserFactoryError; import org.eclipse.cdt.core.parser.ParserLanguage; @@ -126,7 +127,7 @@ public class CModelBuilder { mode, language, quickParseCallback, - ParserUtil.getParserLogService()) + quickParseMode ? new NullLogService() : ParserUtil.getScannerLogService()) ,quickParseCallback, mode, language, diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IDebugLogConstants.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IDebugLogConstants.java index a380620755b..6540954f562 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IDebugLogConstants.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/IDebugLogConstants.java @@ -1,26 +1,30 @@ -/* - * Created on Aug 25, 2003 - * - * To change the template for this generated file go to - * Window>Preferences>Java>Code Generation>Code and Comments - */ -package org.eclipse.cdt.internal.core.model; +/********************************************************************** + * Copyright (c) 2002,2003,2004 Rational Software Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v05.html + * + * Contributors: + * IBM Rational Software - Initial API and implementation +***********************************************************************/package org.eclipse.cdt.internal.core.model; + +import org.eclipse.cdt.core.parser.Enum; /** * @author bgheorgh * - * To change the template for this generated type comment go to - * Window>Preferences>Java>Code Generation>Code and Comments */ public interface IDebugLogConstants { - public class DebugLogConstant { - private DebugLogConstant( int value ) + public class DebugLogConstant extends Enum { + protected DebugLogConstant( int value ) { - this.value = value; + super( value ); } - private final int value; + } public static final DebugLogConstant PARSER = new DebugLogConstant( 1 ); public static final DebugLogConstant MODEL = new DebugLogConstant ( 2 ); + public static final DebugLogConstant SCANNER = new DebugLogConstant( 3 ); } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Util.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Util.java index c5b5885de5d..01ec0355b85 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Util.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/Util.java @@ -25,6 +25,7 @@ import org.eclipse.core.runtime.Status; public class Util implements ICLogConstants { public static boolean VERBOSE_PARSER = false; + public static boolean VERBOSE_SCANNER = false; public static boolean VERBOSE_MODEL = false; private Util() { @@ -214,6 +215,8 @@ public class Util implements ICLogConstants { if (client.equals(IDebugLogConstants.PARSER)){ return VERBOSE_PARSER; } + else if (client.equals(IDebugLogConstants.SCANNER )) + return VERBOSE_SCANNER; else if (client.equals(IDebugLogConstants.MODEL)){ return VERBOSE_MODEL; } diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog-parser b/core/org.eclipse.cdt.core/parser/ChangeLog-parser index 63d44007c0b..4831e852e84 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog-parser +++ b/core/org.eclipse.cdt.core/parser/ChangeLog-parser @@ -1,3 +1,9 @@ +2004-01-26 John Camelon + Added traceLogs into Scanner. + Fixed Bug 46402 : expression evaluation error on branch not taken + Added beginning of IScannerExtension and GCCScannerExtension support for gcc specific aspects. + Added separate Scanner log category for tracing and updated clients to use it. + 2004-01-23 John Camelon Added support for content assist in the scanner.. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScannerExtension.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScannerExtension.java new file mode 100644 index 00000000000..17fd43aae13 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScannerExtension.java @@ -0,0 +1,19 @@ +/********************************************************************** + * Copyright (c) 2002,2003 Rational Software Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v05.html + * + * Contributors: + * IBM Rational Software - Initial API and implementation +***********************************************************************/ +package org.eclipse.cdt.core.parser; + +/** + * @author jcamelon + */ +public interface IScannerExtension { + + public String initializeMacroValue( String original ); +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullLogService.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullLogService.java new file mode 100644 index 00000000000..4dce2e10b5b --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullLogService.java @@ -0,0 +1,30 @@ +/********************************************************************** + * Copyright (c) 2002,2003 Rational Software Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v05.html + * + * Contributors: + * IBM Rational Software - Initial API and implementation +***********************************************************************/ +package org.eclipse.cdt.core.parser; + +/** + * @author jcamelon + */ +public class NullLogService implements IParserLogService { + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.IParserLogService#traceLog(java.lang.String) + */ + public void traceLog(String message) { + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.IParserLogService#errorLog(java.lang.String) + */ + public void errorLog(String message) { + } + +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ContextualParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ContextualParser.java index a3bd0659c52..7fa173439d4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ContextualParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ContextualParser.java @@ -26,6 +26,7 @@ import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ast.IASTCompletionNode; +import org.eclipse.cdt.core.parser.ast.IASTExpression; import org.eclipse.cdt.core.parser.ast.IASTNode; import org.eclipse.cdt.core.parser.ast.IASTScope; import org.eclipse.cdt.core.parser.ast.IASTCompletionNode.CompletionKind; @@ -191,4 +192,18 @@ public class ContextualParser extends Parser implements IParser { { return finalToken; } + + + /* (non-Javadoc) + * @see org.eclipse.cdt.internal.core.parser.Parser#setCompletionContextForExpression(org.eclipse.cdt.core.parser.ast.IASTExpression, boolean) + */ + protected void setCompletionContextForExpression( + IASTExpression firstExpression, + boolean isTemplate) { + setCompletionContext( astFactory.getCompletionContext( (isTemplate + ? IASTExpression.Kind.POSTFIX_DOT_TEMPL_IDEXPRESS + : IASTExpression.Kind.POSTFIX_DOT_IDEXPRESSION), + firstExpression ) ); + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java index 63773b1633b..ec1e5cb87e2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java @@ -4805,11 +4805,8 @@ public abstract class Parser implements IParser setCompletionToken( null ); } - IASTNode context = astFactory.getCompletionContext( (isTemplate - ? IASTExpression.Kind.POSTFIX_DOT_TEMPL_IDEXPRESS - : IASTExpression.Kind.POSTFIX_DOT_IDEXPRESSION), - firstExpression ); - setCompletionContext( context ); + + setCompletionContextForExpression( firstExpression, isTemplate ); setCompletionKind( IASTCompletionNode.CompletionKind.MEMBER_REFERENCE ); secondExpression = primaryExpression(scope); @@ -4855,11 +4852,7 @@ public abstract class Parser implements IParser setCompletionToken( null ); } - context = astFactory.getCompletionContext( (isTemplate - ? IASTExpression.Kind.POSTFIX_ARROW_TEMPL_IDEXP - : IASTExpression.Kind.POSTFIX_ARROW_IDEXPRESSION), - firstExpression ); - setCompletionContext( context ); + setCompletionContextForExpression( firstExpression, isTemplate ); setCompletionKind( IASTCompletionNode.CompletionKind.MEMBER_REFERENCE ); secondExpression = primaryExpression(scope); @@ -4897,6 +4890,12 @@ public abstract class Parser implements IParser /** + * @param firstExpression + * @param isTemplate + */ + protected void setCompletionContextForExpression(IASTExpression firstExpression, boolean isTemplate) { + } + /** * @return * @throws EndOfFileException */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/BranchTracker.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/BranchTracker.java index 32b2c26d2a5..34743c91871 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/BranchTracker.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/BranchTracker.java @@ -41,7 +41,7 @@ public class BranchTracker { * evaluates to true or false * @return boolean - are we set to continue scanning or not? */ - public boolean poundif( boolean taken ) + public boolean poundIf( boolean taken ) { if( ignore == IGNORE_SENTINEL ) { @@ -63,7 +63,22 @@ public class BranchTracker { } } - public boolean poundelif( boolean taken ) throws EmptyStackException + public boolean queryCurrentBranchForElif() + { + if( ignore != IGNORE_SENTINEL && ignore < branches.size() ) + return true; + return !((Boolean)branches.peek()).booleanValue(); + } + + public boolean queryCurrentBranchForIf() + { + if( branches.isEmpty() ) return true; + if( ignore != IGNORE_SENTINEL & ignore < branches.size() ) + return false; + return ((Boolean)branches.peek()).booleanValue(); + } + + public boolean poundElif( boolean taken ) throws EmptyStackException { if( ignore != IGNORE_SENTINEL && ignore < branches.size() ) { @@ -110,7 +125,7 @@ public class BranchTracker { return false; } - public boolean poundelse() throws EmptyStackException + public boolean poundElse() throws EmptyStackException { if( ignore != IGNORE_SENTINEL && ignore < branches.size() ) { @@ -151,7 +166,7 @@ public class BranchTracker { } // taken only on an #endif - public boolean poundendif( ) + public boolean poundEndif( ) { if( ignore == branches.size() ) ignore = IGNORE_SENTINEL; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java index e899639ee6c..50d33ce3261 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java @@ -69,6 +69,8 @@ public class ContextStack { { if( !inclusions.add( context.getFilename() ) ) throw new ContextException( IProblem.PREPROCESSOR_CIRCULAR_INCLUSION ); + + log.traceLog( "Scanner::ContextStack: entering inclusion " +context.getFilename()); context.getExtension().enterScope( requestor ); } else if( context.getKind() == IScannerContext.ContextKind.MACROEXPANSION ) @@ -93,6 +95,7 @@ public class ContextStack { if( currentContext.getKind() == IScannerContext.ContextKind.INCLUSION ) { + log.traceLog( "Scanner::ContextStack: ending inclusion " +currentContext.getFilename()); inclusions.remove( currentContext.getFilename() ); currentContext.getExtension().exitScope( requestor ); } else if( currentContext.getKind() == IScannerContext.ContextKind.MACROEXPANSION ) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java new file mode 100644 index 00000000000..72b183e0e08 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java @@ -0,0 +1,29 @@ +/********************************************************************** + * Copyright (c) 2002,2003 Rational Software Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Common Public License v0.5 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/cpl-v05.html + * + * Contributors: + * IBM Rational Software - Initial API and implementation +***********************************************************************/ +package org.eclipse.cdt.internal.core.parser.scanner; + +import org.eclipse.cdt.core.parser.IScannerExtension; + +/** + * @author jcamelon + */ +public class GCCScannerExtension implements IScannerExtension { + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.IScannerExtension#initializeMacroValue(java.lang.String) + */ + public String initializeMacroValue(String original) { + if( original == null || original.equals( "") ) + return "1"; + return original; + } + +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Preprocessor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Preprocessor.java index f2ba5bb67bd..ed58f0577bf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Preprocessor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Preprocessor.java @@ -34,7 +34,7 @@ public class Preprocessor extends Scanner implements IPreprocessor { * @param defns */ public Preprocessor(Reader reader, String filename, IScannerInfo info, ISourceElementRequestor requestor, ParserMode mode, ParserLanguage language, IParserLogService logService ) { - super(reader, filename, info, requestor, mode, language, logService ); + super(reader, filename, info, requestor, mode, language, logService ); } public void process() diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java index 03302ce510a..0d41a7a7f56 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java @@ -33,10 +33,12 @@ import org.eclipse.cdt.core.parser.IParser; import org.eclipse.cdt.core.parser.IParserLogService; import org.eclipse.cdt.core.parser.IProblem; import org.eclipse.cdt.core.parser.IScanner; +import org.eclipse.cdt.core.parser.IScannerExtension; import org.eclipse.cdt.core.parser.IScannerInfo; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.IToken; import org.eclipse.cdt.core.parser.Keywords; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.NullSourceElementRequestor; import org.eclipse.cdt.core.parser.OffsetLimitReachedException; import org.eclipse.cdt.core.parser.ParserFactory; @@ -60,7 +62,6 @@ import org.eclipse.cdt.internal.core.parser.token.Token; public class Scanner implements IScanner { - protected final IParserLogService log; private final static String SCRATCH = ""; private IProblemFactory problemFactory = new ScannerProblemFactory(); @@ -68,6 +69,7 @@ public class Scanner implements IScanner { private final String filename; private final Reader reader; protected IToken finalToken; + private final IScannerExtension scannerExtension; protected void handleProblem( int problemID, String argument, int beginningOffset, boolean warning, boolean error ) throws ScannerException { @@ -101,6 +103,9 @@ public class Scanner implements IScanner { this.filename = filename; this.reader = reader; this.language = language; + + //support GNU by default for now + scannerExtension = new GCCScannerExtension(); astFactory = ParserFactory.createASTFactory( mode, language ); contextStack = new ContextStack( log ); try { @@ -116,26 +121,48 @@ public class Scanner implements IScanner { } originalConfig = info; + + log.traceLog( "Scanner constructed with the following configuration:"); + log.traceLog( "\tPreprocessor definitions from IScannerInfo: "); + if( info.getDefinedSymbols() != null ) - { + { Iterator i = info.getDefinedSymbols().keySet().iterator(); Map m = info.getDefinedSymbols(); + int numberOfSymbolsLogged = 0; while( i.hasNext() ) { String symbolName = (String) i.next(); Object value = m.get( symbolName ); - if( value instanceof String ) - addDefinition( symbolName, (String) value); + { + addDefinition( symbolName, scannerExtension.initializeMacroValue((String) value)); + log.traceLog( "\t\tNAME = " + symbolName + " VALUE = " + value.toString() ); + ++numberOfSymbolsLogged; + + } else if( value instanceof IMacroDescriptor ) addDefinition( symbolName, (IMacroDescriptor)value); } - } + if( numberOfSymbolsLogged == 0 ) + log.traceLog( "\t\tNo definitions specified."); - if( info.getIncludePaths() != null ) - overwriteIncludePath( info.getIncludePaths() ); - + } + else + log.traceLog( "\t\tNo definitions specified."); + + log.traceLog( "\tInclude paths from IScannerInfo: "); + if( info.getIncludePaths() != null ) + { + overwriteIncludePath( info.getIncludePaths() ); + for( int i = 0; i < info.getIncludePaths().length; ++i ) + log.traceLog( "\t\tPATH: " + info.getIncludePaths()[i]); + } + else + log.traceLog("\t\tNo include paths specified."); + + } private void setupInitialContext() @@ -174,7 +201,7 @@ public class Scanner implements IScanner { while( i.hasNext() ) { String path = (String) i.next(); - includePaths.add( new File( path )); + includePaths.add( new File( path )); } @@ -1199,26 +1226,27 @@ public class Scanner implements IScanner { int currentOffset = getCurrentOffset(); String expression = getRestOfPreprocessorLine(); - boolean expressionEvalResult = false; - try{ - expressionEvalResult = evaluateExpression(expression, currentOffset); - } catch( ScannerException e ){} + if (expression.trim().equals("")) + handleProblem( IProblem.PREPROCESSOR_INVALID_DIRECTIVE, "#if", beginningOffset, false, true ); - passOnToClient = branches.poundif( expressionEvalResult ); + boolean expressionEvalResult = false; + + if( branches.queryCurrentBranchForIf() ) + expressionEvalResult = evaluateExpression(expression, currentOffset); + + passOnToClient = branches.poundIf( expressionEvalResult ); c = getChar(); continue; - - case PreprocessorDirectives.IFDEF : //TODO add in content assist stuff here skipOverWhitespace(); if (getDefinition(getNextIdentifier()) == null) { // not defined - passOnToClient = branches.poundif( false ); + passOnToClient = branches.poundIf( false ); skipOverTextUntilNewline(); } else { - passOnToClient = branches.poundif( true ); + passOnToClient = branches.poundIf( true ); // continue along, act like nothing is wrong :-) c = getChar(); } @@ -1231,7 +1259,7 @@ public class Scanner implements IScanner { buffer.append( restOfLine ); handleProblem( IProblem.PREPROCESSOR_INVALID_DIRECTIVE, buffer.toString(), beginningOffset, false, true ); } - passOnToClient = branches.poundendif(); + passOnToClient = branches.poundEndif(); c = getChar(); continue; @@ -1241,9 +1269,9 @@ public class Scanner implements IScanner { if (getDefinition(getNextIdentifier()) != null) { // not defined skipOverTextUntilNewline(); - passOnToClient = branches.poundif( false ); + passOnToClient = branches.poundIf( false ); } else { - passOnToClient = branches.poundif( true ); + passOnToClient = branches.poundIf( true ); // continue along, act like nothing is wrong :-) c = getChar(); } @@ -1253,7 +1281,7 @@ public class Scanner implements IScanner { //TODO add in content assist stuff here try { - passOnToClient = branches.poundelse(); + passOnToClient = branches.poundElse(); } catch( EmptyStackException ese ) { @@ -1276,11 +1304,12 @@ public class Scanner implements IScanner { handleProblem( IProblem.PREPROCESSOR_INVALID_DIRECTIVE, "#elif", beginningOffset, false, true ); boolean elsifResult = false; - elsifResult = evaluateExpression(elsifExpression, co ); + if( branches.queryCurrentBranchForElif() ) + elsifResult = evaluateExpression(elsifExpression, co ); try { - passOnToClient = branches.poundelif( elsifResult ); + passOnToClient = branches.poundElif( elsifResult ); } catch( EmptyStackException ese ) { @@ -2026,8 +2055,8 @@ public class Scanner implements IScanner { new StringReader(expressionBuffer.toString()), EXPRESSION, new ScannerInfo( definitions, originalConfig.getIncludePaths()), - ParserMode.QUICK_PARSE, language, nullCallback, log ); - parser = ParserFactory.createParser(trial, nullCallback, ParserMode.QUICK_PARSE, language, log ); + ParserMode.QUICK_PARSE, language, nullCallback, nullLogService ); + parser = ParserFactory.createParser(trial, nullCallback, ParserMode.QUICK_PARSE, language, nullLogService); } catch( ParserFactoryError pfe ) { handleInternalError(); @@ -2129,7 +2158,7 @@ public class Scanner implements IScanner { new ScannerInfo(definitions, originalConfig.getIncludePaths()), new NullSourceElementRequestor(), mode, - language, log ); + language, nullLogService ); helperScanner.setForInclusion( true ); IToken t = null; @@ -2243,6 +2272,7 @@ public class Scanner implements IScanner { protected boolean forInclusion = false; + private final static IParserLogService nullLogService = new NullLogService(); /** * @param b */ @@ -2265,7 +2295,7 @@ public class Scanner implements IScanner { new ScannerInfo(), mode, language, - new NullSourceElementRequestor(), log); + new NullSourceElementRequestor(), nullLogService); } catch (ParserFactoryError e1) { } helperScanner.setTokenizingMacroReplacementList( true ); @@ -2533,7 +2563,7 @@ public class Scanner implements IScanner { protected Vector getMacroParameters (String params, boolean forStringizing) throws ScannerException { - Scanner tokenizer = new Scanner(new StringReader(params), TEXT, new ScannerInfo( definitions, originalConfig.getIncludePaths() ), new NullSourceElementRequestor(), mode, language, log); + Scanner tokenizer = new Scanner(new StringReader(params), TEXT, new ScannerInfo( definitions, originalConfig.getIncludePaths() ), new NullSourceElementRequestor(), mode, language, nullLogService ); tokenizer.setThrowExceptionOnBadCharacterRead(false); Vector parameterValues = new Vector(); Token t = null; diff --git a/core/org.eclipse.cdt.core/search/ChangeLog b/core/org.eclipse.cdt.core/search/ChangeLog index ea03a2967c4..5caaa72ed19 100644 --- a/core/org.eclipse.cdt.core/search/ChangeLog +++ b/core/org.eclipse.cdt.core/search/ChangeLog @@ -1,3 +1,6 @@ +2004-01-26 John Camelon + Updated clients to use new Scanner logging service. + 2003-10-23 Bogdan Gheorghe - Added AcceptMatchOperation to get around Bug 45324. The search diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java index baf309f6bc4..48a45f095d7 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java @@ -20,10 +20,12 @@ import java.util.LinkedList; import org.eclipse.cdt.core.parser.EndOfFileException; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.IParserLogService; import org.eclipse.cdt.core.parser.IProblem; import org.eclipse.cdt.core.parser.IQuickParseCallback; import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.IToken; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.NullSourceElementRequestor; import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserFactoryError; @@ -183,7 +185,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte ParserMode.QUICK_PARSE, ParserLanguage.CPP, callback, - ParserUtil.getParserLogService()); + nullLog); } catch (ParserFactoryError e) { } @@ -253,7 +255,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, - callback,ParserUtil.getParserLogService()); + callback, nullLog); } catch (ParserFactoryError e) { } @@ -295,7 +297,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, - callback,ParserUtil.getParserLogService()); + callback, nullLog); } catch (ParserFactoryError e) { } @@ -312,6 +314,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte return new MethodDeclarationPattern( name, qualifications, parameters, matchMode, searchFor, limitTo, caseSensitive ); } + private static final IParserLogService nullLog = new NullLogService(); /** * @param patternString * @param limitTo @@ -353,12 +356,11 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, - callback,ParserUtil.getParserLogService()); + callback, nullLog ); } catch (ParserFactoryError e1) { } IToken token = null; - ASTClassKind kind = null; try { token = scanner.nextToken(); @@ -417,7 +419,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, - callback,ParserUtil.getParserLogService()); + callback,new NullLogService()); } catch (ParserFactoryError e1) { } IQuickParseCallback callback = ParserFactory.createQuickParseCallback(); diff --git a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java index 8be6005be04..45dfdd31664 100644 --- a/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java +++ b/core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java @@ -440,7 +440,7 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants IParser parser = null; try { - IScanner scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, this, ParserUtil.getParserLogService() ); + IScanner scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, this, ParserUtil.getScannerLogService() ); parser = ParserFactory.createParser( scanner, this, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() ); } catch( ParserFactoryError pfe ) diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java index c428c0b964c..9e6a1cfc6f7 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java @@ -718,6 +718,7 @@ public class CCorePlugin extends Plugin { private static final String SEARCH = CCorePlugin.PLUGIN_ID + "/debug/search" ; //$NON-NLS-1$ private static final String MATCH_LOCATOR = CCorePlugin.PLUGIN_ID + "/debug/matchlocator" ; //$NON-NLS-1$ private static final String PARSER = CCorePlugin.PLUGIN_ID + "/debug/parser" ; //$NON-NLS-1$ + private static final String SCANNER = CCorePlugin.PLUGIN_ID + "/debug/scanner"; //$NON-NLS-1$ private static final String DELTA = CCorePlugin.PLUGIN_ID + "/debug/deltaprocessor" ; private static final String CONTENTASSIST = CCorePlugin.PLUGIN_ID + "/debug/contentassist" ; //$NON-NLS-1$ /** @@ -729,6 +730,9 @@ public class CCorePlugin extends Plugin { String option = Platform.getDebugOption(PARSER); if(option != null) Util.VERBOSE_PARSER = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + option = Platform.getDebugOption(SCANNER); + if( option != null ) Util.VERBOSE_SCANNER = option.equalsIgnoreCase("true"); + option = Platform.getDebugOption(MODEL); if(option != null) Util.VERBOSE_MODEL = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserUtil.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserUtil.java index b2b00322520..1ef34e7e21a 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserUtil.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserUtil.java @@ -10,6 +10,7 @@ ***********************************************************************/ package org.eclipse.cdt.core.parser; +import org.eclipse.cdt.internal.core.model.IDebugLogConstants; import org.eclipse.cdt.internal.core.parser.ParserLogService; /** @@ -18,10 +19,19 @@ import org.eclipse.cdt.internal.core.parser.ParserLogService; */ public class ParserUtil { + public static IParserLogService getParserLogService() { return parserLogService; } - - private static IParserLogService parserLogService = new ParserLogService(); + + private static IParserLogService parserLogService = new ParserLogService(IDebugLogConstants.PARSER ); + private static IParserLogService scannerLogService = new ParserLogService(IDebugLogConstants.SCANNER ); + + /** + * @return + */ + public static IParserLogService getScannerLogService() { + return scannerLogService; + } } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/parser/ParserLogService.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/parser/ParserLogService.java index f8600192134..2a2e12a57c1 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/parser/ParserLogService.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/parser/ParserLogService.java @@ -14,6 +14,7 @@ import org.eclipse.cdt.core.ICLogConstants; import org.eclipse.cdt.core.parser.IParserLogService; import org.eclipse.cdt.internal.core.model.IDebugLogConstants; import org.eclipse.cdt.internal.core.model.Util; +import org.eclipse.cdt.internal.core.model.IDebugLogConstants.DebugLogConstant; /** * @author jcamelon @@ -22,12 +23,20 @@ import org.eclipse.cdt.internal.core.model.Util; public class ParserLogService implements IParserLogService { + final DebugLogConstant topic; + /** + * @param constant + */ + public ParserLogService(DebugLogConstant constant) { + topic = constant; + } + /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.IParserLogService#traceLog(java.lang.String) */ public void traceLog(String message) { - Util.debugLog( message, IDebugLogConstants.PARSER ); + Util.debugLog( message, topic ); } /* (non-Javadoc) diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 4d501250537..9e356efd2c7 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,6 @@ +2004-01-26 John Camelon + Updated clients to use new Scanner logging service. + 2004-01-26 Hoda Amer Content Assist Work: More Tuning of Completion Engine diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/CStructureCreator.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/CStructureCreator.java index 6872eb98680..04d545ba913 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/CStructureCreator.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/CStructureCreator.java @@ -12,6 +12,7 @@ import java.io.InputStreamReader; import java.io.StringReader; import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.core.parser.NullLogService; import org.eclipse.cdt.core.parser.ParserUtil; import org.eclipse.cdt.core.parser.IParser; import org.eclipse.cdt.core.parser.IScanner; @@ -73,7 +74,7 @@ public class CStructureCreator implements IStructureCreator { //are bugs while parsing C files, we might want to create a separate Structure //compare for c files, but we'll never be completely right about .h files IScanner scanner = - ParserFactory.createScanner(new StringReader(s), "code", new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, builder,ParserUtil.getParserLogService()); + ParserFactory.createScanner(new StringReader(s), "code", new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, builder, new NullLogService()); IParser parser = ParserFactory.createParser(scanner, builder, ParserMode.QUICK_PARSE, ParserLanguage.CPP, ParserUtil.getParserLogService() ); parser.parse(); } catch (Exception e) { diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java index d523290afca..7102c9abebd 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java @@ -7,7 +7,7 @@ * * Contributors: * IBM Rational Software - Initial API and implementation -***********************************************************************/ + **********************************************************************/ package org.eclipse.cdt.internal.ui.text.contentassist; import java.io.CharArrayReader; @@ -73,7 +73,7 @@ import org.eclipse.jface.preference.IPreferenceStore; * and a given completion offset. * */ -public class CompletionEngine implements RelevanceConstants{ +public class CompletionEngine implements RelevanceConstants { ICompletionRequestor requestor; int completionStart = 0; int completionLength = 0; @@ -191,7 +191,7 @@ public class CompletionEngine implements RelevanceConstants{ macroMap.clear(); try { - scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETION_PARSE, language, requestor, ParserUtil.getParserLogService() ); + scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETION_PARSE, language, requestor, ParserUtil.getScannerLogService() ); parser = ParserFactory.createParser( scanner, requestor, ParserMode.COMPLETION_PARSE, language, ParserUtil.getParserLogService() ); } catch( ParserFactoryError pfe ) @@ -824,7 +824,7 @@ public class CompletionEngine implements RelevanceConstants{ StringBuffer kindName = new StringBuffer("Looking For "); for(int i = 0; i