Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Schaefer2004-06-04 21:01:48 +0000
committerDoug Schaefer2004-06-04 21:01:48 +0000
commita206e32d2a667de93cdecff1ae387503e76a755a (patch)
tree3440a2f8dee25e0e90ada03ea71503869a8235f4
parent98800badf41d15b2ca0fc2860c3e7b21103c59e6 (diff)
downloadorg.eclipse.cdt-a206e32d2a667de93cdecff1ae387503e76a755a.tar.gz
org.eclipse.cdt-a206e32d2a667de93cdecff1ae387503e76a755a.tar.xz
org.eclipse.cdt-a206e32d2a667de93cdecff1ae387503e76a755a.zip
Changed the interface to the Scanner to take a CodeReader object.
A CodeReader simply contains a char[] and the name of the file, if any, that the char[] is the contents of. This leads us down the path of using char[]s in the parser instead of Strings in an attempt to cut down on our memory usage.
-rw-r--r--build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java6
-rw-r--r--core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java5
-rw-r--r--core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java7
-rw-r--r--core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/BinaryTests.java2
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/AutomatedTest.java2
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseASTTest.java4
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/BaseScannerTest.java5
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTSymbolIteratorTest.java4
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseBaseTest.java7
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompletionParseBaseTest.java8
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ExprEvalTest.java5
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/FractionalAutomatedTest.java4
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/PreprocessorConditionalTest.java5
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java7
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseBaseTest.java6
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SpeedTest.java53
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/StructuralParseTest.java4
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/TortureTest.java3
-rw-r--r--core/org.eclipse.cdt.core.tests/search/org/eclipse/cdt/core/search/tests/ParseTestOnSearchFiles.java6
-rw-r--r--core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/testplugin/CProjectHelper.java2
-rw-r--r--core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java46
-rw-r--r--core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java7
-rw-r--r--core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java4
-rw-r--r--core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder.java16
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/CodeReader.java85
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java3
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullSourceElementRequestor.java3
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParserFactory.java16
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/InternalParserUtil.java15
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/Parser.java1
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ContextStack.java9
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/GCCScannerExtension.java10
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/IScannerData.java9
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LimitedScannerContext.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/Scanner.java70
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextInclusion.java55
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextTop.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerUtility.java9
-rw-r--r--core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/CSearchPattern.java23
-rw-r--r--core/org.eclipse.cdt.core/search/org/eclipse/cdt/internal/core/search/matching/MatchLocator.java26
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CConventions.java5
-rw-r--r--core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserUtil.java32
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/CStructureCreator.java8
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/SourceElementRequestorAdapter.java4
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/SelectionParseAction.java16
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/CompletionEngine.java8
-rw-r--r--core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistElementRequestor.java4
47 files changed, 323 insertions, 318 deletions
diff --git a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java
index e538af65087..b91231383cb 100644
--- a/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java
+++ b/build/org.eclipse.cdt.managedbuilder.core.tests/tests/org/eclipse/cdt/managedbuild/core/tests/ManagedBuildCoreTests.java
@@ -11,7 +11,6 @@
package org.eclipse.cdt.managedbuild.core.tests;
import java.io.ByteArrayInputStream;
-import java.io.StringReader;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -23,6 +22,7 @@ import junit.framework.TestSuite;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.ICDescriptor;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.IScannerInfo;
@@ -1508,8 +1508,8 @@ public class ManagedBuildCoreTests extends TestCase {
IScannerInfo info = provider.getScannerInformation( project );
ISourceElementRequestor callback = new NullSourceElementRequestor();
- IScanner scanner = ParserFactory.createScanner( new StringReader( "#include <header.h>\n int A::i = 1;" ),
- "TEST", info, ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, callback, new NullLogService(), null);
+ IScanner scanner = ParserFactory.createScanner( new CodeReader( "#include <header.h>\n int A::i = 1;".toCharArray() ),
+ info, ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, callback, new NullLogService(), null);
IParser parser = ParserFactory.createParser( scanner, callback, ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, null );
assertTrue( parser.parse() );
diff --git a/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java b/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java
index 355b0841aeb..7abe6c4cd27 100644
--- a/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java
+++ b/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/DependencyTests.java
@@ -117,6 +117,8 @@ import org.eclipse.core.runtime.Platform;
//Delete project
if (testProject.exists()){
try {
+ System.gc();
+ System.runFinalization();
testProject.delete(true,monitor);
} catch (CoreException e) {
fail(getMessage(e.getStatus()));
@@ -470,8 +472,7 @@ import org.eclipse.core.runtime.Platform;
j++;
}
- if (postDepTestModelLocal.length != postDepTestIncludes.length)
- fail("Number of included files differs from model");
+ assertEquals(postDepTestModelLocal.length, postDepTestIncludes.length);
Arrays.sort(postDepTestModelLocal);
Arrays.sort(postDepTestIncludes);
diff --git a/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java b/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java
index bb53e14ce50..7d988ad9187 100644
--- a/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java
+++ b/core/org.eclipse.cdt.core.tests/indexer/org/eclipse/cdt/core/indexer/tests/IndexManagerTests.java
@@ -89,6 +89,8 @@ public class IndexManagerTests extends TestCase {
//Delete project
if (testProject.exists()) {
try {
+ System.gc();
+ System.runFinalization();
testProject.delete(true, monitor);
} catch (CoreException e) {
fail(getMessage(e.getStatus()));
@@ -239,6 +241,8 @@ public class IndexManagerTests extends TestCase {
* @param testProject
*/
private void safeDelete(IProject testProject) throws InterruptedException, CoreException {
+ System.gc();
+ System.runFinalization();
try {
testProject.delete(true, monitor);
} catch (CoreException e) {
@@ -277,6 +281,9 @@ public class IndexManagerTests extends TestCase {
}
//Delete mail.cpp from the project, give some time to remove index
IResource resourceHdl = testProject.findMember("mail.cpp") ;
+ // Cleaning up file handles before delete
+ System.gc();
+ System.runFinalization();
resourceHdl.delete(true,monitor);
Thread.sleep(10000);
//See if the index is still there
diff --git a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/BinaryTests.java b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/BinaryTests.java
index ac7547c62c6..a45a429e324 100644
--- a/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/BinaryTests.java
+++ b/core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/model/tests/BinaryTests.java
@@ -175,6 +175,8 @@ public class BinaryTests extends TestCase {
* Called after every test case method.
*/
protected void tearDown() throws CoreException, InterruptedException {
+ System.gc();
+ System.runFinalization();
CProjectHelper.delete(testProject);
}
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 d428db9e338..ea4991b0c0c 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
@@ -58,7 +58,7 @@ public class AutomatedTest extends AutomatedFramework {
String filePath = file.getCanonicalPath();
ParserLanguage language = ((String)natures.get( filePath )).equalsIgnoreCase("cpp") ? ParserLanguage.CPP : ParserLanguage.C; //$NON-NLS-1$
- parser = ParserFactory.createParser( ParserFactory.createScanner( new InputStreamReader (stream), filePath, new ScannerInfo(), ParserMode.QUICK_PARSE, language, nullCallback, null, null ), nullCallback, ParserMode.QUICK_PARSE, language, null);
+ parser = ParserFactory.createParser( ParserFactory.createScanner(filePath, new ScannerInfo(), ParserMode.QUICK_PARSE, language, nullCallback, null, null ), nullCallback, ParserMode.QUICK_PARSE, language, null);
mapping = ParserFactory.createLineOffsetReconciler( new InputStreamReader( stream ) );
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 db9f88093b0..5d7cd2f7313 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
@@ -10,11 +10,11 @@
***********************************************************************/
package org.eclipse.cdt.core.parser.tests;
-import java.io.StringReader;
import java.util.Iterator;
import junit.framework.TestCase;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IQuickParseCallback;
import org.eclipse.cdt.core.parser.NullLogService;
@@ -51,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, new NullLogService(), null), quickParseCallback, mode, lang, null ); //$NON-NLS-1$
+ parser = ParserFactory.createParser( ParserFactory.createScanner( new CodeReader(code.toCharArray()), new ScannerInfo(), mode, lang, quickParseCallback, new NullLogService(), null), quickParseCallback, mode, lang, null ); //$NON-NLS-1$
if( ! parser.parse() && throwExceptionOnError )
throw new ParserException("Parse failure"); //$NON-NLS-1$
return quickParseCallback.getCompilationUnit();
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 1dbded359f5..771ea51f723 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
@@ -11,10 +11,9 @@
package org.eclipse.cdt.core.parser.tests;
-import java.io.StringReader;
-
import junit.framework.TestCase;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.EndOfFileException;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
@@ -47,7 +46,7 @@ public class BaseScannerTest extends TestCase {
protected void initializeScanner( String input, ParserMode mode, ISourceElementRequestor requestor ) throws ParserFactoryError
{
- scanner= ParserFactory.createScanner( new StringReader(input),"TEXT", new ScannerInfo(), mode, ParserLanguage.CPP, requestor, null, null ); //$NON-NLS-1$
+ scanner= ParserFactory.createScanner( new CodeReader(input.toCharArray()), new ScannerInfo(), mode, ParserLanguage.CPP, requestor, null, null ); //$NON-NLS-1$
}
protected void initializeScanner(String input) throws ParserFactoryError
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTSymbolIteratorTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTSymbolIteratorTest.java
index adabdb779d2..0aed7bbe757 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTSymbolIteratorTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTSymbolIteratorTest.java
@@ -6,10 +6,10 @@
*/
package org.eclipse.cdt.core.parser.tests;
-import java.io.StringReader;
import java.util.Iterator;
import java.util.NoSuchElementException;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.NullLogService;
@@ -67,7 +67,7 @@ public class CompleteParseASTSymbolIteratorTest extends CompleteParseBaseTest {
{
callback = new CompilationUnitCallback();
IParser parser = ParserFactory.createParser(
- ParserFactory.createScanner( new StringReader( code ), "test-code", new ScannerInfo(), //$NON-NLS-1$
+ ParserFactory.createScanner( new CodeReader(code.toCharArray()), new ScannerInfo(),
ParserMode.COMPLETE_PARSE, language, callback, new NullLogService(), null ), callback, ParserMode.COMPLETE_PARSE, language, null
);
if( ! parser.parse() && throwOnError ) throw new ParserException( "FAILURE"); //$NON-NLS-1$
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 f456de6f066..0b177ea10d3 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
@@ -10,8 +10,6 @@
***********************************************************************/
package org.eclipse.cdt.core.parser.tests;
-import java.io.Reader;
-import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Hashtable;
@@ -22,6 +20,7 @@ import java.util.Stack;
import junit.framework.TestCase;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IProblem;
import org.eclipse.cdt.core.parser.ISourceElementCallbackDelegate;
@@ -737,7 +736,7 @@ public class CompleteParseBaseTest extends TestCase
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
- public Reader createReader(String finalPath, Iterator workingCopies) {
+ public CodeReader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath,workingCopies);
}
@@ -796,7 +795,7 @@ public class CompleteParseBaseTest extends TestCase
{
callback = new FullParseCallback();
IParser parser = ParserFactory.createParser(
- ParserFactory.createScanner( new StringReader( code ), "test-code", new ScannerInfo(), //$NON-NLS-1$
+ ParserFactory.createScanner( new CodeReader( code.toCharArray() ), new ScannerInfo(), //$NON-NLS-1$
ParserMode.COMPLETE_PARSE, language, callback, new NullLogService(), null ), callback, ParserMode.COMPLETE_PARSE, language, null
);
if( ! parser.parse() && throwOnError ) throw new ParserException( "FAILURE"); //$NON-NLS-1$
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompletionParseBaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompletionParseBaseTest.java
index 5bdea702016..bce211a9b1d 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompletionParseBaseTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompletionParseBaseTest.java
@@ -10,10 +10,10 @@
***********************************************************************/
package org.eclipse.cdt.core.parser.tests;
-import java.io.StringReader;
import java.util.Iterator;
import java.util.Set;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.NullLogService;
import org.eclipse.cdt.core.parser.ParserFactory;
@@ -51,8 +51,7 @@ public class CompletionParseBaseTest extends CompleteParseBaseTest {
parser =
ParserFactory.createParser(
ParserFactory.createScanner(
- new StringReader(code),
- "completion-test", //$NON-NLS-1$
+ new CodeReader(code.toCharArray()),
new ScannerInfo(),
ParserMode.COMPLETION_PARSE,
ParserLanguage.CPP,
@@ -73,8 +72,7 @@ public class CompletionParseBaseTest extends CompleteParseBaseTest {
parser =
ParserFactory.createParser(
ParserFactory.createScanner(
- new StringReader(code),
- "completion-test", //$NON-NLS-1$
+ new CodeReader(code.toCharArray()),
new ScannerInfo(),
ParserMode.COMPLETION_PARSE,
lang,
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 1bd8226fae2..39fe4b34223 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,11 +1,10 @@
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.CodeReader;
import org.eclipse.cdt.core.parser.NullLogService;
import org.eclipse.cdt.core.parser.NullSourceElementRequestor;
import org.eclipse.cdt.core.parser.ParserFactory;
@@ -28,7 +27,7 @@ public class ExprEvalTest extends TestCase {
public void runTest(String code, int expectedValue) throws Exception {
final NullSourceElementRequestor nullCallback = new NullSourceElementRequestor();
- IExpressionParser parser = InternalParserUtil.createExpressionParser(ParserFactory.createScanner( new StringReader( code ), getClass().getName(), new ScannerInfo(), null, ParserLanguage.CPP, nullCallback, new NullLogService(), null ), ParserLanguage.CPP, null );
+ IExpressionParser parser = InternalParserUtil.createExpressionParser(ParserFactory.createScanner( new CodeReader( code.toCharArray() ), new ScannerInfo(), null, ParserLanguage.CPP, nullCallback, new NullLogService(), null ), ParserLanguage.CPP, null );
IASTExpression expression = parser.expression(null,null, 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 195c1f7bf9e..645077607a0 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,13 @@ 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.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.NullLogService;
import org.eclipse.cdt.core.parser.ParserFactory;
@@ -242,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, new NullLogService(), null ), nullCallback, ParserMode.QUICK_PARSE, language, null );
+ ParserFactory.createScanner( new CodeReader( code.toCharArray() ), new ScannerInfo(), ParserMode.QUICK_PARSE, language, nullCallback, new NullLogService(), null ), 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/PreprocessorConditionalTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/PreprocessorConditionalTest.java
index 81279a58b02..b598550c78f 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/PreprocessorConditionalTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/PreprocessorConditionalTest.java
@@ -10,10 +10,10 @@
***********************************************************************/
package org.eclipse.cdt.core.parser.tests;
-import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.EndOfFileException;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.IToken;
@@ -36,10 +36,9 @@ public class PreprocessorConditionalTest extends BaseScannerTest
protected void initializeScanner(String input, Map definitions ) throws Exception
{
- scanner= ParserFactory.createScanner( new StringReader(input),"TEXT", new ScannerInfo( definitions ), ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, nullSourceElementRequestor, null, null ); //$NON-NLS-1$
+ scanner= ParserFactory.createScanner( new CodeReader(input.toCharArray()), new ScannerInfo( definitions ), ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, nullSourceElementRequestor, null, null );
}
-
protected void evaluateConditionalsPositive( String conditional, Map definitions ) throws Exception
{
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java
index 9b01a679074..371a1654f35 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/QuickParseASTTests.java
@@ -1156,7 +1156,7 @@ public class QuickParseASTTests extends BaseASTTest
String code = "#include <stdio.h>\n#define DEF VALUE\n"; //$NON-NLS-1$
- IASTCompilationUnit tu = parse( code );
+ IASTCompilationUnit tu = parse( code.toString() );
assertFalse( tu.getDeclarations().hasNext());
Iterator inclusions = quickParseCallback.getInclusions();
Iterator macros = quickParseCallback.getMacros();
@@ -2244,9 +2244,4 @@ public class QuickParseASTTests extends BaseASTTest
assertFalse( iter.hasNext() );
}
}
-
- public void testBug61972() throws Exception
- {
- parse( "#define DEF1(A1) A1\n#define DEF2 DEF1(DEF2)\nDEF2;", true, false ); //$NON-NLS-1$
- }
} \ No newline at end of file
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseBaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseBaseTest.java
index c604a23a313..15456fcbd53 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseBaseTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SelectionParseBaseTest.java
@@ -9,8 +9,7 @@
* IBM Rational Software - Initial API and implementation */
package org.eclipse.cdt.core.parser.tests;
-import java.io.StringReader;
-
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.NullLogService;
import org.eclipse.cdt.core.parser.ParserFactory;
@@ -43,8 +42,7 @@ public class SelectionParseBaseTest extends CompleteParseBaseTest {
parser =
ParserFactory.createParser(
ParserFactory.createScanner(
- new StringReader(code),
- "completion-test", //$NON-NLS-1$
+ new CodeReader(code.toCharArray()),
new ScannerInfo(),
ParserMode.SELECTION_PARSE,
ParserLanguage.CPP,
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SpeedTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SpeedTest.java
index 74b201fede3..d58a20bc85f 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SpeedTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/SpeedTest.java
@@ -1,19 +1,12 @@
-/*
- * Created on Jun 3, 2004
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
package org.eclipse.cdt.core.parser.tests;
-import java.io.Reader;
-import java.io.StringReader;
import java.util.Collections;
import java.util.Hashtable;
import java.util.Map;
import junit.framework.TestCase;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.IScannerInfo;
@@ -23,54 +16,43 @@ import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ScannerInfo;
import org.eclipse.cdt.internal.core.parser.QuickParseCallback;
-/**
- * @author Doug Schaefer
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
+// A test that just calculates the speed of the parser
+// Eventually, we'll peg a max time and fail the test if it exceeds it
public class SpeedTest extends TestCase {
public static void main(String[] args) {
try {
- new SpeedTest().runTest(1);
+ new SpeedTest().test();
} catch (Exception e) {
- e.printStackTrace();
+ System.out.println(e);
}
}
public void test() throws Exception {
- runTest(1);
- }
-
- public void runTest(int n) throws Exception {
- for (int i = 0; i < n; ++i) {
- System.gc();
- String code =
- "#include <windows.h>\n" +
- "#include <stdio.h>\n" +
- "#include <iostream>\n";
-
- Reader reader = new StringReader(code);
- IScannerInfo info = mingwScannerInfo(false);
- //IScannerInfo info = msvcScannerInfo(quick);
- testParse(reader, "text", false, info, ParserLanguage.CPP);
- }
+ String code =
+ "#include <windows.h>\n" +
+ "#include <stdio.h>\n" +
+ "#include <iostream>\n";
+
+ CodeReader reader = new CodeReader(code.toCharArray());
+ IScannerInfo info = mingwScannerInfo(false);
+ //IScannerInfo info = msvcScannerInfo(quick);
+ testParse(reader, false, info, ParserLanguage.CPP);
}
/**
* @param path
* @param quick TODO
*/
- protected void testParse(Reader reader, String path, boolean quick, IScannerInfo info, ParserLanguage lang) throws Exception {
+ protected void testParse(CodeReader reader, boolean quick, IScannerInfo info, ParserLanguage lang) throws Exception {
ParserMode mode = quick ? ParserMode.QUICK_PARSE : ParserMode.COMPLETE_PARSE;
- IScanner scanner = ParserFactory.createScanner(reader, path, info, mode, lang, CALLBACK, null, Collections.EMPTY_LIST );
+ IScanner scanner = ParserFactory.createScanner(reader, info, mode, lang, CALLBACK, null, Collections.EMPTY_LIST );
IParser parser = ParserFactory.createParser( scanner, CALLBACK, mode, lang, null);
long startTime = System.currentTimeMillis();
long totalTime;
parser.parse();
totalTime = System.currentTimeMillis() - startTime;
- System.out.println( "Resulting parse for " + path + " took " + totalTime + " millisecs"); //$NON-NLS-1$ //$NON-NLS-2$
+ System.out.println( "Resulting parse took " + totalTime + " millisecs"); //$NON-NLS-1$ //$NON-NLS-2$
}
private static final QuickParseCallback CALLBACK = new QuickParseCallback();
@@ -93,6 +75,7 @@ public class SpeedTest extends TestCase {
}
protected IScannerInfo mingwScannerInfo(boolean quick) {
+ // TODO It would be easier and more flexible if we used discovery for this
if( quick )
return new ScannerInfo();
Map definitions = new Hashtable();
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/StructuralParseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/StructuralParseTest.java
index 7c40793ff18..b52cafa0c39 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/StructuralParseTest.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/StructuralParseTest.java
@@ -13,11 +13,11 @@
*/
package org.eclipse.cdt.core.parser.tests;
-import java.io.StringReader;
import java.util.Iterator;
import junit.framework.TestCase;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.NullLogService;
import org.eclipse.cdt.core.parser.ParserFactory;
@@ -59,7 +59,7 @@ public class StructuralParseTest extends TestCase {
{
callback = new StructuralParseCallback();
IParser parser = ParserFactory.createParser(
- ParserFactory.createScanner( new StringReader( code ), "test-code", new ScannerInfo(), //$NON-NLS-1$
+ ParserFactory.createScanner( new CodeReader( code.toCharArray() ), new ScannerInfo(), //$NON-NLS-1$
ParserMode.STRUCTURAL_PARSE, language, callback, new NullLogService(), null ),
callback, ParserMode.STRUCTURAL_PARSE, language, null
);
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 51c3eef98f4..b18a2e04388 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
@@ -22,6 +22,7 @@ import java.util.StringTokenizer;
import junit.framework.AssertionFailedError;
import junit.framework.Test;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.ILineOffsetReconciler;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.NullLogService;
@@ -281,7 +282,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, new NullLogService(), null ), nullCallback, parserMode, language, null);
+ ParserFactory.createScanner( new CodeReader( code.toCharArray() ), new ScannerInfo(), parserMode, language, nullCallback, new NullLogService(), null ), 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 53bedba550a..d08f75d9e06 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
@@ -11,8 +11,6 @@
package org.eclipse.cdt.core.search.tests;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
import junit.framework.TestCase;
@@ -34,7 +32,6 @@ import org.eclipse.core.runtime.Path;
*/
public class ParseTestOnSearchFiles extends TestCase
{
- private FileInputStream fileIn;
private String name;
private String fullPathName;
/**
@@ -56,13 +53,12 @@ public class ParseTestOnSearchFiles extends TestCase
name = "resources/search/classDecl.cpp";
File f = CTestPlugin.getDefault().getFileInPlugin(new Path(name));
fullPathName = f.getAbsolutePath();
- fileIn = new FileInputStream(f);
}
public void testParseOfAndrewsFile() throws Exception
{
ISourceElementRequestor requestor = new NullSourceElementRequestor();
- IScanner scanner = ParserFactory.createScanner( new InputStreamReader( fileIn ), fullPathName, new ScannerInfo(), ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, requestor, new NullLogService(), null );
+ IScanner scanner = ParserFactory.createScanner( fullPathName, new ScannerInfo(), ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, requestor, new NullLogService(), null );
IParser parser = ParserFactory.createParser( scanner, requestor, ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, null );
assertTrue( parser.parse() );
}
diff --git a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/testplugin/CProjectHelper.java b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/testplugin/CProjectHelper.java
index f0a5376433f..458b7e1356d 100644
--- a/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/testplugin/CProjectHelper.java
+++ b/core/org.eclipse.cdt.core.tests/suite/org/eclipse/cdt/testplugin/CProjectHelper.java
@@ -110,6 +110,8 @@ public class CProjectHelper {
} catch (InterruptedException e1) {
} finally {
try {
+ System.gc();
+ System.runFinalization();
cproject.getProject().delete(true, true, null);
} catch (CoreException e2) {
Assert.fail(getMessage(e2.getStatus()));
diff --git a/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java b/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java
index a6e31a798a2..f1d9d855e36 100644
--- a/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java
+++ b/core/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java
@@ -11,13 +11,8 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.browser.cache;
-import java.io.CharArrayReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
+import java.io.IOException;
import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
@@ -38,6 +33,7 @@ import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICProject;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.core.model.IWorkingCopy;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.DefaultProblemHandler;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IProblem;
@@ -54,7 +50,6 @@ 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.ASTClassKind;
-import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTClassReference;
@@ -86,6 +81,7 @@ import org.eclipse.cdt.core.parser.ast.IASTTemplateDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTemplateInstantiation;
import org.eclipse.cdt.core.parser.ast.IASTTemplateParameterReference;
import org.eclipse.cdt.core.parser.ast.IASTTemplateSpecialization;
+import org.eclipse.cdt.core.parser.ast.IASTTypedefDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTTypedefReference;
import org.eclipse.cdt.core.parser.ast.IASTUsingDeclaration;
import org.eclipse.cdt.core.parser.ast.IASTUsingDirective;
@@ -285,7 +281,7 @@ public class TypeParser implements ISourceElementRequestor {
return; // not C or C++
}
- Reader reader = null;
+ CodeReader reader = null;
Object stackObject = null;
if (workingCopy != null) {
@@ -358,46 +354,44 @@ public class TypeParser implements ISourceElementRequestor {
return projectLanguage;
}
- private Reader createWorkingCopyReader(IWorkingCopy workingCopy) {
- Reader reader = null;
+ private CodeReader createWorkingCopyReader(IWorkingCopy workingCopy) {
+ CodeReader reader = null;
IResource resource = workingCopy.getResource();
if (resource != null && resource.isAccessible()) {
char[] contents = workingCopy.getContents();
if (contents != null)
- reader = new CharArrayReader(contents);
+ reader = new CodeReader(resource.getLocation().toOSString(), contents);
}
return reader;
}
- private Reader createResourceReader(IResource resource) {
- Reader reader = null;
+ private CodeReader createResourceReader(IResource resource) {
+ CodeReader reader = null;
if (resource.isAccessible() && resource instanceof IFile) {
IFile file = (IFile) resource;
try {
InputStream contents = file.getContents();
if (contents != null)
- reader = new InputStreamReader(contents);
+ reader = new CodeReader(resource.getLocation().toOSString(), contents);
} catch (CoreException ex) {
ex.printStackTrace();
+ } catch (IOException e) {
}
}
return reader;
}
- private Reader createFileReader(IPath path) {
- Reader reader = null;
- File file = path.toFile();
- if (file != null) {
- try {
- reader = new FileReader(file);
- } catch (FileNotFoundException ex) {
- ex.printStackTrace();
- }
+ private CodeReader createFileReader(IPath path) {
+ CodeReader reader = null;
+ try {
+ reader = new CodeReader(path.toOSString());
+ } catch (IOException ex) {
+ ex.printStackTrace();
}
return reader;
}
- private void parseContents(IPath realPath, IProject project, Reader reader, ParserLanguage language, IProgressMonitor progressMonitor) throws InterruptedException {
+ private void parseContents(IPath realPath, IProject project, CodeReader reader, ParserLanguage language, IProgressMonitor progressMonitor) throws InterruptedException {
IScannerInfo scanInfo = null;
if (project != null) {
@@ -418,7 +412,7 @@ public class TypeParser implements ISourceElementRequestor {
try {
fProgressMonitor = progressMonitor;
- IScanner scanner = ParserFactory.createScanner(reader, realPath.toOSString(), scanInfo,
+ IScanner scanner = ParserFactory.createScanner(reader, scanInfo,
ParserMode.STRUCTURAL_PARSE, language, this, ParserUtil.getScannerLogService(), null);
IParser parser = ParserFactory.createParser(scanner, this, ParserMode.STRUCTURAL_PARSE, language, ParserUtil.getParserLogService());
parser.parse();
@@ -711,7 +705,7 @@ public class TypeParser implements ISourceElementRequestor {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
- public Reader createReader(String finalPath, Iterator workingCopies) {
+ public CodeReader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath, workingCopies);
}
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 dabd9e8d35e..7c0ca267cfe 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
@@ -16,14 +16,13 @@ package org.eclipse.cdt.internal.core.search.indexing;
*/
import java.io.BufferedInputStream;
-import java.io.BufferedReader;
import java.io.IOException;
-import java.io.InputStreamReader;
import java.util.ArrayList;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.ICLogConstants;
import org.eclipse.cdt.core.model.CoreModel;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
@@ -103,10 +102,10 @@ public class SourceIndexer extends AbstractIndexer {
try
{
-
+ CodeReader reader = new CodeReader(resourceFile.getLocation().toOSString(), resourceFile.getContents());
BufferedInputStream inStream = new BufferedInputStream(resourceFile.getContents());
parser = ParserFactory.createParser(
- ParserFactory.createScanner( new BufferedReader(new InputStreamReader(inStream)), resourceFile.getLocation().toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getScannerLogService(), null ),
+ ParserFactory.createScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getScannerLogService(), null ),
requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
} catch( ParserFactoryError pfe )
{
diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java
index a69cc360829..e5e274589b3 100644
--- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java
+++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java
@@ -16,7 +16,6 @@ package org.eclipse.cdt.internal.core.search.indexing;
*/
-import java.io.Reader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -26,6 +25,7 @@ import java.util.Map;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.model.ICModelMarker;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IProblem;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ParserMode;
@@ -566,7 +566,7 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
- public Reader createReader(String finalPath, Iterator workingCopies) {
+ public CodeReader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath,workingCopies);
}
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 72777d637ed..c0bc437bbb4 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
@@ -10,8 +10,6 @@
******************************************************************************/
package org.eclipse.cdt.internal.core.model;
-import java.io.BufferedReader;
-import java.io.StringReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -23,6 +21,7 @@ import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.core.model.IProblemRequestor;
import org.eclipse.cdt.core.model.ITemplate;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IProblem;
import org.eclipse.cdt.core.parser.IQuickParseCallback;
@@ -163,13 +162,14 @@ public class CModelBuilder {
scanInfo = new ScannerInfo(buildScanInfo.getDefinedSymbols(), buildScanInfo.getIncludePaths());
}
}
-
+
+ CodeReader reader =
+ translationUnit.getUnderlyingResource() != null
+ ? new CodeReader(translationUnit.getUnderlyingResource().getLocation().toOSString(), code.toCharArray())
+ : new CodeReader(code.toCharArray());
parser = ParserFactory.createParser(
- ParserFactory.createScanner(
- new BufferedReader( new StringReader( code ) ),
- (translationUnit.getUnderlyingResource() != null ?
- translationUnit.getUnderlyingResource().getLocation().toOSString() :
- ""), //$NON-NLS-1$
+ ParserFactory.createScanner(
+ reader,
scanInfo,
mode,
language,
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/CodeReader.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/CodeReader.java
index 66e990663e6..5acf82a8326 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/CodeReader.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/CodeReader.java
@@ -10,29 +10,92 @@
***********************************************************************/
package org.eclipse.cdt.core.parser;
-import java.io.Reader;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.CharBuffer;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.charset.Charset;
/**
* @author jcamelon
*/
public class CodeReader {
+
+ private static final String NOFILE = "<text>";
+
+ public final char[] buffer;
+ public final String filename;
+
+ // If you already have preloaded the buffer, e.g. working copy
+ public CodeReader(String filename, char[] buffer) {
+ this.filename = filename;
+ this.buffer = buffer;
+ }
+
+ // If you are just scanning a string
+ public CodeReader(char[] buffer) {
+ this(NOFILE, buffer);
+ }
- public CodeReader( String filename, Reader reader )
+ // If you are loading up a file normally
+ public CodeReader(String filename) throws IOException
{
- this.reader = reader;
this.filename = filename;
+
+ FileInputStream stream = new FileInputStream(filename);
+ buffer = load(stream);
+ }
+
+ // If you have a handle on a stream to the file, e.g. IFile.getContents()
+ public CodeReader(String filename, InputStream stream) throws IOException {
+ this.filename = filename;
+
+ FileInputStream fstream =
+ (stream instanceof FileInputStream)
+ ? (FileInputStream)stream
+ : new FileInputStream(filename);
+ buffer = load(fstream);
}
- private final Reader reader;
- private final String filename;
+ private char[] load(FileInputStream stream) throws IOException {
+ FileChannel channel = stream.getChannel();
+ ByteBuffer byteBuffer = ByteBuffer.allocateDirect((int)channel.size());
+ channel.read(byteBuffer);
+ byteBuffer.rewind();
- public String getFilename()
- {
- return filename;
+ // TODO use the real encoding
+ CharBuffer charBuffer = Charset.forName("UTF-8").decode(byteBuffer);
+ if (charBuffer.hasArray())
+ return charBuffer.array();
+ else {
+ // Got to copy it out
+ char[] buff = new char[charBuffer.length()];
+ charBuffer.get(buff);
+ return buff;
+ }
}
- public Reader getUnderlyingReader()
- {
- return reader;
+ private char[] xload(FileInputStream stream) throws IOException {
+ FileChannel channel = stream.getChannel();
+ MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size());
+
+ // TODO use the real encoding
+ CharBuffer charBuffer = Charset.forName("UTF-8").decode(map);
+ if (charBuffer.hasArray())
+ return charBuffer.array();
+ else {
+ // Got to copy it out
+ char[] buff = new char[charBuffer.length()];
+ charBuffer.get(buff);
+ return buff;
+ }
+ }
+
+ public boolean isFile() {
+ return filename != NOFILE;
}
+
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java
index eae44683e65..1d18fe0a5fa 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ISourceElementRequestor.java
@@ -10,7 +10,6 @@
***********************************************************************/
package org.eclipse.cdt.core.parser;
-import java.io.Reader;
import java.util.Iterator;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
@@ -114,7 +113,7 @@ public interface ISourceElementRequestor {
* @param finalPath
* @return
*/
- public Reader createReader(String finalPath, Iterator workingCopies );
+ public CodeReader createReader(String finalPath, Iterator workingCopies );
/**
* The parser asks the client if it wishes to time out
* in case it is taking more than the expected time.
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullSourceElementRequestor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullSourceElementRequestor.java
index a9b1b909ebd..eb9cdfa15dd 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullSourceElementRequestor.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/NullSourceElementRequestor.java
@@ -1,7 +1,6 @@
package org.eclipse.cdt.core.parser;
-import java.io.Reader;
import java.util.Iterator;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
@@ -460,7 +459,7 @@ public class NullSourceElementRequestor implements ISourceElementRequestor
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
- public Reader createReader(String finalPath, Iterator workingCopies) {
+ public CodeReader createReader(String finalPath, Iterator workingCopies) {
return InternalParserUtil.createFileReader( finalPath );
}
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
index a0b4f661d33..5bbde8cc666 100644
--- 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
@@ -10,7 +10,7 @@
***********************************************************************/
package org.eclipse.cdt.core.parser;
-import java.io.BufferedReader;
+import java.io.IOException;
import java.io.Reader;
import java.util.List;
import java.util.Set;
@@ -97,22 +97,22 @@ public class ParserFactory {
* @return
* @throws ParserFactoryError - erroneous input provided
*/
- public static IScanner createScanner( Reader input, String fileName, IScannerInfo config, ParserMode mode, ParserLanguage language, ISourceElementRequestor requestor, IParserLogService log, List workingCopies ) throws ParserFactoryError
+ public static IScanner createScanner( CodeReader code, IScannerInfo config, ParserMode mode, ParserLanguage language, ISourceElementRequestor requestor, IParserLogService log, List workingCopies ) throws ParserFactoryError
{
- if( input == null ) throw new ParserFactoryError( ParserFactoryError.Kind.NULL_READER );
- Reader ourReader = input;
- if( !(input instanceof BufferedReader ))
- ourReader = new BufferedReader( input );
- if( fileName == null ) throw new ParserFactoryError( ParserFactoryError.Kind.NULL_FILENAME );
if( config == null ) throw new ParserFactoryError( ParserFactoryError.Kind.NULL_CONFIG );
if( language == null ) throw new ParserFactoryError( ParserFactoryError.Kind.NULL_LANGUAGE );
IParserLogService logService = ( log == null ) ? createDefaultLogService() : log;
ParserMode ourMode = ( (mode == null )? ParserMode.COMPLETE_PARSE : mode );
ISourceElementRequestor ourRequestor = (( requestor == null) ? new NullSourceElementRequestor() : requestor );
- IScanner s = new Scanner( ourReader, fileName, config, ourRequestor, ourMode, language, logService, extensionFactory.createScannerExtension(), workingCopies );
+ IScanner s = new Scanner( code, config, ourRequestor, ourMode, language, logService, extensionFactory.createScannerExtension(), workingCopies );
return s;
}
+ public static IScanner createScanner( String fileName, IScannerInfo config, ParserMode mode, ParserLanguage language, ISourceElementRequestor requestor, IParserLogService log, List workingCopies ) throws ParserFactoryError, IOException
+ {
+ return createScanner(new CodeReader(fileName), config, mode, language, requestor, log, workingCopies);
+ }
+
public static ILineOffsetReconciler createLineOffsetReconciler( Reader input )
{
return new LineOffsetReconciler( input );
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/InternalParserUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/InternalParserUtil.java
index a4f795c2d43..babde3432dd 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/InternalParserUtil.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/InternalParserUtil.java
@@ -10,12 +10,10 @@
*******************************************************************************/
package org.eclipse.cdt.internal.core.parser;
-import java.io.BufferedReader;
import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.Reader;
+import java.io.IOException;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParserLogService;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.ParserFactory;
@@ -43,16 +41,13 @@ public class InternalParserUtil extends ParserFactory {
* @param finalPath
* @return
*/
- public static Reader createFileReader(String finalPath) {
+ public static CodeReader createFileReader(String finalPath) {
File includeFile = new File(finalPath);
if (includeFile.exists() && includeFile.isFile())
{
- //check and see
try {
-
- return new BufferedReader( new FileReader( includeFile) );
- } catch (FileNotFoundException fnf) {
-
+ return new CodeReader(finalPath);
+ } catch (IOException e) {
}
}
return null;
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 5d5f21f7af0..5a6136e9530 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
@@ -214,6 +214,7 @@ public abstract class Parser extends ExpressionParser implements IParser
if( e instanceof Exception )
logException( "translationUnit", (Exception) e ); //$NON-NLS-1$
failParse();
+ break;
}
}
compilationUnit.exitScope( requestor, astFactory.getReferenceManager() );
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 442d88e719e..f54bba5646b 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
@@ -11,8 +11,7 @@
package org.eclipse.cdt.internal.core.parser.scanner;
-import java.io.Reader;
-
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParserLogService;
import org.eclipse.cdt.core.parser.IProblem;
import org.eclipse.cdt.core.parser.IScanner;
@@ -112,9 +111,9 @@ public class ContextStack {
scanner.setScannerContext(sentinel);
}
- public void updateInclusionContext(Reader reader, String filename, IASTInclusion inclusion, ISourceElementRequestor requestor) throws ContextException {
- addInclusionFilename( filename );
- ScannerContextInclusion context = new ScannerContextInclusion( reader, filename, inclusion, currentInclusionIndex - 1 );
+ public void updateInclusionContext(CodeReader code, IASTInclusion inclusion, ISourceElementRequestor requestor) throws ContextException {
+ addInclusionFilename( code.filename );
+ ScannerContextInclusion context = new ScannerContextInclusion( code, inclusion, currentInclusionIndex - 1 );
if( isCircularInclusion( context.getContextName() ) )
throw new ContextException( IProblem.PREPROCESSOR_CIRCULAR_INCLUSION );
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
index 1874ec73e2a..ff885aacc86 100644
--- 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
@@ -189,7 +189,13 @@ public class GCCScannerExtension implements IScannerExtension {
// search through include paths
while (iter.hasNext()) {
String path = (String)iter.next();
- duple = ScannerUtility.createReaderDuple( path, parsedDirective.getFilename(), iscanner.getClientRequestor(), iscanner.getWorkingCopies() );
+ String finalPath = ScannerUtility.createReconciledPath(path, parsedDirective.getFilename());
+ duple = (CodeReader)iscanner.getFileCache().get(finalPath);
+ if (duple == null) {
+ duple = ScannerUtility.createReaderDuple( finalPath, iscanner.getClientRequestor(), iscanner.getWorkingCopies() );
+ if (duple != null && duple.isFile())
+ iscanner.getFileCache().put(duple.filename, duple);
+ }
if( duple != null )
break;
}
@@ -198,7 +204,7 @@ public class GCCScannerExtension implements IScannerExtension {
{
try
{
- iscanner.getContextStack().updateInclusionContext(duple.getUnderlyingReader(), duple.getFilename(), inclusion, iscanner.getClientRequestor() );
+ iscanner.getContextStack().updateInclusionContext(duple, inclusion, iscanner.getClientRequestor() );
TraceUtil.outputTrace( iscanner.getLogService(), "GCCScannerExtension handling #include_next directive successfully pushed on new include file" ); //$NON-NLS-1$
}
catch (ContextException e1)
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/IScannerData.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/IScannerData.java
index ab4c13ebad6..ee89ddfa052 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/IScannerData.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/IScannerData.java
@@ -10,11 +10,11 @@
***********************************************************************/
package org.eclipse.cdt.internal.core.parser.scanner;
-import java.io.Reader;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParserLogService;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.IScannerInfo;
@@ -30,6 +30,7 @@ import org.eclipse.cdt.internal.core.parser.scanner.ScannerUtility.InclusionPars
* @author jcamelon
*/
public interface IScannerData {
+ public Map getFileCache();
/**
* @return Returns the contextStack.
*/
@@ -60,10 +61,6 @@ public interface IScannerData {
*/
public abstract IProblemFactory getProblemFactory();
/**
- * @return Returns the filename.
- */
- public abstract String getInitialFilename();
- /**
* @return Returns the language.
*/
public abstract ParserLanguage getLanguage();
@@ -74,7 +71,7 @@ public interface IScannerData {
/**
* @return Returns the reader.
*/
- public abstract Reader getInitialReader();
+ public abstract CodeReader getInitialReader();
/**
* @return Returns the requestor.
*/
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LimitedScannerContext.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LimitedScannerContext.java
index 12df43ee656..d87db361812 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LimitedScannerContext.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LimitedScannerContext.java
@@ -11,7 +11,7 @@
package org.eclipse.cdt.internal.core.parser.scanner;
-import java.io.Reader;
+import org.eclipse.cdt.core.parser.CodeReader;
/**
* @author jcamelon
@@ -30,8 +30,8 @@ public class LimitedScannerContext
* @param object
* @param offsetLimit
*/
- public LimitedScannerContext(Scanner scanner, Reader reader, String string, int offsetLimit, int index ) {
- super( reader, string, null, index );
+ public LimitedScannerContext(Scanner scanner, CodeReader code, int offsetLimit, int index ) {
+ super( code, null, index );
this.scanner = scanner;
limit = offsetLimit;
}
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 eeb4b1d490a..311c08c2557 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
@@ -12,8 +12,6 @@
package org.eclipse.cdt.internal.core.parser.scanner;
import java.io.File;
-import java.io.Reader;
-import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
@@ -88,8 +86,7 @@ public final class Scanner implements IScanner, IScannerData {
private IASTFactory astFactory = null;
private ISourceElementRequestor requestor;
private ParserMode parserMode;
- private final String filename;
- private final Reader reader;
+ private final CodeReader reader;
private final ParserLanguage language;
protected IParserLogService log;
private final IProblemFactory problemFactory = new ScannerProblemFactory();
@@ -109,6 +106,8 @@ public final class Scanner implements IScanner, IScannerData {
private boolean limitReached = false;
private IScannerContext currentContext;
+ private final Map fileCache = new HashMap(100);
+
public void setScannerContext(IScannerContext context) {
currentContext = context;
}
@@ -137,13 +136,12 @@ public final class Scanner implements IScanner, IScannerData {
throw new ScannerException( problem );
}
- Scanner( Reader reader, String filename, Map definitions, List includePaths, ISourceElementRequestor requestor, ParserMode mode, ParserLanguage language, IParserLogService log, IScannerExtension extension )
+ Scanner( CodeReader reader, Map definitions, List includePaths, ISourceElementRequestor requestor, ParserMode mode, ParserLanguage language, IParserLogService log, IScannerExtension extension )
{
String [] incs = (String [])includePaths.toArray(STRING_ARRAY);
this.log = log;
this.requestor = requestor;
this.parserMode = mode;
- this.filename = filename;
this.reader = reader;
this.language = language;
this.originalConfig = new ScannerInfo( definitions, incs );
@@ -152,15 +150,18 @@ public final class Scanner implements IScanner, IScannerData {
this.scannerExtension = extension;
this.definitions = definitions;
this.includePathNames = includePaths;
+
+ if (reader.isFile())
+ fileCache.put(reader.filename, reader);
+
setupBuiltInMacros();
}
- public Scanner(Reader reader, String filename, IScannerInfo info, ISourceElementRequestor requestor, ParserMode parserMode, ParserLanguage language, IParserLogService log, IScannerExtension extension, List workingCopies ) {
+ public Scanner(CodeReader reader, IScannerInfo info, ISourceElementRequestor requestor, ParserMode parserMode, ParserLanguage language, IParserLogService log, IScannerExtension extension, List workingCopies ) {
this.log = log;
this.requestor = requestor;
this.parserMode = parserMode;
- this.filename = filename;
this.reader = reader;
this.language = language;
this.originalConfig = info;
@@ -169,6 +170,9 @@ public final class Scanner implements IScanner, IScannerData {
this.scannerExtension = extension;
this.astFactory = ParserFactory.createASTFactory( this, parserMode, language );
+ if (reader.isFile())
+ fileCache.put(reader.filename, reader);
+
TraceUtil.outputTrace(log, "Scanner constructed with the following configuration:"); //$NON-NLS-1$
TraceUtil.outputTrace(log, "\tPreprocessor definitions from IScannerInfo: "); //$NON-NLS-1$
@@ -351,14 +355,13 @@ public final class Scanner implements IScanner, IScannerData {
private void setupInitialContext()
{
- String resolvedFilename = filename == null ? TEXT : filename;
IScannerContext context = null;
try
{
if( offsetLimit == NO_OFFSET_LIMIT )
- context = new ScannerContextTop(reader, resolvedFilename);
+ context = new ScannerContextTop(reader);
else
- context = new LimitedScannerContext( this, reader, resolvedFilename, offsetLimit, 0 );
+ context = new LimitedScannerContext( this, reader, offsetLimit, 0 );
contextStack.pushInitialContext( context );
} catch( ContextException ce )
{
@@ -586,7 +589,13 @@ public final class Scanner implements IScanner, IScannerData {
while (iter.hasNext()) {
String path = (String)iter.next();
- duple = ScannerUtility.createReaderDuple( path, fileName, requestor, getWorkingCopies() );
+ String finalPath = ScannerUtility.createReconciledPath(path, fileName);
+ duple = (CodeReader)fileCache.get(finalPath);
+ if (duple == null) {
+ duple = ScannerUtility.createReaderDuple( finalPath, requestor, getWorkingCopies() );
+ if (duple != null && duple.isFile())
+ fileCache.put(duple.filename, duple);
+ }
if( duple != null )
break totalLoop;
}
@@ -597,7 +606,13 @@ public final class Scanner implements IScanner, IScannerData {
}
else // local inclusion
{
- duple = ScannerUtility.createReaderDuple( new File( currentContext.getContextName() ).getParentFile().getAbsolutePath(), fileName, requestor, getWorkingCopies() );
+ String finalPath = ScannerUtility.createReconciledPath(new File( currentContext.getContextName() ).getParentFile().getAbsolutePath(), fileName);
+ duple = (CodeReader)fileCache.get(finalPath);
+ if (duple == null) {
+ duple = ScannerUtility.createReaderDuple( finalPath, requestor, getWorkingCopies() );
+ if (duple != null && duple.isFile())
+ fileCache.put(duple.filename, duple);
+ }
if( duple != null )
break totalLoop;
useIncludePaths = true;
@@ -612,7 +627,7 @@ public final class Scanner implements IScanner, IScannerData {
inclusion =
getASTFactory().createInclusion(
fileName,
- duple.getFilename(),
+ duple.filename,
!useIncludePaths,
beginOffset,
startLine,
@@ -627,8 +642,7 @@ public final class Scanner implements IScanner, IScannerData {
try
{
contextStack.updateInclusionContext(
- duple.getUnderlyingReader(),
- duple.getFilename(),
+ duple,
inclusion,
requestor);
}
@@ -1557,6 +1571,7 @@ public final class Scanner implements IScanner, IScannerData {
strbuff.append( next );
if( !processUniversalCharacterName() )
return null;
+ c = getChar(false);
continue; // back to top of loop
}
ungetChar( next );
@@ -2140,9 +2155,8 @@ public final class Scanner implements IScanner, IScannerData {
if( ! expression.trim().equals(EMPTY_STRING))
{
- IScanner subScanner = new Scanner(
- new StringReader(expression),
- SCRATCH,
+ IScanner subScanner = new Scanner(
+ new CodeReader(expression.toCharArray()),
getTemporaryHashtable(),
Collections.EMPTY_LIST,
NULL_REQUESTOR,
@@ -2588,9 +2602,8 @@ public final class Scanner implements IScanner, IScannerData {
strbuff.append(expression);
strbuff.append(';');
- IScanner trial = new Scanner(
- new StringReader(strbuff.toString()),
- EXPRESSION,
+ IScanner trial = new Scanner(
+ new CodeReader(strbuff.toString().toCharArray()),
definitions,
includePathNames,
NULL_REQUESTOR,
@@ -3592,16 +3605,9 @@ public final class Scanner implements IScanner, IScannerData {
}
/* (non-Javadoc)
- * @see org.eclipse.cdt.internal.core.parser.scanner.IScannerData#getInitialFilename()
- */
- public String getInitialFilename() {
- return filename;
- }
-
- /* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner.IScannerData#getInitialReader()
*/
- public Reader getInitialReader() {
+ public CodeReader getInitialReader() {
return reader;
}
@@ -3639,4 +3645,8 @@ public final class Scanner implements IScanner, IScannerData {
public void setIncludePathNames(List includePathNames) {
this.includePathNames = includePathNames;
}
+
+ public Map getFileCache() {
+ return fileCache;
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextInclusion.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextInclusion.java
index cde6e014702..258be57ae8f 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextInclusion.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextInclusion.java
@@ -11,16 +11,13 @@
package org.eclipse.cdt.internal.core.parser.scanner;
-import java.io.IOException;
-import java.io.Reader;
-
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.ast.IASTInclusion;
public class ScannerContextInclusion implements IScannerContext
{
public static final int UNDO_BUFFER_SIZE = 4;
- protected Reader reader;
- private String filename;
+ public CodeReader code;
private IASTInclusion inc;
private final int index;
private int line;
@@ -29,9 +26,8 @@ public class ScannerContextInclusion implements IScannerContext
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IScannerContext#initialize(Reader, String, int, IASTInclusion)
*/
- public ScannerContextInclusion(Reader r, String f, IASTInclusion i, int index) {
- reader = r;
- filename = f;
+ public ScannerContextInclusion(CodeReader code, IASTInclusion i, int index) {
+ this.code = code;
line = 1;
inc = i;
this.index = index;
@@ -41,39 +37,34 @@ public class ScannerContextInclusion implements IScannerContext
public final String getContextName()
{
- return filename;
+ return code.filename;
}
+
public int getOffset()
{
- return offset - pos;
+ return offset;
}
+
public void close() {
- try {
- reader.close();
- }
- catch (IOException ie) {
- }
- }
- protected int pos = 0;
- protected int undo[] = new int[UNDO_BUFFER_SIZE];
- public final void ungetChar(int c) {
- undo[pos++] = c;
+ //TODO remove close and replace by releasing from file cache
}
public int getChar() {
- if (pos > 0)
- return undo[--pos];
- try {
- ++offset;
- int c = reader.read();
- if ((char)c == '\n') line++;
- return c;
- }
- catch (IOException e) {
- return -1;
- }
+ if (offset == code.buffer.length)
+ return -1;
+
+ int c = code.buffer[offset++];
+ if ((char)c == '\n') line++;
+ return c;
}
-
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.internal.core.parser.scanner.IScannerContext#ungetChar(int)
+ */
+ public void ungetChar(int undo) {
+ --offset;
+ }
+
/**
* Returns the kind.
* @return int
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextTop.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextTop.java
index ed327652177..6016cfd4874 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextTop.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerContextTop.java
@@ -11,12 +11,12 @@
package org.eclipse.cdt.internal.core.parser.scanner;
-import java.io.Reader;
+import org.eclipse.cdt.core.parser.CodeReader;
public class ScannerContextTop extends ScannerContextInclusion
{
- ScannerContextTop(Reader r, String f) {
- super(r,f,null, 0);
+ ScannerContextTop(CodeReader code) {
+ super(code, null, 0);
}
public int getKind() {
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerUtility.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerUtility.java
index ed62ffca4f2..bdf1a71590e 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerUtility.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/ScannerUtility.java
@@ -10,7 +10,6 @@
******************************************************************************/package org.eclipse.cdt.internal.core.parser.scanner;
import java.io.File;
-import java.io.Reader;
import java.util.Iterator;
import java.util.Vector;
@@ -67,13 +66,9 @@ public class ScannerUtility {
}
- static CodeReader createReaderDuple( String path, String fileName, ISourceElementRequestor requestor, Iterator workingCopies )
+ static CodeReader createReaderDuple( String path, ISourceElementRequestor requestor, Iterator workingCopies )
{
- String finalPath = createReconciledPath(path, fileName);
- Reader r = requestor.createReader( finalPath, workingCopies );
- if( r != null )
- return new CodeReader( finalPath, r );
- return null;
+ return requestor.createReader( path, workingCopies );
}
/**
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 9c181c81b2e..432c337803e 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
@@ -14,10 +14,10 @@
package org.eclipse.cdt.internal.core.search.matching;
import java.io.IOException;
-import java.io.StringReader;
import java.util.Iterator;
import java.util.LinkedList;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.EndOfFileException;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IParserLogService;
@@ -179,8 +179,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
try {
scanner =
ParserFactory.createScanner(
- new StringReader(patternString),
- "TEXT", //$NON-NLS-1$
+ new CodeReader(patternString.toCharArray()),
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
@@ -250,8 +249,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
try {
scanner =
ParserFactory.createScanner(
- new StringReader(patternString),
- "TEXT", //$NON-NLS-1$
+ new CodeReader(patternString.toCharArray()),
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
@@ -292,8 +290,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
try {
scanner =
ParserFactory.createScanner(
- new StringReader(nameString),
- "TEXT", //$NON-NLS-1$
+ new CodeReader(nameString.toCharArray()),
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
@@ -351,8 +348,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
try {
scanner =
ParserFactory.createScanner(
- new StringReader(patternString),
- "TEXT", //$NON-NLS-1$
+ new CodeReader(patternString.toCharArray()),
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
@@ -403,8 +399,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
try {
scanner =
ParserFactory.createScanner(
- new StringReader(patternString),
- "TEXT", //$NON-NLS-1$
+ new CodeReader(patternString.toCharArray()),
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
@@ -429,8 +424,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
try {
scanner =
ParserFactory.createScanner(
- new StringReader(patternString),
- "TEXT", //$NON-NLS-1$
+ new CodeReader(patternString.toCharArray()),
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
@@ -464,8 +458,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
try {
scanner =
ParserFactory.createScanner(
- new StringReader(functionString),
- "TEXT", //$NON-NLS-1$
+ new CodeReader(functionString.toCharArray()),
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
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 2365191a532..d2ae789b8d2 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
@@ -13,11 +13,7 @@
*/
package org.eclipse.cdt.internal.core.search.matching;
-import java.io.CharArrayReader;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.InputStreamReader;
-import java.io.Reader;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -27,6 +23,7 @@ import java.util.LinkedList;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.IWorkingCopy;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IProblem;
import org.eclipse.cdt.core.parser.IScanner;
@@ -389,7 +386,7 @@ public class MatchLocator implements IMatchLocator{
if (!searchScope.encloses(pathString)) continue;
- Reader reader = null;
+ CodeReader reader = null;
realPath = null;
IProject project = null;
@@ -400,7 +397,7 @@ public class MatchLocator implements IMatchLocator{
if( workingCopy != null ){
currentResource = workingCopy.getResource();
if ( currentResource != null && currentResource.isAccessible() ) {
- reader = new CharArrayReader( workingCopy.getContents() );
+ reader = new CodeReader(currentResource.getLocation().toOSString(), workingCopy.getContents());
realPath = currentResource.getLocation();
project = currentResource.getProject();
} else {
@@ -413,7 +410,7 @@ public class MatchLocator implements IMatchLocator{
if( currentResource != null ){
if (currentResource.isAccessible() && currentResource instanceof IFile) {
IFile file = (IFile) currentResource;
- reader = new InputStreamReader( file.getContents() );
+ reader = new CodeReader(currentResource.getLocation().toOSString(), file.getContents());
realPath = currentResource.getLocation();
project = file.getProject();
} else {
@@ -422,16 +419,18 @@ public class MatchLocator implements IMatchLocator{
}
} catch ( CoreException e ){
continue;
+ } catch ( IOException e ) {
+ continue;
}
}
}
if( currentResource == null ) {
- IPath path = new Path( pathString );
try {
+ IPath path = new Path( pathString );
currentPath = path;
- reader = new FileReader( path.toFile() );
+ reader = new CodeReader(pathString);
realPath = currentPath;
- } catch (FileNotFoundException e) {
+ } catch (IOException e) {
continue;
}
}
@@ -456,7 +455,7 @@ public class MatchLocator implements IMatchLocator{
IParser parser = null;
try
{
- IScanner scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, this, ParserUtil.getScannerLogService(), null );
+ IScanner scanner = ParserFactory.createScanner( reader, scanInfo, ParserMode.COMPLETE_PARSE, language, this, ParserUtil.getScannerLogService(), null );
parser = ParserFactory.createParser( scanner, this, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
}
catch( ParserFactoryError pfe )
@@ -628,9 +627,10 @@ public class MatchLocator implements IMatchLocator{
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
- public Reader createReader(String finalPath, Iterator workingCopies) {
+ public CodeReader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath,workingCopies);
}
+
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#parserTimeout()
*/
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CConventions.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CConventions.java
index 2917435de91..3c22b7bea25 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CConventions.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CConventions.java
@@ -10,9 +10,9 @@
******************************************************************************/
package org.eclipse.cdt.core;
-import java.io.StringReader;
import java.util.StringTokenizer;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IScanner;
import org.eclipse.cdt.core.parser.IToken;
import org.eclipse.cdt.core.parser.ParserFactory;
@@ -222,8 +222,7 @@ public class CConventions {
// assuming that you are given a valid identifier
IToken token = null;
IScanner scanner = ParserFactory.createScanner(
- new StringReader( name ),
- "",
+ new CodeReader(name.toCharArray()),
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
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 21dc253dc5e..5d1e0a0f7a0 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,11 +10,7 @@
***********************************************************************/
package org.eclipse.cdt.core.parser;
-import java.io.BufferedInputStream;
-import java.io.BufferedReader;
-import java.io.CharArrayReader;
-import java.io.InputStreamReader;
-import java.io.Reader;
+import java.io.IOException;
import java.util.Iterator;
import org.eclipse.cdt.core.model.IWorkingCopy;
@@ -51,7 +47,7 @@ public class ParserUtil
return scannerLogService;
}
- public static Reader createReader( String finalPath, Iterator workingCopies )
+ public static CodeReader createReader( String finalPath, Iterator workingCopies )
{
// check to see if the file which this path points to points to an
// IResource in the workspace
@@ -65,28 +61,23 @@ public class ParserUtil
// check the working copy
if( workingCopies.hasNext() )
{
- Reader r = findWorkingCopy( resultingResource, workingCopies );
- if( r != null ) return r;
+ char[] buffer = findWorkingCopy( resultingResource, workingCopies );
+ if( buffer != null )
+ return new CodeReader(finalPath, buffer);
}
- return createResourceReader(resultingResource);
+ return new CodeReader(finalPath, ((IFile)resultingResource).getContents());
}
}
catch( CoreException ce )
{
}
+ catch( IOException e )
+ {
+ }
return InternalParserUtil.createFileReader(finalPath);
}
/**
- * @param resource
- * @return
- * @throws CoreException
- */
- public static BufferedReader createResourceReader(IResource resource) throws CoreException {
- return new BufferedReader( new InputStreamReader( new BufferedInputStream( ((IFile) resource).getContents() ) ) );
- }
-
- /**
* @param finalPath
* @return
*/
@@ -106,7 +97,7 @@ public class ParserUtil
* @param workingCopies
* @return
*/
- protected static Reader findWorkingCopy(IResource resultingResource, Iterator workingCopies) {
+ protected static char[] findWorkingCopy(IResource resultingResource, Iterator workingCopies) {
if( parserLogService.isTracing() )
parserLogService.traceLog( "Attempting to find the working copy for " + resultingResource.getName() ); //$NON-NLS-1$
while( workingCopies.hasNext() )
@@ -116,10 +107,9 @@ public class ParserUtil
IWorkingCopy copy = (IWorkingCopy) next;
if( copy.getResource().equals(resultingResource ))
{
- CharArrayReader arrayReader = new CharArrayReader( copy.getContents() );
if( parserLogService.isTracing() )
parserLogService.traceLog( "Working copy found!!" ); //$NON-NLS-1$
- return new BufferedReader( arrayReader );
+ return copy.getContents();
}
}
if( parserLogService.isTracing() )
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 77cd31050a0..5447e2b955c 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
@@ -9,17 +9,17 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
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.CodeReader;
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.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.ui.CUIPlugin;
import org.eclipse.compare.IEditableContent;
@@ -74,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, new NullLogService(), null); //$NON-NLS-1$
+ ParserFactory.createScanner(new CodeReader(s.toCharArray()), new ScannerInfo(), ParserMode.QUICK_PARSE, ParserLanguage.CPP, builder, new NullLogService(), null); //$NON-NLS-1$
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/compare/SourceElementRequestorAdapter.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/SourceElementRequestorAdapter.java
index 6d4406fb417..7bc7491e85b 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/SourceElementRequestorAdapter.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/compare/SourceElementRequestorAdapter.java
@@ -11,9 +11,9 @@
package org.eclipse.cdt.internal.ui.compare;
-import java.io.Reader;
import java.util.Iterator;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.DefaultProblemHandler;
import org.eclipse.cdt.core.parser.IProblem;
import org.eclipse.cdt.core.parser.ISourceElementRequestor;
@@ -340,7 +340,7 @@ public class SourceElementRequestorAdapter implements ISourceElementRequestor {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
- public Reader createReader(String finalPath, Iterator workingCopies) {
+ public CodeReader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath, workingCopies );
}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/SelectionParseAction.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/SelectionParseAction.java
index aea8c443055..34e18c22a25 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/SelectionParseAction.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/actions/SelectionParseAction.java
@@ -11,14 +11,12 @@
package org.eclipse.cdt.internal.ui.search.actions;
-import java.io.CharArrayReader;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.Reader;
+import java.io.IOException;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.IWorkingCopy;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
@@ -98,20 +96,20 @@ public class SelectionParseAction extends Action {
}
IParser parser = null;
- Reader reader = null;
+ CodeReader reader = null;
try {
if( workingCopy == null )
- reader = new FileReader(resourceFile.getLocation().toFile());
+ reader = new CodeReader(resourceFile.getLocation().toOSString());
else
- reader = new CharArrayReader( workingCopy.getContents() );
- } catch (FileNotFoundException e) {
+ reader = new CodeReader(resourceFile.getLocation().toOSString(), workingCopy.getContents());
+ } catch (IOException e) {
e.printStackTrace();
}
try
{
parser = ParserFactory.createParser(
- ParserFactory.createScanner( reader, resourceFile.getLocation().toOSString(), scanInfo, ParserMode.SELECTION_PARSE, language, new NullSourceElementRequestor(), ParserUtil.getScannerLogService(), null ),
+ ParserFactory.createScanner( reader, scanInfo, ParserMode.SELECTION_PARSE, language, new NullSourceElementRequestor(), ParserUtil.getScannerLogService(), null ),
new NullSourceElementRequestor(), ParserMode.SELECTION_PARSE, language, ParserUtil.getParserLogService() );
} catch( ParserFactoryError pfe ){}
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 9b3011c3298..f20ddac40e0 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
@@ -10,9 +10,6 @@
**********************************************************************/
package org.eclipse.cdt.internal.ui.text.contentassist;
-import java.io.BufferedReader;
-import java.io.CharArrayReader;
-import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
@@ -25,6 +22,7 @@ import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IWorkingCopy;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IMacroDescriptor;
import org.eclipse.cdt.core.parser.IParser;
import org.eclipse.cdt.core.parser.IScanner;
@@ -152,7 +150,7 @@ public class CompletionEngine implements RelevanceConstants {
IResource currentResource = sourceUnit.getResource();
IPath realPath = currentResource.getLocation();
IProject project = currentResource.getProject();
- Reader reader = new BufferedReader( new CharArrayReader( sourceUnit.getContents() ));
+ CodeReader reader = new CodeReader(realPath.toOSString(), sourceUnit.getContents());
//Get the scanner info
IScannerInfo scanInfo = new ScannerInfo();
@@ -170,7 +168,7 @@ public class CompletionEngine implements RelevanceConstants {
IScanner scanner = null;
try
{
- scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETION_PARSE, language, elementRequestor, ParserUtil.getScannerLogService(), Arrays.asList(CUIPlugin.getSharedWorkingCopies()) );
+ scanner = ParserFactory.createScanner( reader, scanInfo, ParserMode.COMPLETION_PARSE, language, elementRequestor, ParserUtil.getScannerLogService(), Arrays.asList(CUIPlugin.getSharedWorkingCopies()) );
parser = ParserFactory.createParser( scanner, elementRequestor, ParserMode.COMPLETION_PARSE, language, ParserUtil.getParserLogService() );
}
catch( ParserFactoryError pfe )
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistElementRequestor.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistElementRequestor.java
index 886c5b6c538..f945f41fea5 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistElementRequestor.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/contentassist/ContentAssistElementRequestor.java
@@ -10,9 +10,9 @@
***********************************************************************/
package org.eclipse.cdt.internal.ui.text.contentassist;
-import java.io.Reader;
import java.util.Iterator;
+import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.NullSourceElementRequestor;
import org.eclipse.cdt.core.parser.ParserUtil;
import org.eclipse.cdt.utils.TimeOut;
@@ -32,7 +32,7 @@ public class ContentAssistElementRequestor extends NullSourceElementRequestor im
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
- public Reader createReader(String finalPath, Iterator workingCopies) {
+ public CodeReader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath, workingCopies );
}

Back to the top