1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-04 06:45:43 +02:00

<BR>org.eclipse.cdt.core

<BR>&nbsp;Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=55785.
<BR>&nbsp;Fix required update to ISourceElementRequestor interface : clients updated accordingly.
<BR>
<BR>org.eclipse.cdt.core.tests
<BR>&nbsp;Updated clients for ISourceElementRequestor.createReader() updates.
<BR>
<BR>org.eclipse.cdt.ui
<BR>&nbsp;Updated CompletionEngine to use shared working copies when parsing include files.
<BR>&nbsp;Updated clients for ISourceElementRequestor.createReader() updates.
This commit is contained in:
John Camelon 2004-04-11 22:52:21 +00:00
parent a1f408bc47
commit 68365e4ac0
39 changed files with 145 additions and 60 deletions

View file

@ -1,3 +1,6 @@
2004-04-11 John Camelon
Updated clients for ISourceElementRequestor.createReader() updates.
2004-04-10 John Camelon
Updated ScannerTestCase to correspond with changes to IToken and its implementations.

View file

@ -1346,7 +1346,7 @@ public class ManagedBuildTests extends TestCase {
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());
"TEST", 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() );

View file

@ -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;
parser = ParserFactory.createParser( ParserFactory.createScanner( new InputStreamReader (stream), filePath, new ScannerInfo(), ParserMode.QUICK_PARSE, language, nullCallback, null ), nullCallback, ParserMode.QUICK_PARSE, language, null);
parser = ParserFactory.createParser( ParserFactory.createScanner( new InputStreamReader (stream), filePath, new ScannerInfo(), ParserMode.QUICK_PARSE, language, nullCallback, null, null ), nullCallback, ParserMode.QUICK_PARSE, language, null);
mapping = ParserFactory.createLineOffsetReconciler( new InputStreamReader( stream ) );

View file

@ -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()), quickParseCallback, mode, lang, null );
parser = ParserFactory.createParser( ParserFactory.createScanner( new StringReader( code ), "code", new ScannerInfo(), mode, lang, quickParseCallback, new NullLogService(), null), quickParseCallback, mode, lang, null );
if( ! parser.parse() && throwExceptionOnError )
throw new ParserException("Parse failure");
return quickParseCallback.getCompilationUnit();

View file

@ -47,7 +47,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 );
scanner= ParserFactory.createScanner( new StringReader(input),"TEXT", new ScannerInfo(), mode, ParserLanguage.CPP, requestor, null, null );
}
protected void initializeScanner(String input) throws ParserFactoryError

View file

@ -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(),
ParserMode.COMPLETE_PARSE, language, callback, new NullLogService() ), callback, ParserMode.COMPLETE_PARSE, language, null
ParserMode.COMPLETE_PARSE, language, callback, new NullLogService(), null ), callback, ParserMode.COMPLETE_PARSE, language, null
);
if( ! parser.parse() && throwOnError ) throw new ParserException( "FAILURE");

View file

@ -677,8 +677,8 @@ public class CompleteParseBaseTest extends TestCase
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
public Reader createReader(String finalPath) {
return ParserUtil.createReader(finalPath);
public Reader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath,workingCopies);
}
/* (non-Javadoc)
@ -730,7 +730,7 @@ public class CompleteParseBaseTest extends TestCase
callback = new FullParseCallback();
IParser parser = ParserFactory.createParser(
ParserFactory.createScanner( new StringReader( code ), "test-code", new ScannerInfo(),
ParserMode.COMPLETE_PARSE, language, callback, new NullLogService() ), callback, ParserMode.COMPLETE_PARSE, language, null
ParserMode.COMPLETE_PARSE, language, callback, new NullLogService(), null ), callback, ParserMode.COMPLETE_PARSE, language, null
);
if( ! parser.parse() && throwOnError ) throw new ParserException( "FAILURE");
return callback.getCompilationUnit();

View file

@ -65,7 +65,7 @@ public class CompletionParseTest extends CompleteParseBaseTest {
ParserMode.COMPLETION_PARSE,
ParserLanguage.CPP,
callback,
new NullLogService()),
new NullLogService(), null),
callback,
ParserMode.COMPLETION_PARSE,
ParserLanguage.CPP,

View file

@ -28,7 +28,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() ), ParserLanguage.CPP, null );
IExpressionParser parser = InternalParserUtil.createExpressionParser(ParserFactory.createScanner( new StringReader( code ), getClass().getName(), new ScannerInfo(), null, ParserLanguage.CPP, nullCallback, new NullLogService(), null ), ParserLanguage.CPP, null );
IASTExpression expression = parser.expression(null,null);
assertEquals(expectedValue, expression.evaluateExpression());
}

View file

@ -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() ), nullCallback, ParserMode.QUICK_PARSE, language, null );
ParserFactory.createScanner( new StringReader( code ), null, new ScannerInfo(), ParserMode.QUICK_PARSE, language, nullCallback, new NullLogService(), null ), nullCallback, ParserMode.QUICK_PARSE, language, null );
parser.parse();
} catch ( Exception e ){

View file

@ -36,7 +36,7 @@ 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 );
scanner= ParserFactory.createScanner( new StringReader(input),"TEXT", new ScannerInfo( definitions ), ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, nullSourceElementRequestor, null, null );
}

View file

@ -75,7 +75,7 @@ public class PreprocessorTest extends TestCase {
public IPreprocessor setupPreprocessor( String text, List includePaths, Map defns, ISourceElementRequestor rq )
{
IPreprocessor p = ParserFactory.createPreprocessor( new StringReader( text ), "test", new ScannerInfo( defns,
includePaths == null ? null : (String [])includePaths.toArray()), ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, rq, null );
includePaths == null ? null : (String [])includePaths.toArray()), ParserMode.COMPLETE_PARSE, ParserLanguage.CPP, rq, null, null );
return p;
}
}

View file

@ -43,7 +43,7 @@ public class SelectionParseTest extends CompleteParseBaseTest {
ParserMode.SELECTION_PARSE,
ParserLanguage.CPP,
callback,
new NullLogService()),
new NullLogService(), null),
callback,
ParserMode.SELECTION_PARSE,
ParserLanguage.CPP,

View file

@ -281,7 +281,7 @@ public class TortureTest extends FractionalAutomatedTest {
ParserMode parserMode = quickParse ? ParserMode.QUICK_PARSE : ParserMode.COMPLETE_PARSE;
ParserLanguage language = cppNature ? ParserLanguage.CPP : ParserLanguage.C;
parser = ParserFactory.createParser(
ParserFactory.createScanner( new StringReader( code ), null, new ScannerInfo(), parserMode, language, nullCallback, new NullLogService() ), nullCallback, parserMode, language, null);
ParserFactory.createScanner( new StringReader( code ), null, new ScannerInfo(), parserMode, language, nullCallback, new NullLogService(), null ), nullCallback, parserMode, language, null);
mapping = ParserFactory.createLineOffsetReconciler( new StringReader( code ) );

View file

@ -62,7 +62,7 @@ public class ParseTestOnSearchFiles extends TestCase
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() );
IScanner scanner = ParserFactory.createScanner( new InputStreamReader( fileIn ), 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() );
}

View file

@ -377,8 +377,8 @@ public class TypeMatchLocator implements ISourceElementRequestor, ICSearchConsta
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
public Reader createReader(String finalPath) {
return ParserUtil.createReader(finalPath);
public Reader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath, workingCopies);
}
/* (non-Javadoc)
@ -499,7 +499,7 @@ public class TypeMatchLocator implements ISourceElementRequestor, ICSearchConsta
IParser parser = null;
try
{
IScanner scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, this, ParserUtil.getScannerLogService() );
IScanner scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, this, ParserUtil.getScannerLogService(), null );
parser = ParserFactory.createParser( scanner, this, ParserMode.STRUCTURAL_PARSE, language, ParserUtil.getParserLogService() );
}
catch( ParserFactoryError pfe )

View file

@ -97,7 +97,7 @@ public class SourceIndexer extends AbstractIndexer {
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() ),
ParserFactory.createScanner( new BufferedReader(new InputStreamReader(inStream)), resourceFile.getLocation().toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getScannerLogService(), null ),
requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
} catch( ParserFactoryError pfe )
{

View file

@ -15,7 +15,9 @@ package org.eclipse.cdt.internal.core.search.indexing;
* @author bgheorgh
*/
import java.io.Reader;
import java.util.Iterator;
import java.util.LinkedList;
import org.eclipse.cdt.core.model.ICModelMarker;
@ -525,8 +527,8 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
public Reader createReader(String finalPath) {
return ParserUtil.createReader(finalPath);
public Reader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath,workingCopies);
}
/**

View file

@ -131,7 +131,7 @@ public class CModelBuilder {
mode,
language,
quickParseCallback,
quickParseMode ? new NullLogService() : ParserUtil.getScannerLogService())
quickParseMode ? new NullLogService() : ParserUtil.getScannerLogService(), null)
,quickParseCallback,
mode,
language,

View file

@ -1,3 +1,7 @@
2004-04-11 John Camelon
Fixed https://bugs.eclipse.org/bugs/show_bug.cgi?id=55785.
Fix required update to ISourceElementRequestor interface : clients updated accordingly.
2004-04-11 John Camelon
Updated errorhandling in Parser::translationUnit().

View file

@ -11,6 +11,7 @@
package org.eclipse.cdt.core.parser;
import java.io.Reader;
import java.util.Iterator;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
@ -111,7 +112,7 @@ public interface ISourceElementRequestor {
* @param finalPath
* @return
*/
public Reader createReader(String finalPath);
public Reader 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.

View file

@ -1,6 +1,8 @@
package org.eclipse.cdt.core.parser;
import java.io.Reader;
import java.util.Iterator;
import org.eclipse.cdt.core.parser.ast.IASTASMDefinition;
import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration;
@ -457,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) {
public Reader createReader(String finalPath, Iterator workingCopies) {
return InternalParserUtil.createFileReader( finalPath );
}

View file

@ -11,6 +11,7 @@
package org.eclipse.cdt.core.parser;
import java.io.Reader;
import java.util.List;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
import org.eclipse.cdt.core.parser.extension.ExtensionDialect;
@ -68,7 +69,7 @@ public class ParserFactory {
return new QuickParser( scanner, ourCallback, language, logService );
}
public static IScanner createScanner( Reader input, String fileName, IScannerInfo config, ParserMode mode, ParserLanguage language, ISourceElementRequestor requestor, IParserLogService log ) throws ParserFactoryError
public static IScanner createScanner( Reader input, String fileName, IScannerInfo config, ParserMode mode, ParserLanguage language, ISourceElementRequestor requestor, IParserLogService log, List workingCopies ) throws ParserFactoryError
{
if( input == null ) throw new ParserFactoryError( ParserFactoryError.Kind.NULL_READER );
if( fileName == null ) throw new ParserFactoryError( ParserFactoryError.Kind.NULL_FILENAME );
@ -77,11 +78,11 @@ public class ParserFactory {
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( input, fileName, config, ourRequestor, ourMode, language, logService, extensionFactory.createScannerExtension() );
IScanner s = new Scanner( input, fileName, config, ourRequestor, ourMode, language, logService, extensionFactory.createScannerExtension(), workingCopies );
return s;
}
public static IPreprocessor createPreprocessor( Reader input, String fileName, IScannerInfo info, ParserMode mode, ParserLanguage language, ISourceElementRequestor requestor, IParserLogService logService )
public static IPreprocessor createPreprocessor( Reader input, String fileName, IScannerInfo info, ParserMode mode, ParserLanguage language, ISourceElementRequestor requestor, IParserLogService logService, List workingCopies )
{
if( input == null ) throw new ParserFactoryError( ParserFactoryError.Kind.NULL_READER );
if( fileName == null ) throw new ParserFactoryError( ParserFactoryError.Kind.NULL_FILENAME );
@ -90,7 +91,7 @@ public class ParserFactory {
IParserLogService log = ( logService == null ) ? createDefaultLogService() : logService;
ParserMode ourMode = ( (mode == null )? ParserMode.COMPLETE_PARSE : mode );
ISourceElementRequestor ourRequestor = (( requestor == null) ? new NullSourceElementRequestor() : requestor );
IPreprocessor s = new Preprocessor( input, fileName, info, ourRequestor, ourMode, language, log, extensionFactory.createScannerExtension() );
IPreprocessor s = new Preprocessor( input, fileName, info, ourRequestor, ourMode, language, log, extensionFactory.createScannerExtension(), workingCopies );
return s;
}

View file

@ -137,7 +137,7 @@ public class GCCScannerExtension implements IScannerExtension {
// search through include paths
while (iter.hasNext()) {
String path = (String)iter.next();
duple = ScannerUtility.createReaderDuple( path, parsedDirective.getFilename(), scannerData.getClientRequestor() );
duple = ScannerUtility.createReaderDuple( path, parsedDirective.getFilename(), scannerData.getClientRequestor(), scannerData.getWorkingCopies() );
if( duple != null )
break;
}

View file

@ -11,6 +11,7 @@
package org.eclipse.cdt.internal.core.parser.scanner;
import java.io.Reader;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@ -80,4 +81,6 @@ public interface IScannerData {
* @param empty_map
*/
public abstract void setDefinitions(Map map);
public Iterator getWorkingCopies();
}

View file

@ -11,6 +11,7 @@
package org.eclipse.cdt.internal.core.parser.scanner;
import java.io.Reader;
import java.util.List;
import org.eclipse.cdt.core.parser.EndOfFileException;
import org.eclipse.cdt.core.parser.IParserLogService;
@ -34,8 +35,8 @@ public class Preprocessor extends Scanner implements IPreprocessor {
* @param filename
* @param defns
*/
public Preprocessor(Reader reader, String filename, IScannerInfo info, ISourceElementRequestor requestor, ParserMode mode, ParserLanguage language, IParserLogService logService, IScannerExtension scannerExtension ) {
super(reader, filename, info, requestor, mode, language, logService, scannerExtension );
public Preprocessor(Reader reader, String filename, IScannerInfo info, ISourceElementRequestor requestor, ParserMode mode, ParserLanguage language, IParserLogService logService, IScannerExtension scannerExtension, List workingCopies ) {
super(reader, filename, info, requestor, mode, language, logService, scannerExtension, workingCopies );
}
public void process()

View file

@ -108,7 +108,7 @@ public class Scanner implements IScanner {
Scanner( Reader reader, String filename, Map definitions, List includePaths, ISourceElementRequestor requestor, ParserMode mode, ParserLanguage language, IParserLogService log, IScannerExtension extension )
{
String [] incs = (String [])includePaths.toArray(STRING_ARRAY);
scannerData = new ScannerData( this, log, requestor, mode, filename, reader, language, new ScannerInfo( definitions, incs ), new ContextStack( this, log ) );
scannerData = new ScannerData( this, log, requestor, mode, filename, reader, language, new ScannerInfo( definitions, incs ), new ContextStack( this, log ), null );
scannerExtension = extension;
if( scannerExtension instanceof GCCScannerExtension )
@ -131,9 +131,9 @@ public class Scanner implements IScanner {
}
public Scanner(Reader reader, String filename, IScannerInfo info, ISourceElementRequestor requestor, ParserMode parserMode, ParserLanguage language, IParserLogService log, IScannerExtension extension ) {
public Scanner(Reader reader, String filename, IScannerInfo info, ISourceElementRequestor requestor, ParserMode parserMode, ParserLanguage language, IParserLogService log, IScannerExtension extension, List workingCopies ) {
scannerData = new ScannerData( this, log, requestor, parserMode, filename, reader, language, info, new ContextStack( this, log ) );
scannerData = new ScannerData( this, log, requestor, parserMode, filename, reader, language, info, new ContextStack( this, log ), workingCopies );
scannerExtension = extension;
if( scannerExtension instanceof GCCScannerExtension )
@ -535,7 +535,7 @@ public class Scanner implements IScanner {
while (iter.hasNext()) {
String path = (String)iter.next();
duple = ScannerUtility.createReaderDuple( path, fileName, scannerData.getClientRequestor() );
duple = ScannerUtility.createReaderDuple( path, fileName, scannerData.getClientRequestor(), scannerData.getWorkingCopies() );
if( duple != null )
break totalLoop;
}
@ -546,7 +546,7 @@ public class Scanner implements IScanner {
}
else // local inclusion
{
duple = ScannerUtility.createReaderDuple( new File( scannerData.getContextStack().getCurrentContext().getFilename() ).getParentFile().getAbsolutePath(), fileName, scannerData.getClientRequestor() );
duple = ScannerUtility.createReaderDuple( new File( scannerData.getContextStack().getCurrentContext().getFilename() ).getParentFile().getAbsolutePath(), fileName, scannerData.getClientRequestor(), scannerData.getWorkingCopies() );
if( duple != null )
break totalLoop;
useIncludePaths = true;

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.parser.scanner;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@ -23,11 +24,13 @@ import org.eclipse.cdt.core.parser.ISourceElementRequestor;
import org.eclipse.cdt.core.parser.ParserLanguage;
import org.eclipse.cdt.core.parser.ParserMode;
import org.eclipse.cdt.core.parser.ast.IASTFactory;
import org.eclipse.cdt.internal.core.parser.ast.EmptyIterator;
import org.eclipse.cdt.internal.core.parser.problem.IProblemFactory;
public class ScannerData implements IScannerData
{
private final List workingCopies;
private final ContextStack contextStack;
private IASTFactory astFactory = null;
private final ISourceElementRequestor requestor;
@ -42,7 +45,7 @@ public class ScannerData implements IScannerData
private final IScanner scanner;
private final IScannerInfo originalConfig;
private List includePathNames = new ArrayList();
private static final Iterator EMPTY_ITERATOR = new EmptyIterator();
/**
* @return Returns the contextStack.
*/
@ -145,7 +148,7 @@ public class ScannerData implements IScannerData
ParserMode parserMode,
String filename,
Reader reader,
ParserLanguage language, IScannerInfo info, ContextStack stack )
ParserLanguage language, IScannerInfo info, ContextStack stack, List workingCopies )
{
this.scanner = scanner;
this.log = log;
@ -156,6 +159,7 @@ public class ScannerData implements IScannerData
this.language = language;
this.originalConfig = info;
this.contextStack = stack;
this.workingCopies = workingCopies;
}
@ -170,4 +174,13 @@ public class ScannerData implements IScannerData
public void setDefinitions(Map map) {
definitions = map;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.scanner.IScannerData#getWorkingCopies()
*/
public Iterator getWorkingCopies() {
if( workingCopies != null )
return workingCopies.iterator();
return EMPTY_ITERATOR;
}
}

View file

@ -63,10 +63,10 @@ public class ScannerUtility {
}
static CodeReader createReaderDuple( String path, String fileName, ISourceElementRequestor requestor )
static CodeReader createReaderDuple( String path, String fileName, ISourceElementRequestor requestor, Iterator workingCopies )
{
String finalPath = createReconciledPath(path, fileName);
Reader r = requestor.createReader( finalPath );
Reader r = requestor.createReader( finalPath, workingCopies );
if( r != null )
return new CodeReader( finalPath, r );
return null;

View file

@ -186,7 +186,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
callback,
nullLog);
nullLog, null);
} catch (ParserFactoryError e) {
}
@ -256,7 +256,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
callback, nullLog);
callback, nullLog, null);
} catch (ParserFactoryError e) {
}
@ -298,7 +298,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
callback, nullLog);
callback, nullLog, null);
} catch (ParserFactoryError e) {
}
@ -357,7 +357,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
callback, nullLog );
callback, nullLog, null );
} catch (ParserFactoryError e1) {
}
@ -420,7 +420,7 @@ public abstract class CSearchPattern implements ICSearchConstants, ICSearchPatte
new ScannerInfo(),
ParserMode.QUICK_PARSE,
ParserLanguage.CPP,
callback,new NullLogService());
callback,new NullLogService(), null);
} catch (ParserFactoryError e1) {
}
IQuickParseCallback callback = ParserFactory.createQuickParseCallback();

View file

@ -446,7 +446,7 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants
IParser parser = null;
try
{
IScanner scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, this, ParserUtil.getScannerLogService() );
IScanner scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETE_PARSE, language, this, ParserUtil.getScannerLogService(), null );
parser = ParserFactory.createParser( scanner, this, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
}
catch( ParserFactoryError pfe )
@ -605,8 +605,8 @@ public class MatchLocator implements ISourceElementRequestor, ICSearchConstants
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
public Reader createReader(String finalPath) {
return ParserUtil.createReader(finalPath);
public Reader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath,workingCopies);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#parserTimeout()

View file

@ -12,9 +12,12 @@ 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.util.Iterator;
import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.cdt.internal.core.model.IDebugLogConstants;
import org.eclipse.cdt.internal.core.parser.InternalParserUtil;
import org.eclipse.cdt.internal.core.parser.ParserLogService;
@ -48,7 +51,7 @@ public class ParserUtil
return scannerLogService;
}
public static Reader createReader( String finalPath )
public static Reader createReader( String finalPath, Iterator workingCopies )
{
// check to see if the file which this path points to points to an
// IResource in the workspace
@ -60,11 +63,18 @@ public class ParserUtil
if( workspace.getRoot().getLocation().isPrefixOf( path ) )
path = path.removeFirstSegments(workspace.getRoot().getLocation().segmentCount() );
IResource result = workspace.getRoot().findMember(path);
IResource resultingResource = workspace.getRoot().findMember(path);
if( result != null && result.getType() == IResource.FILE )
if( resultingResource != null && resultingResource.getType() == IResource.FILE )
{
BufferedInputStream bufferedStream = new BufferedInputStream( ((IFile) result).getContents() );
// this is the file for sure
// check the working copy
if( workingCopies.hasNext() )
{
Reader r = findWorkingCopy( resultingResource, workingCopies );
if( r != null ) return r;
}
BufferedInputStream bufferedStream = new BufferedInputStream( ((IFile) resultingResource).getContents() );
InputStreamReader inputReader = new InputStreamReader( bufferedStream );
return new BufferedReader( inputReader );
}
@ -74,4 +84,31 @@ public class ParserUtil
}
return InternalParserUtil.createFileReader(finalPath);
}
/**
* @param resultingResource
* @param workingCopies
* @return
*/
protected static Reader findWorkingCopy(IResource resultingResource, Iterator workingCopies) {
if( parserLogService.isTracing() )
parserLogService.traceLog( "Attempting to find the working copy for " + resultingResource.getName() );
while( workingCopies.hasNext() )
{
Object next = workingCopies.next();
if( !( next instanceof IWorkingCopy)) continue;
IWorkingCopy copy = (IWorkingCopy) next;
if( copy.getResource().equals(resultingResource ))
{
CharArrayReader arrayReader = new CharArrayReader( copy.getContents() );
if( parserLogService.isTracing() )
parserLogService.traceLog( "Working copy found!!" );
return new BufferedReader( arrayReader );
}
}
if( parserLogService.isTracing() )
parserLogService.traceLog( "Working copy not found." );
return null;
}
}

View file

@ -1,3 +1,7 @@
2004-04-11 John Camelon
Updated CompletionEngine to use shared working copies when parsing include files.
Updated clients for ISourceElementRequestor.createReader() updates.
2004-04-07 John Camelon
Updated CompletionEngine to use the extended IASTCompletionNode interface for FUNCTION_REFERENCE.

View file

@ -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()); //$NON-NLS-1$
ParserFactory.createScanner(new StringReader(s), "code", 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) {

View file

@ -12,6 +12,7 @@
package org.eclipse.cdt.internal.ui.compare;
import java.io.Reader;
import java.util.Iterator;
import org.eclipse.cdt.core.parser.DefaultProblemHandler;
import org.eclipse.cdt.core.parser.IProblem;
@ -338,8 +339,8 @@ public class SourceElementRequestorAdapter implements ISourceElementRequestor {
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
public Reader createReader(String finalPath) {
return ParserUtil.createReader(finalPath);
public Reader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath, workingCopies );
}
/* (non-Javadoc)

View file

@ -103,7 +103,7 @@ public abstract class FindAction extends Action {
try
{
parser = ParserFactory.createParser(
ParserFactory.createScanner( reader, resourceFile.getLocation().toOSString(), scanInfo, ParserMode.SELECTION_PARSE, language, new NullSourceElementRequestor(), ParserUtil.getScannerLogService() ),
ParserFactory.createScanner( reader, resourceFile.getLocation().toOSString(), scanInfo, ParserMode.SELECTION_PARSE, language, new NullSourceElementRequestor(), ParserUtil.getScannerLogService(), null ),
new NullSourceElementRequestor(), ParserMode.SELECTION_PARSE, language, ParserUtil.getParserLogService() );
} catch( ParserFactoryError pfe ){}

View file

@ -418,7 +418,7 @@ public class OpenDeclarationsAction extends Action implements IUpdate {
try
{
parser = ParserFactory.createParser(
ParserFactory.createScanner( reader, resourceFile.getLocation().toOSString(), scanInfo, ParserMode.SELECTION_PARSE, language, new NullSourceElementRequestor(), ParserUtil.getScannerLogService() ),
ParserFactory.createScanner( reader, resourceFile.getLocation().toOSString(), scanInfo, ParserMode.SELECTION_PARSE, language, new NullSourceElementRequestor(), ParserUtil.getScannerLogService(), null ),
new NullSourceElementRequestor(), ParserMode.SELECTION_PARSE, language, ParserUtil.getParserLogService() );
} catch( ParserFactoryError pfe ){}

View file

@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.ui.text.contentassist;
import java.io.CharArrayReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@ -179,7 +180,7 @@ public class CompletionEngine implements RelevanceConstants {
IScanner scanner = null;
try
{
scanner = ParserFactory.createScanner( reader, realPath.toOSString(), scanInfo, ParserMode.COMPLETION_PARSE, language, elementRequestor, ParserUtil.getScannerLogService() );
scanner = ParserFactory.createScanner( reader, realPath.toOSString(), 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 )

View file

@ -10,10 +10,14 @@
***********************************************************************/
package org.eclipse.cdt.internal.ui.text.contentassist;
import java.io.Reader;
import java.util.Iterator;
import org.eclipse.cdt.core.parser.NullSourceElementRequestor;
import org.eclipse.cdt.core.parser.ParserUtil;
import org.eclipse.cdt.utils.TimeOut;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.cdt.utils.TimeOut;
/**
*
@ -24,6 +28,14 @@ public class ContentAssistElementRequestor extends NullSourceElementRequestor im
private static TimeOut timeoutThread = new TimeOut();
private IProgressMonitor pm = new NullProgressMonitor();
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.ISourceElementRequestor#createReader(java.lang.String)
*/
public Reader createReader(String finalPath, Iterator workingCopies) {
return ParserUtil.createReader(finalPath, workingCopies );
}
/**
*
*/