1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Patch for Chris Wiebe.

Type Cache fix for bug 69872.
This commit is contained in:
John Camelon 2004-07-22 19:33:03 +00:00
parent 7f0142b2e8
commit c19d0b2050

View file

@ -121,6 +121,7 @@ public class TypeParser implements ISourceElementRequestor {
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 @@ public class TypeParser implements ISourceElementRequestor {
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 @@ public class TypeParser implements ISourceElementRequestor {
CCorePlugin.log(e);
} finally {
fProgressMonitor = null;
fParser = null;
}
}
@ -770,14 +772,16 @@ public class TypeParser implements ISourceElementRequestor {
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 {
@ -897,16 +901,4 @@ public class TypeParser implements ISourceElementRequestor {
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;
}
}