From e7e66605f2d4733e38a638ad88a0f9dcd79259ea Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sun, 16 Oct 2016 13:20:13 -0400 Subject: [PATCH] Bug 395571 - Show name of nesting type when printing names of nested types in completions Change-Id: I2fc191403a6ead68d30b99e427a005109355baad --- .../eclipse/cdt/core/dom/ast/ASTTypeUtil.java | 7 +++++-- .../callhierarchy/BasicCallHierarchyTest.java | 8 ++++---- .../text/contentassist/ContentAssistTests.java | 4 ++-- .../text/contentassist2/CompletionTests.java | 17 +++++++++++++++++ .../DOMCompletionProposalComputer.java | 5 +++-- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java index 76c4db01d01..c9d01aff77a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/ASTTypeUtil.java @@ -26,6 +26,7 @@ import org.eclipse.cdt.core.dom.ast.c.ICArrayType; import org.eclipse.cdt.core.dom.ast.c.ICQualifierType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBasicType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; @@ -445,8 +446,10 @@ public class ASTTypeUtil { result.append(Keywords.ENUM); result.append(SPACE); } - boolean qualify = normalize || (type instanceof ITypedef && type instanceof ICPPSpecialization); - appendCppName((ICPPBinding) type, normalize, qualify, result); + ICPPBinding binding = ((ICPPBinding) type); + boolean nested = binding.getOwner() instanceof ICPPClassType; + boolean qualify = normalize || nested || (type instanceof ITypedef && type instanceof ICPPSpecialization); + appendCppName(binding, normalize, qualify, result); } else if (type instanceof ICompositeType) { // Don't display class, and for consistency don't display struct/union as well (bug 101114). appendNameCheckAnonymous((ICompositeType) type, result); diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/callhierarchy/BasicCallHierarchyTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/callhierarchy/BasicCallHierarchyTest.java index 312dc0d182d..3de4f61be97 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/callhierarchy/BasicCallHierarchyTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/callhierarchy/BasicCallHierarchyTest.java @@ -279,7 +279,7 @@ public class BasicCallHierarchyTest extends CallHierarchyBaseTest { editor.selectAndReveal(content.indexOf("mem4"), 0); openCallHierarchy(editor); - checkTreeNode(tree, 0, "s4::mem4 : {struct_member.cpp:129}"); + checkTreeNode(tree, 0, "s4::mem4 : s4::{struct_member.cpp:129}"); checkTreeNode(tree, 0, 0, "main() : void"); editor.selectAndReveal(content.indexOf("mem5"), 0); @@ -298,7 +298,7 @@ public class BasicCallHierarchyTest extends CallHierarchyBaseTest { editor.selectAndReveal(content.indexOf("mem4."), 0); openCallHierarchy(editor); - checkTreeNode(tree, 0, "s4::mem4 : {struct_member.cpp:129}"); + checkTreeNode(tree, 0, "s4::mem4 : s4::{struct_member.cpp:129}"); checkTreeNode(tree, 0, 0, "main() : void"); } @@ -461,7 +461,7 @@ public class BasicCallHierarchyTest extends CallHierarchyBaseTest { editor.selectAndReveal(content.indexOf("mem4"), 0); openCallHierarchy(editor); - checkTreeNode(tree, 0, "u4::mem4 : {union_member.cpp:161}"); + checkTreeNode(tree, 0, "u4::mem4 : u4::{union_member.cpp:161}"); checkTreeNode(tree, 0, 0, "main() : void"); editor.selectAndReveal(content.indexOf("mem5"), 0); @@ -480,7 +480,7 @@ public class BasicCallHierarchyTest extends CallHierarchyBaseTest { editor.selectAndReveal(content.indexOf("mem4."), 0); openCallHierarchy(editor); - checkTreeNode(tree, 0, "u4::mem4 : {union_member.cpp:161}"); + checkTreeNode(tree, 0, "u4::mem4 : u4::{union_member.cpp:161}"); checkTreeNode(tree, 0, 0, "main() : void"); } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java index 0c3b0d27b71..f112c3e79c1 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java @@ -256,8 +256,8 @@ public class ContentAssistTests extends BaseUITestCase { results = getResults(cu, c2.indexOf("::") + 2); //$NON-NLS-1$ assertEquals(3, results.length); - assertEquals("getAbility(void) : enum _Ability", results[1].getDisplayString()); //$NON-NLS-1$ - assertEquals("Strategy(enum _Ability a)", results[0].getDisplayString()); //$NON-NLS-1$ + assertEquals("getAbility(void) : enum Strategy::_Ability", results[1].getDisplayString()); //$NON-NLS-1$ + assertEquals("Strategy(enum Strategy::_Ability a)", results[0].getDisplayString()); //$NON-NLS-1$ assertEquals("_Ability", results[2].getDisplayString()); //$NON-NLS-1$ } 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 1c966cf24db..050f055d8a5 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 @@ -1537,6 +1537,23 @@ public class CompletionTests extends AbstractContentAssistTest { final String[] expected = { "i" }; assertContentAssistResults(fCursorOffset, expected, true, ID); } + + // template + // struct meta1; + // + // template + // struct meta2; + // + // template + // void waldo(T, typename meta1::type, typename meta2::type); + // + // int main() { + // wald/*cursor*/ + // } + public void testNestingClassNameInCompletion_395571() throws Exception { + final String[] expected = { "waldo(T, meta1::type, meta2::type) : void" }; + assertCompletionResults(fCursorOffset, expected, DISPLAY); + } // void foo() { Specialization 0) { dispArgs.append(' ');