[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] type cache fix for 69872
|
This updates the type cache to use the new IParser.cancel() mechanism.
John, can you make sure this gets applied to HEAD and 2.0.1 as appropriate?
Thanks
-Chris
Index: browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java,v
retrieving revision 1.10
diff -u -r1.10 TypeParser.java
--- browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java 21 Jul 2004 17:57:56 -0000 1.10
+++ browser/org/eclipse/cdt/internal/core/browser/cache/TypeParser.java 22 Jul 2004 14:06:33 -0000
@@ -121,6 +121,7 @@
private ITypeInfo fSuperTypeToFind;
private Set fProcessedTypes = new HashSet();
private boolean fFoundType;
+ IParser fParser = null;
public TypeParser(ITypeCache typeCache, IWorkingCopyProvider provider) {
fTypeCache = typeCache;
@@ -501,8 +502,8 @@
fProgressMonitor = progressMonitor;
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();
+ fParser = ParserFactory.createParser(scanner, this, ParserMode.STRUCTURAL_PARSE, language, ParserUtil.getParserLogService());
+ fParser.parse();
} catch (ParserFactoryError e) {
CCorePlugin.log(e);
} catch (ParseError e) {
@@ -514,6 +515,7 @@
CCorePlugin.log(e);
} finally {
fProgressMonitor = null;
+ fParser = null;
}
}
@@ -770,14 +772,16 @@
if ((fTypeToFind.getCElementType() == nodeInfo.type || fTypeToFind.isUndefinedType()) && nodeInfo.name.equals(fTypeToFind.getName())) {
QualifiedTypeName qualifiedName = new QualifiedTypeName(nodeInfo.name, nodeInfo.enclosingNames);
if (qualifiedName.equals(fTypeToFind.getQualifiedTypeName())) {
- fFoundType = true;
-
// add types to cache
ITypeInfo newType = addType(nodeInfo.type, qualifiedName, originalLocation, resolvedLocation);
if (newType != null && node instanceof IASTClassSpecifier) {
addSuperClasses(newType, (IASTClassSpecifier)node, originalLocation, fProcessedTypes);
}
fProgressMonitor.worked(1);
+
+ fFoundType = true;
+ // terminate the parser
+ fParser.cancel();
}
}
} else {
@@ -896,17 +900,5 @@
*/
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 - 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;
-
- return false;
}
}