From bb17286834585fc2488f51c1150464b4f5470421 Mon Sep 17 00:00:00 2001 From: Michi Date: Sun, 4 Jan 2015 15:18:12 +0100 Subject: [PATCH] Bug 422401 - [Content Assist] no binding for nested types of a base class The problem was with template base classes as in the unit test. Accessibility check did not find the proper AccessContext.namingClass and always ended further up in the class tree. Change-Id: I447567cabd20ad5c57c05a9ffa5f0f12c5321ccf Signed-off-by: Michi Reviewed-on: https://git.eclipse.org/r/38944 Tested-by: Hudson CI Reviewed-by: Sergey Prigogin Tested-by: Sergey Prigogin --- .../parser/cpp/semantics/AccessContext.java | 3 +++ .../text/contentassist2/CompletionTests.java | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/AccessContext.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/AccessContext.java index 115d40257b1..4b111b51fa8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/AccessContext.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/AccessContext.java @@ -286,6 +286,9 @@ public class AccessContext { if (maxdepth > 0) { for (ICPPBase cppBase : ClassTypeHelper.getBases(derived, point)) { IBinding base= cppBase.getBaseClass(); + if (base instanceof ICPPSpecialization) { + base = ((ICPPSpecialization) base).getSpecializedBinding(); + } if (base instanceof ICPPClassType) { ICPPClassType tbase= (ICPPClassType) base; if (tbase.isSameType(target)) { diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java index a2ee3172027..d6663d6a837 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist2/CompletionTests.java @@ -735,6 +735,25 @@ public class CompletionTests extends AbstractContentAssistTest { assertCompletionResults(fCursorOffset, expected, REPLACEMENT); } + // template + // struct Parent { + // protected: + // struct Nested { + // protected: + // using TParam = T; + // }; + // }; + // + // struct NestingTest: Parent { + // struct A : Nested { + // TP/*cursor*/ + // }; + // }; + public void testNestedBaseTemplateMembers_422401() throws Exception { + final String[] expected = { "TParam" }; + assertCompletionResults(fCursorOffset, expected, ID); + } + // struct A {}; // // template