diff options
author | John Camelon | 2003-06-23 18:05:31 +0000 |
---|---|---|
committer | John Camelon | 2003-06-23 18:05:31 +0000 |
commit | f61006c9febdb95da654021a10919f74c869eb7a (patch) | |
tree | 8777f24887e5963ea4acc0685d378dd0aea90435 | |
parent | b8059d7f27fb2f28cb77e7faa38ba6112d9a61cf (diff) | |
download | org.eclipse.cdt-f61006c9febdb95da654021a10919f74c869eb7a.tar.gz org.eclipse.cdt-f61006c9febdb95da654021a10919f74c869eb7a.tar.xz org.eclipse.cdt-f61006c9febdb95da654021a10919f74c869eb7a.zip |
Updated Factory infrastructure, constructors, etc.
Introduced Preprocessor class for transitive closure calc. client.
38 files changed, 686 insertions, 227 deletions
diff --git a/core/org.eclipse.cdt.core.tests/ChangeLog b/core/org.eclipse.cdt.core.tests/ChangeLog index 35fc8a774bb..8e24b338a15 100644 --- a/core/org.eclipse.cdt.core.tests/ChangeLog +++ b/core/org.eclipse.cdt.core.tests/ChangeLog @@ -1,3 +1,6 @@ +2003-06-23 John Camelon
+ Factory/constructor signature updates.
+
2003-06-17 Victor Mozgin
Added MacroTests.java (invocation in AllCoreTests).
Added MacroTests.c to resources.
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/AutomatedTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/AutomatedTest.java index 40133029907..5fb2a2d67b2 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/AutomatedTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/AutomatedTest.java @@ -14,6 +14,7 @@ package org.eclipse.cdt.core.parser.tests; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.InputStreamReader; import java.util.NoSuchElementException; import java.util.StringTokenizer; @@ -21,7 +22,8 @@ import junit.framework.AssertionFailedError; import junit.framework.Test; import org.eclipse.cdt.core.parser.IParser; -import org.eclipse.cdt.internal.core.parser.Parser; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.core.runtime.Path; @@ -51,12 +53,8 @@ public class AutomatedTest extends AutomatedFramework { FileInputStream stream = new FileInputStream( file ); String filePath = file.getCanonicalPath(); - String nature = (String)natures.get( filePath ); - - boolean cppNature = nature.equalsIgnoreCase("cpp"); - - parser = new Parser( stream, nullCallback, true); - parser.setCppNature( cppNature ); + parser = ParserFactory.createParser( ParserFactory.createScanner( new InputStreamReader (stream), filePath, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE); + parser.setCppNature( ((String)natures.get( filePath )).equalsIgnoreCase("cpp") ); parser.mapLineNumbers(true); assertTrue( parser.parse() ); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseDOMTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseDOMTest.java index 715e37106da..6e298ef1327 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseDOMTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseDOMTest.java @@ -10,12 +10,15 @@ ******************************************************************************/ package org.eclipse.cdt.core.parser.tests; +import java.io.StringReader; + import junit.framework.TestCase; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.internal.core.dom.DOMBuilder; import org.eclipse.cdt.internal.core.dom.TranslationUnit; -import org.eclipse.cdt.internal.core.parser.Parser; import org.eclipse.cdt.internal.core.parser.ParserException; /** @@ -36,7 +39,8 @@ public class BaseDOMTest extends TestCase { public TranslationUnit parse(String code, boolean quickParse, boolean throwOnError ) throws Exception { DOMBuilder domBuilder = new DOMBuilder(); - IParser parser = new Parser(code, domBuilder, quickParse ); + ParserMode mode = quickParse ? ParserMode.QUICK_PARSE : ParserMode.COMPLETE_PARSE; + IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, mode ), domBuilder, mode ); if( ! parser.parse() ) if( throwOnError ) throw new ParserException( "Parse failure" ); else domBuilder.getTranslationUnit().setParseSuccessful( false ); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseScannerTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseScannerTest.java index 954d2c208a2..fc006301306 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseScannerTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseScannerTest.java @@ -15,10 +15,11 @@ import java.io.StringReader; import junit.framework.TestCase; +import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.IToken; +import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ScannerException; import org.eclipse.cdt.internal.core.parser.Parser; -import org.eclipse.cdt.internal.core.parser.Scanner; /** * @author jcamelon @@ -26,7 +27,7 @@ import org.eclipse.cdt.internal.core.parser.Scanner; */ public class BaseScannerTest extends TestCase { - protected Scanner scanner; + protected IScanner scanner; public BaseScannerTest( String x ) { @@ -35,8 +36,7 @@ public class BaseScannerTest extends TestCase { public void initializeScanner(String input) { - scanner= new Scanner(); - scanner.initialize( new StringReader(input),"TEXT"); + scanner= ParserFactory.createScanner( new StringReader(input),"TEXT", null, null, null ); } public int fullyTokenize() throws Exception 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 19a192d510d..a01d9c5fb3b 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 @@ -1,12 +1,14 @@ package org.eclipse.cdt.core.parser.tests; +import java.io.StringReader; + import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.internal.core.parser.ExpressionEvaluator; -import org.eclipse.cdt.internal.core.parser.Parser; public class ExprEvalTest extends TestCase { @@ -20,7 +22,7 @@ public class ExprEvalTest extends TestCase { public void runTest(String code, int expectedValue) throws Exception { ExpressionEvaluator evaluator = new ExpressionEvaluator(); - IParser parser = new Parser(code, evaluator); + IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, null ), evaluator, null); parser.expression(null); assertEquals(expectedValue, ((Integer)evaluator.getResult()).intValue()); } 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 8420c4d7862..ec4e405dbf1 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 @@ -15,13 +15,16 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.io.StringReader; import java.io.StringWriter; import java.util.NoSuchElementException; import java.util.StringTokenizer; import junit.framework.Test; -import org.eclipse.cdt.internal.core.parser.Parser; +import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.core.runtime.Path; /** @@ -234,7 +237,8 @@ public class FractionalAutomatedTest extends AutomatedFramework { public void run(){ try{ result = null; - Parser parser = new Parser( code, nullCallback, true); + IParser parser = ParserFactory.createParser( + ParserFactory.createScanner( new StringReader( code ), null, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE); parser.setCppNature( cppNature ); parser.mapLineNumbers(true); parser.parse(); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java index 9c4d37e5e91..662fa4451ff 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java @@ -13,14 +13,17 @@ package org.eclipse.cdt.core.parser.tests; import java.io.FileInputStream; import java.io.InputStream; -import java.io.Reader; +import java.io.InputStreamReader; import java.io.StringReader; import java.util.List; import junit.framework.TestCase; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.IToken; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.internal.core.dom.ClassSpecifier; import org.eclipse.cdt.internal.core.dom.DOMBuilder; import org.eclipse.cdt.internal.core.dom.EnumerationSpecifier; @@ -29,7 +32,6 @@ import org.eclipse.cdt.internal.core.dom.NamespaceDefinition; import org.eclipse.cdt.internal.core.dom.SimpleDeclaration; import org.eclipse.cdt.internal.core.dom.TemplateDeclaration; import org.eclipse.cdt.internal.core.parser.Parser; -import org.eclipse.cdt.internal.core.parser.Scanner; import org.eclipse.core.runtime.Path; /** @@ -53,9 +55,7 @@ public class LineNumberTest extends TestCase { public void testLineNos() throws Exception { - Scanner scanner = new Scanner(); - Reader reader = new StringReader( "int x = 3;\n foo\nfire\nfoe "); - scanner.initialize( reader, "string"); + IScanner scanner = ParserFactory.createScanner( new StringReader( "int x = 3;\n foo\nfire\nfoe " ), "string", null, null, null ); scanner.mapLineNumbers(true); IToken t = scanner.nextToken(); assertEquals( t.getType(), IToken.t_int ); @@ -92,7 +92,7 @@ public class LineNumberTest extends TestCase { public void testDOMLineNos() throws Exception { DOMBuilder domBuilder = new DOMBuilder(); - IParser parser = new Parser( fileIn, domBuilder, true ); + IParser parser = ParserFactory.createParser( ParserFactory.createScanner( new InputStreamReader( fileIn ), null, null, null, ParserMode.QUICK_PARSE ), domBuilder, ParserMode.QUICK_PARSE ); parser.mapLineNumbers(true); if( ! parser.parse() ) fail( "Parse of file failed"); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserTestSuite.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserTestSuite.java index 84c874c9002..7c57daa85f6 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserTestSuite.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ParserTestSuite.java @@ -33,6 +33,7 @@ public class ParserTestSuite extends TestCase { suite.addTestSuite(ParserSymbolTableTest.class); suite.addTestSuite(CModelElementsTests.class); suite.addTestSuite(MacroTests.class); + suite.addTestSuite( PreprocessorTest.class ); return suite; } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/PreprocessorTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/PreprocessorTest.java new file mode 100644 index 00000000000..cdbf0c6209e --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/PreprocessorTest.java @@ -0,0 +1,345 @@ +/********************************************************************** + * 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.tests; + +import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import junit.framework.TestCase; + +import org.eclipse.cdt.core.parser.IPreprocessor; +import org.eclipse.cdt.core.parser.IProblem; +import org.eclipse.cdt.core.parser.ISourceElementRequestor; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; +import org.eclipse.cdt.core.parser.ast.IASTASMDefinition; +import org.eclipse.cdt.core.parser.ast.IASTClassSpecifier; +import org.eclipse.cdt.core.parser.ast.IASTCompilationUnit; +import org.eclipse.cdt.core.parser.ast.IASTConstructor; +import org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier; +import org.eclipse.cdt.core.parser.ast.IASTField; +import org.eclipse.cdt.core.parser.ast.IASTFunction; +import org.eclipse.cdt.core.parser.ast.IASTInclusion; +import org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification; +import org.eclipse.cdt.core.parser.ast.IASTMacro; +import org.eclipse.cdt.core.parser.ast.IASTMethod; +import org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition; +import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation; +import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization; +import org.eclipse.cdt.core.parser.ast.IASTTypedef; +import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration; +import org.eclipse.cdt.core.parser.ast.IASTUsingDirective; +import org.eclipse.cdt.core.parser.ast.IASTVariable; + +/** + * @author jcamelon + * + */ +public class PreprocessorTest extends TestCase { + + public static class Callback implements ISourceElementRequestor + { + private List enteredInc = new ArrayList(), exitedInc = new ArrayList(); + + public boolean asExpected( int balance ) + { + return( ( enteredInc.size() - exitedInc.size() ) == balance ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptProblem(org.eclipse.cdt.core.parser.IProblem) + */ + public void acceptProblem(IProblem problem) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMacro(org.eclipse.cdt.core.parser.ast.IASTMacro) + */ + public void acceptMacro(IASTMacro macro) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptVariable(org.eclipse.cdt.core.parser.ast.IASTVariable) + */ + public void acceptVariable(IASTVariable variable) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFunctionDeclaration(org.eclipse.cdt.core.parser.ast.IASTFunction) + */ + public void acceptFunctionDeclaration(IASTFunction function) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDirective(org.eclipse.cdt.core.parser.ast.IASTUsingDirective) + */ + public void acceptUsingDirective(IASTUsingDirective usageDirective) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptUsingDeclaration(org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration) + */ + public void acceptUsingDeclaration(IASTUsingDeclaration usageDeclaration) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptASMDefinition(org.eclipse.cdt.core.parser.ast.IASTASMDefinition) + */ + public void acceptASMDefinition(IASTASMDefinition asmDefinition) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptTypedef(org.eclipse.cdt.core.parser.ast.IASTTypedef) + */ + public void acceptTypedef(IASTTypedef typedef) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptEnumerationSpecifier(org.eclipse.cdt.core.parser.ast.IASTEnumerationSpecifier) + */ + public void acceptEnumerationSpecifier(IASTEnumerationSpecifier enumeration) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction) + */ + public void enterFunctionBody(IASTFunction function) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitFunctionBody(org.eclipse.cdt.core.parser.ast.IASTFunction) + */ + public void exitFunctionBody(IASTFunction function) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit) + */ + public void enterCompilationUnit(IASTCompilationUnit compilationUnit) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion) + */ + public void enterInclusion(IASTInclusion inclusion) { + enteredInc.add( inclusion ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition) + */ + public void enterNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier) + */ + public void enterClassSpecifier(IASTClassSpecifier classSpecification) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification) + */ + public void enterLinkageSpecification(IASTLinkageSpecification linkageSpec) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration) + */ + public void enterTemplateDeclaration(IASTTemplateDeclaration declaration) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization) + */ + public void enterTemplateSpecialization(IASTTemplateSpecialization specialization) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterTemplateExplicitInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation) + */ + public void enterTemplateExplicitInstantiation(IASTTemplateInstantiation instantiation) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptMethodDeclaration(org.eclipse.cdt.core.parser.ast.IASTMethod) + */ + public void acceptMethodDeclaration(IASTMethod method) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#enterMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod) + */ + public void enterMethodBody(IASTMethod method) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitMethodBody(org.eclipse.cdt.core.parser.ast.IASTMethod) + */ + public void exitMethodBody(IASTMethod method) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptField(org.eclipse.cdt.core.parser.ast.IASTField) + */ + public void acceptField(IASTField field) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptConstructor(org.eclipse.cdt.core.parser.ast.IASTConstructor) + */ + public void acceptConstructor(IASTConstructor constructor) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptClassReference(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier, int) + */ + public void acceptClassReference(IASTClassSpecifier classSpecifier, int referenceOffset) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateDeclaration(org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration) + */ + public void exitTemplateDeclaration(IASTTemplateDeclaration declaration) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateSpecialization(org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization) + */ + public void exitTemplateSpecialization(IASTTemplateSpecialization specialization) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitTemplateExplicitInstantiation(org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation) + */ + public void exitTemplateExplicitInstantiation(IASTTemplateInstantiation instantiation) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitLinkageSpecification(org.eclipse.cdt.core.parser.ast.IASTLinkageSpecification) + */ + public void exitLinkageSpecification(IASTLinkageSpecification linkageSpec) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitClassSpecifier(org.eclipse.cdt.core.parser.ast.IASTClassSpecifier) + */ + public void exitClassSpecifier(IASTClassSpecifier classSpecification) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitNamespaceDefinition(org.eclipse.cdt.core.parser.ast.IASTNamespaceDefinition) + */ + public void exitNamespaceDefinition(IASTNamespaceDefinition namespaceDefinition) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitInclusion(org.eclipse.cdt.core.parser.ast.IASTInclusion) + */ + public void exitInclusion(IASTInclusion inclusion) { + exitedInc.add( inclusion ); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#exitCompilationUnit(org.eclipse.cdt.core.parser.ast.IASTCompilationUnit) + */ + public void exitCompilationUnit(IASTCompilationUnit compilationUnit) { + // TODO Auto-generated method stub + + } + } + + public PreprocessorTest( String name ) + { + super( name ); + } + + public void testSimpleExample() + { + Callback c = new Callback(); + IPreprocessor p = setupPreprocessor( "#include <stdio.h>", + null, // NOTE -- to demonstrate simple example, this should be set up with the info from the + // build properties + null, c ); + p.process(); + c.asExpected(0); + } + + public IPreprocessor setupPreprocessor( String text, List includePaths, Map defns, ISourceElementRequestor rq ) + { + IPreprocessor p = ParserFactory.createPreprocesor( new StringReader( text ), "test", defns, includePaths, ParserMode.COMPLETE_PARSE ); + p.setRequestor( rq ); + return p; + } +} 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 397fcfc1792..62651277422 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 @@ -6,6 +6,7 @@ import java.util.List; import org.eclipse.cdt.core.parser.IMacroDescriptor; import org.eclipse.cdt.core.parser.IToken; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ScannerException; import org.eclipse.cdt.internal.core.parser.Parser; import org.eclipse.cdt.internal.core.parser.Token; @@ -851,7 +852,7 @@ public class ScannerTestCase extends BaseScannerTest try { initializeScanner( "#if X + 5 < 7\n int found = 1;\n#endif" ); - scanner.setQuickScan( true ); + scanner.setMode( ParserMode.QUICK_PARSE ); validateToken( IToken.t_int ); validateIdentifier( "found" ); validateToken( IToken.tASSIGN ); @@ -868,7 +869,7 @@ public class ScannerTestCase extends BaseScannerTest try { initializeScanner( "#if 0\n int error = 666;\n#endif" ); - scanner.setQuickScan( true ); + scanner.setMode( ParserMode.COMPLETE_PARSE ); validateEOF(); } catch( ScannerException se ) @@ -905,11 +906,7 @@ public class ScannerTestCase extends BaseScannerTest initializeScanner("#include <Windows.h>"); prepareForWindowsH(); int count= fullyTokenize(); - if (verbose) - System.out.println( - "For Windows.h, Scanner produced " - + scanner.getCount() - + " tokens"); + validateBalance(); } @@ -919,11 +916,6 @@ public class ScannerTestCase extends BaseScannerTest prepareForWindowsRH(); validateEOF(); validateBalance(); - if (verbose) - System.out.println( - "For WinUser.rh, Scanner produced " - + scanner.getCount() - + " tokens"); } } catch (Exception e) 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 3950b534a8c..41a2ee03368 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 @@ -14,6 +14,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.StringReader; import java.io.StringWriter; import java.util.NoSuchElementException; import java.util.StringTokenizer; @@ -22,8 +23,9 @@ import junit.framework.AssertionFailedError; import junit.framework.Test; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.internal.core.dom.DOMBuilder; -import org.eclipse.cdt.internal.core.parser.Parser; import org.eclipse.core.runtime.Path; @@ -200,8 +202,9 @@ public class TortureTest extends FractionalAutomatedTest { public void run(){ try { DOMBuilder domBuilder = new DOMBuilder(); - parser = new Parser(code.toString(), domBuilder, quickParse); - + IParser parser = ParserFactory.createParser( + ParserFactory.createScanner( new StringReader( code ), null, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE); + parser.setCppNature(cppNature); parser.mapLineNumbers(true); diff --git a/core/org.eclipse.cdt.core.tests/resources/parser/TortureTest/.cvsignore b/core/org.eclipse.cdt.core.tests/resources/parser/TortureTest/.cvsignore new file mode 100644 index 00000000000..813113959cf --- /dev/null +++ b/core/org.eclipse.cdt.core.tests/resources/parser/TortureTest/.cvsignore @@ -0,0 +1 @@ +TortureTest.properties
\ No newline at end of file diff --git a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/Name.java b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/Name.java index 6448e89afa1..0fd726d5f3c 100644 --- a/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/Name.java +++ b/core/org.eclipse.cdt.core/dom/org/eclipse/cdt/internal/core/dom/Name.java @@ -35,7 +35,7 @@ public class Name { } public String toString() { - Token t = nameStart; + IToken t = nameStart; StringBuffer buffer = new StringBuffer(); buffer.append( t.getImage() ); if( t.getType() == IToken.t_operator ) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java index 85a4b115a02..3f281f5e093 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/model/CModelBuilder.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java @@ -12,6 +12,7 @@ package org.eclipse.cdt.internal.core.model; * Rational Software - initial implementation ******************************************************************************/ +import java.io.StringReader; import java.util.HashMap; import java.util.Iterator; import java.util.List; @@ -25,6 +26,8 @@ import org.eclipse.cdt.core.model.IStructure; import org.eclipse.cdt.core.model.ITemplate; import org.eclipse.cdt.core.model.ITranslationUnit; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.internal.core.dom.ArrayQualifier; import org.eclipse.cdt.internal.core.dom.ClassKey; import org.eclipse.cdt.internal.core.dom.ClassSpecifier; @@ -50,7 +53,6 @@ import org.eclipse.cdt.internal.core.dom.TemplateParameter; import org.eclipse.cdt.internal.core.dom.TranslationUnit; import org.eclipse.cdt.internal.core.dom.TypeSpecifier; import org.eclipse.cdt.internal.core.parser.Name; -import org.eclipse.cdt.internal.core.parser.Parser; import org.eclipse.core.resources.IProject; @@ -68,8 +70,7 @@ public class CModelBuilder { // Note - if a CModel client wishes to have a CModel with valid line numbers // DOMFactory.createDOMBuilder should be given the parameter 'true' DOMBuilder domBuilder = new DOMBuilder(); - String code = translationUnit.getBuffer().getContents(); - IParser parser = new Parser(code, domBuilder, true); + IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( translationUnit.getBuffer().getContents() ), null, null, null, ParserMode.QUICK_PARSE ), domBuilder, ParserMode.QUICK_PARSE); parser.mapLineNumbers(requiresLineNumbers); if( translationUnit.getCProject() != null ) { diff --git a/core/org.eclipse.cdt.core/parser/ChangeLog b/core/org.eclipse.cdt.core/parser/ChangeLog index ef6705a2f1c..445dfb5cf61 100644 --- a/core/org.eclipse.cdt.core/parser/ChangeLog +++ b/core/org.eclipse.cdt.core/parser/ChangeLog @@ -1,3 +1,7 @@ +2003-06-23 John Camelon + Updated Factory infrastructure, constructors, etc. + Introduced Preprocessor class for transitive closure calc. client. + 2003-06-20 Victor Mozgin Fixed PR 36463 : Offsets of macros are incorrect. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IPreprocessor.java index e97c8b7786f..9a023f51ddb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ParserFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IPreprocessor.java @@ -8,23 +8,15 @@ * Contributors: * IBM Rational Software - Initial API and implementation ***********************************************************************/ -package org.eclipse.cdt.internal.core.parser; +package org.eclipse.cdt.core.parser; -import org.eclipse.cdt.core.parser.ast.IASTFactory; -import org.eclipse.cdt.internal.core.parser.ast.full.FullParseASTFactory; -import org.eclipse.cdt.internal.core.parser.ast.quick.QuickParseASTFactory; /** * @author jcamelon * */ -public class ParserFactory { +public interface IPreprocessor extends IScanner { + + public void process(); - public static IASTFactory createASTFactory( boolean quickParse ) - { - if( quickParse ) - return new QuickParseASTFactory(); - else - return new FullParseASTFactory(); - } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java index aa4b268cda8..c1e057fd611 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IScanner.java @@ -1,6 +1,5 @@ package org.eclipse.cdt.core.parser; -import java.io.Reader; import java.util.List; import org.eclipse.cdt.core.parser.ast.IASTFactory; @@ -10,27 +9,37 @@ import org.eclipse.cdt.internal.core.parser.Parser; * @author jcamelon * */ -public interface IScanner { - +public interface IScanner { + public static final int tPOUNDPOUND = -6; public static final int tPOUND = -7; - public IScanner initialize( Reader sourceToBeRead, String fileName ); - + public void setASTFactory( IASTFactory f ); public void addDefinition(String key, IMacroDescriptor macroToBeAdded ); public void addDefinition(String key, String value); public Object getDefinition(String key); - + public Object[] getIncludePaths(); public void addIncludePath(String includePath); public void overwriteIncludePath( List newIncludePaths ); + public void setRequestor( ISourceElementRequestor r ); public IToken nextToken() throws ScannerException, Parser.EndOfFile; + public IToken nextToken( boolean next ) throws ScannerException, Parser.EndOfFile; public int getLineNumberForOffset(int offset) throws NoSuchMethodException; public void setCppNature( boolean value ); public void mapLineNumbers( boolean value ); - public void setQuickScan(boolean qs); + public void setMode(ParserMode mode); public void setCallback(IParserCallback c); - public void setRequestor( ISourceElementRequestor r ); - public void setASTFactory( IASTFactory f ); + + public int getCount(); + public int getDepth(); + /** + * @return + */ + public IToken nextTokenForStringizing() throws ScannerException, Parser.EndOfFile; + /** + * @param b + */ + public void setTokenizingMacroReplacementList(boolean b); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IToken.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IToken.java index 5e0182abbdc..8bcae4c9849 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IToken.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IToken.java @@ -20,12 +20,13 @@ public interface IToken { public abstract String toString(); public abstract int getType(); public abstract String getImage(); + public void setImage( String i ); public abstract int getOffset(); public abstract int getLength(); public abstract int getEndOffset(); public abstract int getDelta(IToken other); - public abstract Token getNext(); - public abstract void setNext(Token t); + public abstract IToken getNext(); + public abstract void setNext(IToken t); public abstract boolean looksLikeExpression(); public abstract boolean isPointer(); public abstract boolean isOperator(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java new file mode 100644 index 00000000000..cbce06a6071 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java @@ -0,0 +1,63 @@ +/********************************************************************** + * 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; + +import java.io.Reader; +import java.util.Map; +import java.util.List; + +import org.eclipse.cdt.core.parser.ast.IASTFactory; +import org.eclipse.cdt.internal.core.parser.NullSourceElementRequestor; +import org.eclipse.cdt.internal.core.parser.Parser; +import org.eclipse.cdt.internal.core.parser.Preprocessor; +import org.eclipse.cdt.internal.core.parser.Scanner; +import org.eclipse.cdt.internal.core.parser.ast.full.FullParseASTFactory; +import org.eclipse.cdt.internal.core.parser.ast.quick.QuickParseASTFactory; + +/** + * @author jcamelon + * + */ +public class ParserFactory { + + public static IASTFactory createASTFactory( ParserMode mode ) + { + if( mode == ParserMode.QUICK_PARSE ) + return new QuickParseASTFactory(); + else + return new FullParseASTFactory(); + } + + public static IParser createParser( IScanner scanner, IParserCallback callback, ParserMode mode ) + { + ParserMode ourMode = ( (mode == null )? ParserMode.COMPLETE_PARSE : mode ); + IParserCallback ourCallback = (( callback == null) ? new NullSourceElementRequestor() : callback ); + return new Parser( scanner, ourCallback, ourMode ); + } + + public static IScanner createScanner( Reader input, String fileName, Map defns, List inclusions, ParserMode mode ) + { + ParserMode ourMode = ( (mode == null )? ParserMode.COMPLETE_PARSE : mode ); + IScanner s = new Scanner( input, fileName, defns ); + s.setMode( ourMode ); + s.overwriteIncludePath(inclusions); + return s; + } + + public static IPreprocessor createPreprocesor( Reader input, String fileName, Map defns, List inclusions, ParserMode mode ) + { + ParserMode ourMode = ( (mode == null )? ParserMode.COMPLETE_PARSE : mode ); + IPreprocessor s = new Preprocessor( input, fileName, defns ); + s.setMode( ourMode ); + s.overwriteIncludePath(inclusions); + return s; + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserMode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserMode.java new file mode 100644 index 00000000000..ed5e6668753 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserMode.java @@ -0,0 +1,34 @@ +/********************************************************************** + * 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 ParserMode { + + // follow inclusions, parse function/method bodies + public static final ParserMode COMPLETE_PARSE = new ParserMode( 1 ); + + // follow inclusions, do not parse function/method bodies + public static final ParserMode STRUCTURAL_PARSE = new ParserMode( 2 ); + + // do not follow inclusions, do not parse function/method bodies + public static final ParserMode QUICK_PARSE = new ParserMode( 3 ); + + private ParserMode( int value ) + { + this.value = value; + } + + private final int value; +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTClassSpecifier.java index c73597c29ae..d82d9a24a14 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTClassSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ast/IASTClassSpecifier.java @@ -24,6 +24,6 @@ public interface IASTClassSpecifier extends IASTTypeSpecifier, IASTScope, IASTOf public Iterator getBaseClauses(); - public AccessVisibility getCurrentVisiblity(); + public AccessVisibility getCurrentVisibilityMode(); } 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 42d378dcae3..4e9a352b71d 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 @@ -11,15 +11,13 @@ package org.eclipse.cdt.internal.core.parser; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.StringReader; - import org.eclipse.cdt.core.parser.IParser; import org.eclipse.cdt.core.parser.IParserCallback; import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.IToken; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ScannerException; import org.eclipse.cdt.core.parser.ast.AccessVisibility; import org.eclipse.cdt.core.parser.ast.ClassKind; @@ -49,7 +47,7 @@ public class Parser implements IParser { private static int DEFAULT_OFFSET = -1; // sentinel initial value for offsets private int firstErrorOffset = DEFAULT_OFFSET; // offset where the first parse error occurred private IParserCallback callback; // the parser callback that was registered with us - private boolean quickParse = false; // are we doing the high-level parse, or an in depth parse? + private ParserMode mode = ParserMode.COMPLETE_PARSE; // are we doing the high-level parse, or an in depth parse? private boolean parsePassed = true; // did the parse pass? private boolean cppNature = true; // true for C++, false for C private ISourceElementRequestor requestor = null; // new callback mechanism @@ -77,86 +75,18 @@ public class Parser implements IParser { * @param c IParserCallback instance that will receive callbacks as we parse * @param quick Are we asking for a high level parse or not? */ - public Parser(IScanner s, IParserCallback c, boolean quick) { + public Parser(IScanner s, IParserCallback c, ParserMode m) { callback = c; scanner = s; if( c instanceof ISourceElementRequestor ) setRequestor( (ISourceElementRequestor)c ); - quickParse = quick; - astFactory = ParserFactory.createASTFactory( quick ); - scanner.setQuickScan(quick); + mode = m; + astFactory = ParserFactory.createASTFactory( m ); + scanner.setMode( m ); scanner.setCallback(c); scanner.setASTFactory( astFactory ); } - - /** - * An additional constructor provided for ease of use and tezting. - * - * @param s IScanner instance that has been initialized to the code input - * @param c IParserCallback instance that will receive callbacks as we parse - */ - public Parser(IScanner s, IParserCallback c) { - this(s, c, false); - } - - /** - * An additional constructor provided for ease of use and tezting. - * - * @param s IScanner instance that has been initialized to the code input - */ - public Parser( IScanner s) { - this(s, new NullSourceElementRequestor(), false); - } - - - /** - * An additional constructor provided for ease of use and tezting. - * - * * @param code The code that we wish to parse - */ - public Parser(String code) { - this(new Scanner().initialize( new StringReader( code ), null -)); - } - - /** - * An additional constructor provided for ease of use and tezting. - * - * @param code The code that we wish to parse - * @param c IParserCallback instance that will receive callbacks as we parse - */ - public Parser(String code, IParserCallback c) { - this(new Scanner().initialize( new StringReader( code ), null -), c, false); - } - - - /** - * An additional constructor provided for ease of use and tezting. - * - * @param code The code that we wish to parse - * @param c IParserCallback instance that will receive callbacks as we parse - * @param quickParse Are we asking for a high level parse or not? - */ - public Parser(String code, IParserCallback c, boolean quickParse ) { - this(new Scanner().initialize( new StringReader( code ), null -), c, quickParse); - } - - - /** - * An additional constructor provided for ease of use and tezting. - * - * @param stream An InputStream represnting the code that we wish to parse - * @param c IParserCallback instance that will receive callbacks as we parse - * @param quickParse Are we asking for a high level parse or not? - */ - public Parser(InputStream stream, IParserCallback c, boolean quickParse) { - this(new Scanner().initialize( new InputStreamReader(stream), null ), -c, quickParse); - } - private static int parseCount = 0; // counter that keeps track of the number of times Parser.parse() is called @@ -788,7 +718,8 @@ c, quickParse); if (forKR) throw backtrack; Object function = null; try{ function = callback.functionBodyBegin(simpleDecl ); } catch( Exception e ) {} - if (quickParse) { + + if ( mode == ParserMode.QUICK_PARSE ) { // speed up the parser by skiping the body // simply look for matching brace and return consume(IToken.tLBRACE); @@ -868,7 +799,7 @@ c, quickParse); catch( Backtrack bt ) { try { callback.constructorChainAbort( constructorChain );} catch( Exception e ) {} - if( ! quickParse ) + if( mode != ParserMode.QUICK_PARSE ) throw backtrack; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Preprocessor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Preprocessor.java new file mode 100644 index 00000000000..52c47b72460 --- /dev/null +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Preprocessor.java @@ -0,0 +1,50 @@ +/********************************************************************** + * 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; + +import java.io.Reader; +import java.util.Map; + +import org.eclipse.cdt.core.parser.IPreprocessor; +import org.eclipse.cdt.core.parser.ScannerException; + +/** + * @author jcamelon + * + */ +public class Preprocessor extends Scanner implements IPreprocessor { + + /** + * @param reader + * @param filename + * @param defns + */ + public Preprocessor(Reader reader, String filename, Map defns) { + super(reader, filename, defns); + } + + public void process() + { + try + { + while( true ) + nextToken(); + } + catch( ScannerException se ) + { + // callback IProblem here + } + catch( Parser.EndOfFile eof ) + { + // expected + } + } +} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java index d3b58691a37..2f46fd66b4f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Scanner.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.StringTokenizer; import java.util.Vector; @@ -31,6 +32,8 @@ import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.IScannerContext; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.IToken; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ScannerException; import org.eclipse.cdt.core.parser.ast.IASTFactory; import org.eclipse.cdt.core.parser.ast.IASTInclusion; @@ -44,12 +47,7 @@ import org.eclipse.cdt.core.parser.ast.IASTMacro; public class Scanner implements IScanner { - public IScanner initialize(Reader reader, String filename) { - init(reader, filename); - return this; - } - - protected void init(Reader reader, String filename) { + public Scanner(Reader reader, String filename, Map defns) { try { //this is a hack to get around a sudden EOF experience contextStack.push( @@ -65,14 +63,8 @@ public class Scanner implements IScanner { } catch( ScannerException se ) { //won't happen since we aren't adding an include or a macro } - } - - public Scanner() { - } - - protected Scanner(Reader reader, String filename, Hashtable defns) { - initialize(reader, filename); - definitions = defns; + if( defns != null ) + definitions.putAll( defns ); } @@ -83,6 +75,7 @@ public class Scanner implements IScanner { } public void overwriteIncludePath(List newIncludePaths) { + if( newIncludePaths == null ) return; includePathNames = null; includePaths = null; includePathNames = new ArrayList(); @@ -223,7 +216,7 @@ public class Scanner implements IScanner { } } - private void setCurrentToken(Token t) { + private void setCurrentToken(IToken t) { if (currentToken != null) currentToken.setNext(t); currentToken = t; @@ -235,12 +228,12 @@ public class Scanner implements IScanner { storageBuffer = null; } - protected Token newToken(int t, String i, IScannerContext c) { + protected IToken newToken(int t, String i, IScannerContext c) { setCurrentToken(new Token(t, i, c)); return currentToken; } - protected Token newToken(int t, String i) { + protected IToken newToken(int t, String i) { setCurrentToken(new Token(t, i)); return currentToken; } @@ -345,8 +338,8 @@ public class Scanner implements IScanner { private static HashMap cKeywords = new HashMap(); private static HashMap ppDirectives = new HashMap(); - private Token currentToken = null; - private Token cachedToken = null; + private IToken currentToken = null; + private IToken cachedToken = null; private boolean passOnToClient = true; private BranchTracker branches = new BranchTracker(); @@ -368,9 +361,10 @@ public class Scanner implements IScanner { tokenizingMacroReplacementList = mr; } - private boolean quickScan = false; - public void setQuickScan(boolean qs) { - quickScan = qs; + private ParserMode mode = ParserMode.COMPLETE_PARSE; + + public void setMode(ParserMode mode) { + this.mode = mode; } private IParserCallback callback; @@ -485,7 +479,7 @@ public class Scanner implements IScanner { } - protected Token nextToken( boolean pasting ) throws ScannerException, Parser.EndOfFile + public IToken nextToken( boolean pasting ) throws ScannerException, Parser.EndOfFile { if( cachedToken != null ){ setCurrentToken( cachedToken ); @@ -569,16 +563,16 @@ public class Scanner implements IScanner { //If the next token is going to be a string as well, we need to concatenate //it with this token. - Token returnToken = newToken( type, buff.toString(), contextStack.getCurrentContext()); - Token next = null; + IToken returnToken = newToken( type, buff.toString(), contextStack.getCurrentContext()); + IToken next = null; try{ next = nextToken( true ); } catch( Parser.EndOfFile e ){ next = null; } - while( next != null && next.type == returnToken.type ){ - returnToken.image += next.image; + while( next != null && next.getType() == returnToken.getType() ){ + returnToken.setImage( returnToken.getImage() + next.getImage() ); returnToken.setNext( null ); currentToken = returnToken; try{ @@ -895,7 +889,7 @@ public class Scanner implements IScanner { // definition String toBeUndefined = getNextIdentifier(); - if( ( definitions.remove(toBeUndefined) == null ) && ! quickScan ) + if( ( definitions.remove(toBeUndefined) == null ) && mode == ParserMode.COMPLETE_PARSE ) throw new ScannerException( "Attempt to #undef symbol " + toBeUndefined + " when it was never defined"); skipOverTextUntilNewline(); @@ -993,7 +987,7 @@ public class Scanner implements IScanner { String error = getRestOfPreprocessorLine(); - if (!quickScan) { + if (mode == ParserMode.COMPLETE_PARSE) { throw new ScannerException("#error " + error); } c = getChar(); @@ -1379,7 +1373,7 @@ public class Scanner implements IScanner { // the static instance we always use protected static endOfMacroTokenException endOfMacroToken = new endOfMacroTokenException(); - protected IToken nextTokenForStringizing() throws ScannerException, Parser.EndOfFile + public IToken nextTokenForStringizing() throws ScannerException, Parser.EndOfFile { int c = getChar(); StringBuffer tokenImage = new StringBuffer(); @@ -1648,7 +1642,7 @@ public class Scanner implements IScanner { protected boolean evaluateExpression(String expression ) throws ScannerException { - if( quickScan ) + if( mode == ParserMode.QUICK_PARSE ) { if( expression.trim().equals( "0" ) ) return false; @@ -1659,13 +1653,13 @@ public class Scanner implements IScanner { Object expressionEvalResult = null; try { ExpressionEvaluator evaluator = new ExpressionEvaluator(); - Scanner trial = - new Scanner( - // Semicolon makes this valid C (hopefully) + IScanner trial = + ParserFactory.createScanner( new StringReader(expression + ";"), EXPRESSION, - definitions); - IParser parser = new Parser(trial, evaluator); + definitions, + null, ParserMode.COMPLETE_PARSE ); + IParser parser = ParserFactory.createParser(trial, evaluator, ParserMode.COMPLETE_PARSE ); parser.expression(null); expressionEvalResult = evaluator.getResult(); @@ -1792,7 +1786,7 @@ public class Scanner implements IScanner { String f = fileName.toString(); offset = contextStack.getCurrentContext().getOffset() - f.length() - 1; // -1 for the end quote - if( quickScan ) + if( mode == ParserMode.QUICK_PARSE ) { if( callback != null ) { @@ -1818,7 +1812,7 @@ public class Scanner implements IScanner { String key = getNextIdentifier(); int offset = contextStack.getCurrentContext().getOffset() - key.length() - contextStack.getCurrentContext().undoStackSize(); - if (!quickScan) { + if (mode == ParserMode.COMPLETE_PARSE) { String checkForRedefinition = (String) definitions.get(key); if (checkForRedefinition != null) { throw new ScannerException( @@ -1884,21 +1878,18 @@ public class Scanner implements IScanner { if( ! replacementString.equals( "" ) ) { - Scanner helperScanner = new Scanner(); - helperScanner.initialize( - new StringReader(replacementString), - null); + IScanner helperScanner = ParserFactory.createScanner( new StringReader(replacementString), null, null, null, mode ); helperScanner.setTokenizingMacroReplacementList( true ); - Token t = helperScanner.nextToken(false); + IToken t = helperScanner.nextToken(false); try { while (true) { //each # preprocessing token in the replacement list shall be followed //by a parameter as the next reprocessing token in the list - if( t.type == tPOUND ){ + if( t.getType() == tPOUND ){ macroReplacementTokens.add( t ); t = helperScanner.nextToken(false); - int index = parameterIdentifiers.indexOf(t.image); + int index = parameterIdentifiers.indexOf(t.getImage()); if (index == -1 ) { //not found if (throwExceptionOnBadPreprocessorSyntax) @@ -1985,7 +1976,7 @@ public class Scanner implements IScanner { protected Vector getMacroParameters (String params, boolean forStringizing) throws ScannerException { - Scanner tokenizer = new Scanner(new StringReader(params), TEXT, definitions); + IScanner tokenizer = ParserFactory.createScanner(new StringReader(params), TEXT, definitions, null, mode ); Vector parameterValues = new Vector(); Token t = null; String str = new String(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Token.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Token.java index 38415c4c8f2..83e1edc70c1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Token.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Token.java @@ -61,9 +61,9 @@ public class Token implements IToken { return other.getOffset() + other.getLength() - getOffset(); } - private Token next; - public Token getNext() { return next; } - public void setNext(Token t) { next = t; } + private IToken next; + public IToken getNext() { return next; } + public void setNext(IToken t) { next = t; } public boolean looksLikeExpression() { @@ -141,4 +141,11 @@ public class Token implements IToken { } } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.IToken#setImage() + */ + public void setImage( String i ) { + image = i; + } + } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/full/ASTClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/full/ASTClassSpecifier.java index 1fda98aabbc..e3ac4d8cb22 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/full/ASTClassSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/full/ASTClassSpecifier.java @@ -138,7 +138,7 @@ public class ASTClassSpecifier implements IASTFClassSpecifier, IPSTSymbolExtensi /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getCurrentVisiblity() */ - public AccessVisibility getCurrentVisiblity() { + public AccessVisibility getCurrentVisibilityMode() { // TODO Auto-generated method stub return null; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java index 86e220d85ef..ed8a5e56e4d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/quick/ASTClassSpecifier.java @@ -76,7 +76,7 @@ public class ASTClassSpecifier extends ASTDeclaration implements IASTQClassSpeci /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ast.IASTClassSpecifier#getCurrentVisiblity() */ - public AccessVisibility getCurrentVisiblity() { + public AccessVisibility getCurrentVisibilityMode() { return access; } diff --git a/core/org.eclipse.cdt.ui.tests/ChangeLog b/core/org.eclipse.cdt.ui.tests/ChangeLog index f10cfa8fe11..17890c59c67 100644 --- a/core/org.eclipse.cdt.ui.tests/ChangeLog +++ b/core/org.eclipse.cdt.ui.tests/ChangeLog @@ -1,3 +1,7 @@ +2003-06-23 John Camelon + Updated Factory infrastructure, constructors, etc. + Introduced Preprocessor class for transitive closure calc. client. + 2003-06-20 Sean Evoy Moved the ManagedBuildInfo extension point to the plugin file in org.eclipse.cdt.core.tests diff --git a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/AutomatedTest.java b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/AutomatedTest.java index 030dc584afb..6abe3a34f55 100644 --- a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/AutomatedTest.java +++ b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/AutomatedTest.java @@ -14,6 +14,7 @@ package org.eclipse.cdt.core.parser.tests; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.io.InputStreamReader; import java.util.NoSuchElementException; import java.util.StringTokenizer; @@ -21,7 +22,8 @@ import junit.framework.AssertionFailedError; import junit.framework.Test; import org.eclipse.cdt.core.parser.IParser; -import org.eclipse.cdt.internal.core.parser.Parser; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.core.runtime.Path; @@ -51,14 +53,10 @@ public class AutomatedTest extends AutomatedFramework { FileInputStream stream = new FileInputStream( file ); String filePath = file.getCanonicalPath(); - String nature = (String)natures.get( filePath ); - - boolean cppNature = nature.equalsIgnoreCase("cpp"); - - parser = new Parser( stream, nullCallback, true); - parser.setCppNature( cppNature ); + parser = ParserFactory.createParser( ParserFactory.createScanner( new InputStreamReader (stream), filePath, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE); + parser.setCppNature( ((String)natures.get( filePath )).equalsIgnoreCase("cpp") ); parser.mapLineNumbers(true); - + assertTrue( parser.parse() ); } catch( Throwable e ) diff --git a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/BaseDOMTest.java b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/BaseDOMTest.java index 715e37106da..6e298ef1327 100644 --- a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/BaseDOMTest.java +++ b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/BaseDOMTest.java @@ -10,12 +10,15 @@ ******************************************************************************/ package org.eclipse.cdt.core.parser.tests; +import java.io.StringReader; + import junit.framework.TestCase; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.internal.core.dom.DOMBuilder; import org.eclipse.cdt.internal.core.dom.TranslationUnit; -import org.eclipse.cdt.internal.core.parser.Parser; import org.eclipse.cdt.internal.core.parser.ParserException; /** @@ -36,7 +39,8 @@ public class BaseDOMTest extends TestCase { public TranslationUnit parse(String code, boolean quickParse, boolean throwOnError ) throws Exception { DOMBuilder domBuilder = new DOMBuilder(); - IParser parser = new Parser(code, domBuilder, quickParse ); + ParserMode mode = quickParse ? ParserMode.QUICK_PARSE : ParserMode.COMPLETE_PARSE; + IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, mode ), domBuilder, mode ); if( ! parser.parse() ) if( throwOnError ) throw new ParserException( "Parse failure" ); else domBuilder.getTranslationUnit().setParseSuccessful( false ); diff --git a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/BaseScannerTest.java b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/BaseScannerTest.java index 954d2c208a2..1dc4dd5e334 100644 --- a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/BaseScannerTest.java +++ b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/BaseScannerTest.java @@ -15,10 +15,12 @@ import java.io.StringReader; import junit.framework.TestCase; +import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.IToken; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ScannerException; import org.eclipse.cdt.internal.core.parser.Parser; -import org.eclipse.cdt.internal.core.parser.Scanner; /** * @author jcamelon @@ -26,7 +28,7 @@ import org.eclipse.cdt.internal.core.parser.Scanner; */ public class BaseScannerTest extends TestCase { - protected Scanner scanner; + protected IScanner scanner; public BaseScannerTest( String x ) { @@ -35,8 +37,7 @@ public class BaseScannerTest extends TestCase { public void initializeScanner(String input) { - scanner= new Scanner(); - scanner.initialize( new StringReader(input),"TEXT"); + scanner= ParserFactory.createScanner( new StringReader(input),"TEXT", null, null, ParserMode.COMPLETE_PARSE ); } public int fullyTokenize() throws Exception diff --git a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/ExprEvalTest.java b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/ExprEvalTest.java index 19a192d510d..59d8f2ce6a0 100644 --- a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/ExprEvalTest.java +++ b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/ExprEvalTest.java @@ -1,12 +1,14 @@ package org.eclipse.cdt.core.parser.tests; +import java.io.StringReader; + import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.internal.core.parser.ExpressionEvaluator; -import org.eclipse.cdt.internal.core.parser.Parser; public class ExprEvalTest extends TestCase { @@ -20,7 +22,7 @@ public class ExprEvalTest extends TestCase { public void runTest(String code, int expectedValue) throws Exception { ExpressionEvaluator evaluator = new ExpressionEvaluator(); - IParser parser = new Parser(code, evaluator); + IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, null ), evaluator, null);; parser.expression(null); assertEquals(expectedValue, ((Integer)evaluator.getResult()).intValue()); } diff --git a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/FractionalAutomatedTest.java b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/FractionalAutomatedTest.java index f93fd8faf3b..034e2d29b67 100644 --- a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/FractionalAutomatedTest.java +++ b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/FractionalAutomatedTest.java @@ -15,13 +15,16 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.io.StringReader; import java.io.StringWriter; import java.util.NoSuchElementException; import java.util.StringTokenizer; import junit.framework.Test; -import org.eclipse.cdt.internal.core.parser.Parser; +import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.core.runtime.Path; /** @@ -234,7 +237,8 @@ public class FractionalAutomatedTest extends AutomatedFramework { public void run(){ try{ result = null; - Parser parser = new Parser( code, nullCallback, true); + IParser parser = ParserFactory.createParser( + ParserFactory.createScanner( new StringReader( code ), null, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE); parser.setCppNature( cppNature ); parser.mapLineNumbers(true); parser.parse(); diff --git a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java index 5d49518375e..49c01ab1d8d 100644 --- a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java +++ b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/LineNumberTest.java @@ -13,14 +13,17 @@ package org.eclipse.cdt.core.parser.tests; import java.io.FileInputStream; import java.io.InputStream; -import java.io.Reader; +import java.io.InputStreamReader; import java.io.StringReader; import java.util.List; import junit.framework.TestCase; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.IScanner; import org.eclipse.cdt.core.parser.IToken; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.internal.core.dom.ClassSpecifier; import org.eclipse.cdt.internal.core.dom.DOMBuilder; import org.eclipse.cdt.internal.core.dom.EnumerationSpecifier; @@ -29,7 +32,6 @@ import org.eclipse.cdt.internal.core.dom.NamespaceDefinition; import org.eclipse.cdt.internal.core.dom.SimpleDeclaration; import org.eclipse.cdt.internal.core.dom.TemplateDeclaration; import org.eclipse.cdt.internal.core.parser.Parser; -import org.eclipse.cdt.internal.core.parser.Scanner; import org.eclipse.core.runtime.Path; /** @@ -53,9 +55,7 @@ public class LineNumberTest extends TestCase { public void testLineNos() throws Exception { - Scanner scanner = new Scanner(); - Reader reader = new StringReader( "int x = 3;\n foo\nfire\nfoe "); - scanner.initialize( reader, "string"); + IScanner scanner = ParserFactory.createScanner( new StringReader( "int x = 3;\n foo\nfire\nfoe " ), "string", null, null, null ); scanner.mapLineNumbers(true); IToken t = scanner.nextToken(); assertEquals( t.getType(), IToken.t_int ); @@ -92,7 +92,7 @@ public class LineNumberTest extends TestCase { public void testDOMLineNos() throws Exception { DOMBuilder domBuilder = new DOMBuilder(); - IParser parser = new Parser( fileIn, domBuilder, true ); + IParser parser = ParserFactory.createParser( ParserFactory.createScanner( new InputStreamReader( fileIn ), null, null, null, ParserMode.QUICK_PARSE ), domBuilder, ParserMode.QUICK_PARSE ); parser.mapLineNumbers(true); if( ! parser.parse() ) fail( "Parse of file failed"); diff --git a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java index 397fcfc1792..8f08b199a96 100644 --- a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java +++ b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/ScannerTestCase.java @@ -6,6 +6,7 @@ import java.util.List; import org.eclipse.cdt.core.parser.IMacroDescriptor; import org.eclipse.cdt.core.parser.IToken; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.core.parser.ScannerException; import org.eclipse.cdt.internal.core.parser.Parser; import org.eclipse.cdt.internal.core.parser.Token; @@ -851,7 +852,7 @@ public class ScannerTestCase extends BaseScannerTest try { initializeScanner( "#if X + 5 < 7\n int found = 1;\n#endif" ); - scanner.setQuickScan( true ); + scanner.setMode( ParserMode.QUICK_PARSE ); validateToken( IToken.t_int ); validateIdentifier( "found" ); validateToken( IToken.tASSIGN ); @@ -868,7 +869,7 @@ public class ScannerTestCase extends BaseScannerTest try { initializeScanner( "#if 0\n int error = 666;\n#endif" ); - scanner.setQuickScan( true ); + scanner.setMode( ParserMode.COMPLETE_PARSE ); validateEOF(); } catch( ScannerException se ) diff --git a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/TortureTest.java b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/TortureTest.java index d6376b5c5e1..478fe6bb50f 100644 --- a/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/TortureTest.java +++ b/core/org.eclipse.cdt.ui.tests/parser/org/eclipse/cdt/core/parser/tests/TortureTest.java @@ -14,6 +14,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.StringReader; import java.io.StringWriter; import java.util.NoSuchElementException; import java.util.StringTokenizer; @@ -22,8 +23,9 @@ import junit.framework.AssertionFailedError; import junit.framework.Test; import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.internal.core.dom.DOMBuilder; -import org.eclipse.cdt.internal.core.parser.Parser; import org.eclipse.core.runtime.Path; @@ -200,7 +202,8 @@ public class TortureTest extends FractionalAutomatedTest { public void run(){ try { DOMBuilder domBuilder = new DOMBuilder(); - parser = new Parser(code.toString(), domBuilder, quickParse); + IParser parser = ParserFactory.createParser( + ParserFactory.createScanner( new StringReader( code ), null, null, null, ParserMode.QUICK_PARSE ), nullCallback, ParserMode.QUICK_PARSE); parser.setCppNature(cppNature); parser.mapLineNumbers(true); diff --git a/core/org.eclipse.cdt.ui/ChangeLog b/core/org.eclipse.cdt.ui/ChangeLog index 1d3776710b6..ac3fb21cd52 100644 --- a/core/org.eclipse.cdt.ui/ChangeLog +++ b/core/org.eclipse.cdt.ui/ChangeLog @@ -1,3 +1,7 @@ +2003-06-23 John Camelon + Updated Factory infrastructure, constructors, etc. + Introduced Preprocessor class for transitive closure calc. client. + 2003-06-20 Sean Evoy Added (again) the icons required for the new managed project wizard and property pages * icons/full/build16/config-command.gif diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/ComparatorModelBuilder.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/ComparatorModelBuilder.java index 2d975520551..343997da4f8 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/ComparatorModelBuilder.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/ComparatorModelBuilder.java @@ -11,10 +11,14 @@ package org.eclipse.cdt.internal.ui.compare; +import java.io.StringReader; import java.util.Iterator; import java.util.List; import org.eclipse.cdt.core.model.ICElement; +import org.eclipse.cdt.core.parser.IParser; +import org.eclipse.cdt.core.parser.ParserFactory; +import org.eclipse.cdt.core.parser.ParserMode; import org.eclipse.cdt.internal.core.dom.ClassKey; import org.eclipse.cdt.internal.core.dom.ClassSpecifier; import org.eclipse.cdt.internal.core.dom.DOMBuilder; @@ -31,7 +35,6 @@ import org.eclipse.cdt.internal.core.dom.TemplateDeclaration; import org.eclipse.cdt.internal.core.dom.TranslationUnit; import org.eclipse.cdt.internal.core.dom.TypeSpecifier; import org.eclipse.cdt.internal.core.parser.Name; -import org.eclipse.cdt.internal.core.parser.Parser; import org.eclipse.cdt.internal.parser.IStructurizerCallback; /** @@ -54,8 +57,7 @@ public class ComparatorModelBuilder { public void parse() { DOMBuilder domBuilder = new DOMBuilder(); try { - - Parser parser = new Parser(code, domBuilder, true); + IParser parser = ParserFactory.createParser(ParserFactory.createScanner( new StringReader( code ), null, null, null, ParserMode.QUICK_PARSE ), domBuilder, ParserMode.QUICK_PARSE); parser.parse(); } catch (Exception e) { callback.reportError(e); |