From 6451348375d3736b857c27ec5df0aab1b471e99d Mon Sep 17 00:00:00 2001 From: Anton Leherbauer Date: Fri, 20 Apr 2007 13:33:12 +0000 Subject: [PATCH] Performance: Model builder skips function bodies if no AST requested --- .../eclipse/cdt/internal/core/model/CModelBuilder2.java | 9 +++++++-- .../eclipse/cdt/internal/core/model/TranslationUnit.java | 4 ++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder2.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder2.java index 35a00245b35..32776c4e5b4 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder2.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelBuilder2.java @@ -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.index.IIndex; 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.ICElement; import org.eclipse.cdt.core.model.IContributedModelBuilder; @@ -237,14 +238,18 @@ public class CModelBuilder2 implements IContributedModelBuilder { } checkCanceled(); 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$ + fTranslationUnit.getElementName() + " 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$ IDebugLogConstants.MODEL, false); - final CElementInfo elementInfo= fTranslationUnit.getElementInfo(); if (elementInfo instanceof ASTHolderTUInfo) { ((ASTHolderTUInfo)elementInfo).fAST= ast; } diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java index 32fd140cb00..8d23bc99268 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/TranslationUnit.java @@ -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.IASTTranslationUnit; 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.CoreModel; import org.eclipse.cdt.core.model.IBuffer; @@ -744,6 +745,9 @@ public class TranslationUnit extends Openable implements ITranslationUnit { if (reader != null) { ILanguage language= getLanguage(); 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()); } }