mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-14 19:55:45 +02:00
Performance: Model builder skips function bodies if no AST requested
This commit is contained in:
parent
82d511bba1
commit
6451348375
2 changed files with 11 additions and 2 deletions
|
@ -67,6 +67,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPMethod;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier;
|
||||||
import org.eclipse.cdt.core.index.IIndex;
|
import org.eclipse.cdt.core.index.IIndex;
|
||||||
import org.eclipse.cdt.core.index.IIndexManager;
|
import org.eclipse.cdt.core.index.IIndexManager;
|
||||||
|
import org.eclipse.cdt.core.model.AbstractLanguage;
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
import org.eclipse.cdt.core.model.IContributedModelBuilder;
|
||||||
|
@ -237,14 +238,18 @@ public class CModelBuilder2 implements IContributedModelBuilder {
|
||||||
}
|
}
|
||||||
checkCanceled();
|
checkCanceled();
|
||||||
long startTime= System.currentTimeMillis();
|
long startTime= System.currentTimeMillis();
|
||||||
final IASTTranslationUnit ast= fTranslationUnit.getAST(index, quickParseMode ? ITranslationUnit.AST_SKIP_ALL_HEADERS : ITranslationUnit.AST_SKIP_INDEXED_HEADERS);
|
final CElementInfo elementInfo= fTranslationUnit.getElementInfo();
|
||||||
|
int parseFlags= quickParseMode ? ITranslationUnit.AST_SKIP_ALL_HEADERS : ITranslationUnit.AST_SKIP_INDEXED_HEADERS;
|
||||||
|
if (!(elementInfo instanceof ASTHolderTUInfo)) {
|
||||||
|
parseFlags |= AbstractLanguage.OPTION_SKIP_FUNCTION_BODIES;
|
||||||
|
}
|
||||||
|
final IASTTranslationUnit ast= fTranslationUnit.getAST(index, parseFlags);
|
||||||
Util.debugLog("CModelBuilder2: parsing " //$NON-NLS-1$
|
Util.debugLog("CModelBuilder2: parsing " //$NON-NLS-1$
|
||||||
+ fTranslationUnit.getElementName()
|
+ fTranslationUnit.getElementName()
|
||||||
+ " mode="+ (quickParseMode ? "skip all " : "skip indexed ") //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
+ " mode="+ (quickParseMode ? "skip all " : "skip indexed ") //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
|
||||||
+ " time="+ ( System.currentTimeMillis() - startTime ) + "ms", //$NON-NLS-1$ //$NON-NLS-2$
|
+ " time="+ ( System.currentTimeMillis() - startTime ) + "ms", //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
IDebugLogConstants.MODEL, false);
|
IDebugLogConstants.MODEL, false);
|
||||||
|
|
||||||
final CElementInfo elementInfo= fTranslationUnit.getElementInfo();
|
|
||||||
if (elementInfo instanceof ASTHolderTUInfo) {
|
if (elementInfo instanceof ASTHolderTUInfo) {
|
||||||
((ASTHolderTUInfo)elementInfo).fAST= ast;
|
((ASTHolderTUInfo)elementInfo).fAST= ast;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@ import org.eclipse.cdt.core.dom.ICodeReaderFactory;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTCompletionNode;
|
import org.eclipse.cdt.core.dom.ast.IASTCompletionNode;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
|
||||||
import org.eclipse.cdt.core.index.IIndex;
|
import org.eclipse.cdt.core.index.IIndex;
|
||||||
|
import org.eclipse.cdt.core.model.AbstractLanguage;
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.cdt.core.model.IBuffer;
|
import org.eclipse.cdt.core.model.IBuffer;
|
||||||
|
@ -744,6 +745,9 @@ public class TranslationUnit extends Openable implements ITranslationUnit {
|
||||||
if (reader != null) {
|
if (reader != null) {
|
||||||
ILanguage language= getLanguage();
|
ILanguage language= getLanguage();
|
||||||
if (language != null) {
|
if (language != null) {
|
||||||
|
if (language instanceof AbstractLanguage) {
|
||||||
|
return ((AbstractLanguage)language).getASTTranslationUnit(reader, scanInfo, codeReaderFactory, index, style, ParserUtil.getParserLogService());
|
||||||
|
}
|
||||||
return language.getASTTranslationUnit(reader, scanInfo, codeReaderFactory, index, ParserUtil.getParserLogService());
|
return language.getASTTranslationUnit(reader, scanInfo, codeReaderFactory, index, ParserUtil.getParserLogService());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue