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 f2f52a2f8f4..7f7339d0bab 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 @@ -751,14 +751,6 @@ public class CompleteParseBaseTest extends TestCase } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#parserTimeout() - */ - public boolean parserTimeout() { - // TODO Auto-generated method stub - return false; - } - /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFriendDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration) */ 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 3beb079f731..f9c10a38838 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 @@ -902,6 +902,8 @@ public class TypeParser implements ISourceElementRequestor { * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#parserTimeout() */ public boolean parserTimeout() { + //TODO - Chris Wiebe - Need to resturcture how you cancel the parser now that + //IParser.cancel() is available, this method is no longer being called. if (fFoundType || fProgressMonitor.isCanceled()) return true; diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java index 39fbb466fb5..8cf4c95d92a 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java @@ -29,6 +29,7 @@ import org.eclipse.cdt.core.ICLogConstants; import org.eclipse.cdt.core.index.IIndexChangeListener; import org.eclipse.cdt.core.index.IndexChangeEvent; import org.eclipse.cdt.core.model.ICModelMarker; +import org.eclipse.cdt.core.parser.ParserTimeOut; import org.eclipse.cdt.internal.core.CharOperation; import org.eclipse.cdt.internal.core.Util; import org.eclipse.cdt.internal.core.index.IIndex; @@ -40,7 +41,6 @@ import org.eclipse.cdt.internal.core.search.SimpleLookupTable; import org.eclipse.cdt.internal.core.search.processing.IJob; import org.eclipse.cdt.internal.core.search.processing.JobManager; import org.eclipse.cdt.internal.core.sourcedependency.UpdateDependency; -import org.eclipse.cdt.utils.TimeOut; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -87,7 +87,7 @@ public class IndexManager extends JobManager implements IIndexConstants { public static boolean VERBOSE = false; - private TimeOut timeoutThread = null; + private ParserTimeOut timeoutThread = null; private IndexerModelListener indexModelListener = null; @@ -564,7 +564,7 @@ public class IndexManager extends JobManager implements IIndexConstants { } if (this.timeoutThread == null){ - this.timeoutThread = new TimeOut("Indexer TimeOut Thread"); //$NON-NLS-1$ + this.timeoutThread = new ParserTimeOut("Indexer TimeOut Thread"); //$NON-NLS-1$ this.timeoutThread.setThreadPriority(Thread.MAX_PRIORITY); Preferences prefs = CCorePlugin.getDefault().getPluginPreferences(); @@ -744,7 +744,7 @@ public class IndexManager extends JobManager implements IIndexConstants { /** * @return */ - public TimeOut getTimeout() { + public ParserTimeOut getTimeout() { // TODO Auto-generated method stub return this.timeoutThread ; } 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 922e64b3dae..873aded0fae 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 @@ -31,11 +31,11 @@ import org.eclipse.cdt.core.parser.ParserFactory; import org.eclipse.cdt.core.parser.ParserFactoryError; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.core.parser.ParserMode; +import org.eclipse.cdt.core.parser.ParserTimeOut; import org.eclipse.cdt.core.parser.ParserUtil; import org.eclipse.cdt.core.parser.ScannerInfo; import org.eclipse.cdt.internal.core.index.IDocument; import org.eclipse.cdt.internal.core.index.impl.IndexDelta; -import org.eclipse.cdt.utils.TimeOut; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; @@ -62,13 +62,13 @@ public class SourceIndexer extends AbstractIndexer { public static final String CDT_INDEXER_TIMEOUT= "CDT_INDEXER_TIMEOUT"; //$NON-NLS-1$ IFile resourceFile; - TimeOut timeOut = null; + ParserTimeOut timeOut = null; /** * @param resource * @param out */ - public SourceIndexer(IFile resource, TimeOut timeOut) { + public SourceIndexer(IFile resource, ParserTimeOut timeOut) { this.resourceFile = resource; this.timeOut = timeOut; } @@ -107,6 +107,7 @@ public class SourceIndexer extends AbstractIndexer { parser = ParserFactory.createParser( ParserFactory.createScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getScannerLogService(), null ), requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() ); + requestor.setParser(parser); } catch( ParserFactoryError pfe ){ } catch (CoreException e) { } finally { 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 f99c3b8bdbe..06693d557f9 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 @@ -26,9 +26,11 @@ 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.IParser; import org.eclipse.cdt.core.parser.IProblem; import org.eclipse.cdt.core.parser.ISourceElementRequestor; import org.eclipse.cdt.core.parser.ParserMode; +import org.eclipse.cdt.core.parser.ParserTimeOut; import org.eclipse.cdt.core.parser.ParserUtil; import org.eclipse.cdt.core.parser.ast.IASTASMDefinition; import org.eclipse.cdt.core.parser.ast.IASTAbstractTypeSpecifierDeclaration; @@ -67,7 +69,6 @@ import org.eclipse.cdt.core.parser.ast.IASTUsingDirective; import org.eclipse.cdt.core.parser.ast.IASTVariable; import org.eclipse.cdt.core.parser.ast.IASTVariableReference; import org.eclipse.cdt.internal.core.Util; -import org.eclipse.cdt.utils.TimeOut; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; @@ -104,15 +105,16 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo private Map problemsMap = null; private IProgressMonitor pm = new NullProgressMonitor(); - private TimeOut timeoutThread = null; + private ParserTimeOut timeoutThread = null; private static final String INDEXER_MARKER_ORIGINATOR = ICModelMarker.INDEXER_MARKER + ".originator"; //$NON-NLS-1$ private static final String INDEXER_MARKER_PREFIX = Util.bind("indexerMarker.prefix" ) + " "; //$NON-NLS-1$ //$NON-NLS-2$ private static final String INDEXER_MARKER_PROCESSING = Util.bind( "indexerMarker.processing" ); //$NON-NLS-1$ private ArrayList filesTraversed = null; + private IParser parser; - public SourceIndexerRequestor(SourceIndexer indexer, IFile resourceFile, TimeOut timeOut) { + public SourceIndexerRequestor(SourceIndexer indexer, IFile resourceFile, ParserTimeOut timeOut) { super(); this.indexer = indexer; this.resourceFile = resourceFile; @@ -660,6 +662,10 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo } } + public void setParser( IParser parser ) + { + this.parser = parser; + } /* (non-Javadoc) * @see org.eclipse.cdt.internal.ui.text.contentassist.ITimeoutThreadOwner#setTimeout(int) */ @@ -670,7 +676,7 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo * @see org.eclipse.cdt.internal.ui.text.contentassist.ITimeoutThreadOwner#startTimer() */ public void startTimer() { - createProgressMonitor(); + createProgressMonitor(parser); while (!timeoutThread.isReadyToRun()){ try { Thread.sleep(20); @@ -700,9 +706,9 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo /* * Creates a new progress monitor with each start timer */ - private void createProgressMonitor() { + private void createProgressMonitor( IParser parser ) { pm.setCanceled(false); - timeoutThread.setProgressMonitor(pm); + timeoutThread.setParser(parser); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IParser.java index ae86f41c09a..1cfbd1db808 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/IParser.java @@ -50,6 +50,9 @@ public interface IParser { */ public ISelectionParseResult parse( int startingOffset, int endingOffset ) throws ParseError; + public void cancel(); + + /** * If an error was encountered, give us the offset of the token that caused the error. * 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 1d18fe0a5fa..8a6461a8a3e 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 @@ -114,10 +114,5 @@ public interface ISourceElementRequestor { * @return */ 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. - * @return - */ - public boolean parserTimeout(); + } 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 ee1b32feed3..4f290d8abc0 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 @@ -481,13 +481,6 @@ public class NullSourceElementRequestor implements ISourceElementRequestor // TODO Auto-generated method stub } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#parserTimeout() - */ - public boolean parserTimeout() { - return false; - } - /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFriendDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration) */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParseError.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParseError.java index c714a7ee6f2..596e7e353c7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParseError.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/parser/ParseError.java @@ -30,7 +30,7 @@ public class ParseError extends Error { // semantic context cannot be provided in this case public static final ParseErrorKind OFFSET_RANGE_NOT_NAME = new ParseErrorKind( 2 ); - public static final ParseErrorKind TIMEOUT = new ParseErrorKind( 3 ); + public static final ParseErrorKind TIMEOUT_OR_CANCELLED = new ParseErrorKind( 3 ); /** * @param enumValue diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java index cf8f766983b..a4e0a4c1ff6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ExpressionParser.java @@ -105,8 +105,8 @@ public class ExpressionParser implements IExpressionParser, IParserData { */ public IToken LA(int i) throws EndOfFileException { - if (parserTimeout()) { - throw new ParseError(ParseError.ParseErrorKind.TIMEOUT); + if (isCancelled) { + throw new ParseError(ParseError.ParseErrorKind.TIMEOUT_OR_CANCELLED); } if (i < 1) // can't go backwards @@ -2764,10 +2764,9 @@ public class ExpressionParser implements IExpressionParser, IParserData { public char[] getCurrentFilename() { return scanner.getCurrentFilename(); } + + protected boolean isCancelled = false; - protected boolean parserTimeout() { - return false; - } /* (non-Javadoc) * @see org.eclipse.cdt.internal.core.parser.IParserData#getLastToken() */ 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 8d1fb25d917..e041269c9d1 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 @@ -3341,14 +3341,7 @@ public abstract class Parser extends ExpressionParser implements IParser // do nothing as of yet // subclasses will need to implement this method } - /* - * (non-Javadoc) - * - * @see org.eclipse.cdt.internal.core.parser.ExpressionParser#parserTimeout() - */ - protected final boolean parserTimeout() { - return requestor.parserTimeout(); - } + /* * (non-Javadoc) * @@ -3399,5 +3392,12 @@ public abstract class Parser extends ExpressionParser implements IParser */ protected void handleOffsetableNamedElement(IASTOffsetableNamedElement node) { } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.parser.IParser#cancel() + */ + public synchronized void cancel() { + isCancelled = true; + } } \ No newline at end of file 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 60f262ba282..39c865ef7fb 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 @@ -671,14 +671,6 @@ public class MatchLocator implements IMatchLocator{ public CodeReader createReader(String finalPath, Iterator workingCopies) { return ParserUtil.createReader(finalPath,workingCopies); } - - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#parserTimeout() - */ - public boolean parserTimeout() { - // TODO Auto-generated method stub - return false; - } /* (non-Javadoc) * @see org.eclipse.cdt.core.search.IMatchLocator#setProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) diff --git a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/TimeOut.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserTimeOut.java similarity index 79% rename from core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/TimeOut.java rename to core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserTimeOut.java index d4d1a35455f..b471351b7bc 100644 --- a/core/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/TimeOut.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/parser/ParserTimeOut.java @@ -8,33 +8,31 @@ * Contributors: * IBM Rational Software - Initial API and implementation ***********************************************************************/ -package org.eclipse.cdt.utils; +package org.eclipse.cdt.core.parser; -import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.cdt.core.parser.IParser; /** * @author bgheorgh * - * To change the template for this generated type comment go to - * Window - Preferences - Java - Code Generation - Code and Comments */ -public class TimeOut implements Runnable { +public class ParserTimeOut implements Runnable { protected Thread thread; protected boolean enabled; - protected IProgressMonitor pm = null; + protected IParser cancellable; private int timeout = 0; private int threadPriority = Thread.MIN_PRIORITY + 1; boolean debug = false; private String threadName = null; boolean readyToRun = true; - public TimeOut(){ + public ParserTimeOut(){ reset(); } - public TimeOut(String threadName){ + public ParserTimeOut(String threadName){ this.threadName = threadName; reset(); } @@ -47,8 +45,8 @@ public class TimeOut implements Runnable { readyToRun = false; wait(timeout); if (enabled){ - if(pm != null) - pm.setCanceled(true); + if(cancellable != null) + cancellable.cancel(); enabled = false; } } @@ -102,17 +100,12 @@ public class TimeOut implements Runnable { public void setThreadPriority(int threadPriority) { this.threadPriority = threadPriority; } - /** - * @return Returns the pm. - */ - public IProgressMonitor getProgressMonitor() { - return pm; - } + /** * @param pm The pm to set. */ - public void setProgressMonitor(IProgressMonitor pm) { - this.pm = pm; + public void setParser(IParser c) { + this.cancellable = c; } /** * @return Returns the timeout. 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 eacb20b756c..8570581ed3c 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 @@ -353,14 +353,6 @@ public class SourceElementRequestorAdapter implements ISourceElementRequestor { } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#parserTimeout() - */ - public boolean parserTimeout() { - // TODO Auto-generated method stub - return false; - } - /* (non-Javadoc) * @see org.eclipse.cdt.core.parser.ISourceElementRequestor#acceptFriendDeclaration(org.eclipse.cdt.core.parser.ast.IASTDeclaration) */ 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 b7971ae66e7..900d38b6258 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 @@ -170,6 +170,7 @@ public class CompletionEngine implements RelevanceConstants { { 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() ); + elementRequestor.setParser(parser); } catch( ParserFactoryError pfe ) { @@ -193,7 +194,7 @@ public class CompletionEngine implements RelevanceConstants { macroMap = scanner.getDefinitions(); } catch (ParseError e ) { - if(e.getErrorKind() == ParseError.ParseErrorKind.TIMEOUT){ + if(e.getErrorKind() == ParseError.ParseErrorKind.TIMEOUT_OR_CANCELLED){ log("Timeout received !!!!!! "); //$NON-NLS-1$; requestor.acceptError(new Problem(CUIMessages.getString("CEditor.contentassist.timeout"))); //$NON-NLS-1$; } 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 f945f41fea5..2e63f2cd2a4 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 @@ -13,9 +13,10 @@ package org.eclipse.cdt.internal.ui.text.contentassist; import java.util.Iterator; import org.eclipse.cdt.core.parser.CodeReader; +import org.eclipse.cdt.core.parser.IParser; import org.eclipse.cdt.core.parser.NullSourceElementRequestor; +import org.eclipse.cdt.core.parser.ParserTimeOut; 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; @@ -25,8 +26,9 @@ import org.eclipse.core.runtime.NullProgressMonitor; */ public class ContentAssistElementRequestor extends NullSourceElementRequestor implements ITimeoutThreadOwner{ // a static timer thread - private static TimeOut timeoutThread = new TimeOut(); + private static ParserTimeOut timeoutThread = new ParserTimeOut(); private IProgressMonitor pm = new NullProgressMonitor(); + private IParser parser; /* (non-Javadoc) @@ -45,6 +47,11 @@ public class ContentAssistElementRequestor extends NullSourceElementRequestor im timeoutThread.setThreadPriority(Thread.MAX_PRIORITY); } + + public void setParser( IParser parser ) + { + this.parser = parser; + } /* (non-Javadoc) * @see org.eclipse.cdt.internal.ui.text.contentassist.ITimeoutThreadOwner#setTimeout(int) */ @@ -55,7 +62,7 @@ public class ContentAssistElementRequestor extends NullSourceElementRequestor im * @see org.eclipse.cdt.internal.ui.text.contentassist.ITimeoutThreadOwner#startTimer() */ public void startTimer() { - createProgressMonitor(); + createProgressMonitor(parser); timeoutThread.startTimer(); } /* (non-Javadoc) @@ -76,9 +83,9 @@ public class ContentAssistElementRequestor extends NullSourceElementRequestor im /* * Creates a new progress monitor with each start timer */ - private void createProgressMonitor() { + private void createProgressMonitor(IParser parser) { pm.setCanceled(false); - timeoutThread.setProgressMonitor(pm); + timeoutThread.setParser(parser); } }