From 22ee440b88c72bf385fe8d94263469d107f0724a Mon Sep 17 00:00:00 2001 From: Dominic Scharfe Date: Thu, 19 Jan 2023 14:57:27 +0100 Subject: [PATCH] Issue #254: Constructors of inner classes not resolved properly - add test case to reproduce #254 - add special case to detect constructors which were declared in the index file set of the tu --- .../IndexCPPBindingResolutionBugsTest.java | 17 +++++++++++++++++ .../dom/parser/cpp/semantics/CPPSemantics.java | 9 ++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugsTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugsTest.java index 75c2e29af3c..41b09277131 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugsTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionBugsTest.java @@ -1397,4 +1397,21 @@ public void testTemplateArgumentResolution_450888() throws Exception { ast = workingCopy.getAST(strategy.getIndex(), ITranslationUnit.AST_SKIP_INDEXED_HEADERS); checkBindings(ast); } + + // struct MyClass { + // MyClass(); + // struct MyInnerClass; + // }; + + // struct MyClass::MyInnerClass { + // MyInnerClass(bool a, bool b) { + // } + // }; + // + // MyClass::MyClass() { + // new MyInnerClass(true, true); + // } + public void testIssue_254() throws Exception { + checkBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java index 5d7c92b7cb5..fe32496e653 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java @@ -2125,7 +2125,14 @@ public static boolean declaredBefore(Object obj, IASTNode node, boolean indexBas } IASTTranslationUnit tu = node.getTranslationUnit(); IIndexFileSet indexFileSet = tu.getIndexFileSet(); - return (indexFileSet != null && indexFileSet.containsDeclaration(indexBinding)); + if (indexFileSet != null && indexFileSet.containsDeclaration(indexBinding)) { + return true; + } else if (indexBinding instanceof ICPPConstructor) { + IIndexFileSet astFileSet = tu.getASTFileSet(); + return astFileSet != null && astFileSet.containsDeclaration(indexBinding); + } else { + return false; + } } } return pointOfDecl < pointOfRef;