From c254b95cd621f5654f2256f1eb9cf27a610d647a Mon Sep 17 00:00:00 2001 From: Jonah Graham Date: Tue, 15 Jun 2021 14:56:36 -0400 Subject: [PATCH] Bug 546981: Process all preprocessor items in model in one pass The previous code iterated through the preprocessor statements numerous times, this code has the same logic, but iterates through the preprocessor statements less often. Change-Id: If4fcf0a605aabff1f615811f8f528ea66a461136 --- .../internal/core/model/CModelBuilder2.java | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 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 63c983b1b11..51253f7bc59 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 @@ -43,6 +43,7 @@ import org.eclipse.cdt.core.dom.ast.IASTNodeLocation; import org.eclipse.cdt.core.dom.ast.IASTPreprocessorFunctionStyleMacroDefinition; import org.eclipse.cdt.core.dom.ast.IASTPreprocessorIncludeStatement; import org.eclipse.cdt.core.dom.ast.IASTPreprocessorMacroDefinition; +import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement; import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IASTProblemDeclaration; import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclSpecifier; @@ -210,20 +211,18 @@ public class CModelBuilder2 implements IContributedModelBuilder { fVisibilityStack = new Stack<>(); fEqualElements = new HashMap<>(); - // includes - final IASTPreprocessorIncludeStatement[] includeDirectives = ast.getIncludeDirectives(); - for (IASTPreprocessorIncludeStatement includeDirective : includeDirectives) { - if (isLocalToFile(includeDirective)) { - createInclusion(fTranslationUnit, includeDirective); - } - } - // Macros - final IASTPreprocessorMacroDefinition[] macroDefinitions = ast.getMacroDefinitions(); - for (IASTPreprocessorMacroDefinition macroDefinition : macroDefinitions) { - if (isLocalToFile(macroDefinition)) { - createMacro(fTranslationUnit, macroDefinition); + for (IASTPreprocessorStatement statement : ast.getAllPreprocessorStatements()) { + if (statement instanceof IASTPreprocessorIncludeStatement) { + if (isLocalToFile(statement)) { + createInclusion(fTranslationUnit, (IASTPreprocessorIncludeStatement) statement); + } + } else if (statement instanceof IASTPreprocessorMacroDefinition) { + if (isLocalToFile(statement)) { + createMacro(fTranslationUnit, (IASTPreprocessorMacroDefinition) statement); + } } } + // Declarations final IASTDeclaration[] declarations = ast.getDeclarations(true); for (IASTDeclaration declaration : declarations) {