1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-29 11:55:40 +02:00

Bug 395571 - Show name of nesting type when printing names of nested types in completions

Change-Id: I2fc191403a6ead68d30b99e427a005109355baad
This commit is contained in:
Nathan Ridge 2016-10-16 13:20:13 -04:00
parent 35687baf43
commit e7e66605f2
5 changed files with 31 additions and 10 deletions

View file

@ -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.c.ICQualifierType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBasicType; 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.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.ICPPFunction;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionType;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace; import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
@ -445,8 +446,10 @@ public class ASTTypeUtil {
result.append(Keywords.ENUM); result.append(Keywords.ENUM);
result.append(SPACE); result.append(SPACE);
} }
boolean qualify = normalize || (type instanceof ITypedef && type instanceof ICPPSpecialization); ICPPBinding binding = ((ICPPBinding) type);
appendCppName((ICPPBinding) type, normalize, qualify, result); 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) { } else if (type instanceof ICompositeType) {
// Don't display class, and for consistency don't display struct/union as well (bug 101114). // Don't display class, and for consistency don't display struct/union as well (bug 101114).
appendNameCheckAnonymous((ICompositeType) type, result); appendNameCheckAnonymous((ICompositeType) type, result);

View file

@ -279,7 +279,7 @@ public class BasicCallHierarchyTest extends CallHierarchyBaseTest {
editor.selectAndReveal(content.indexOf("mem4"), 0); editor.selectAndReveal(content.indexOf("mem4"), 0);
openCallHierarchy(editor); 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"); checkTreeNode(tree, 0, 0, "main() : void");
editor.selectAndReveal(content.indexOf("mem5"), 0); editor.selectAndReveal(content.indexOf("mem5"), 0);
@ -298,7 +298,7 @@ public class BasicCallHierarchyTest extends CallHierarchyBaseTest {
editor.selectAndReveal(content.indexOf("mem4."), 0); editor.selectAndReveal(content.indexOf("mem4."), 0);
openCallHierarchy(editor); 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"); checkTreeNode(tree, 0, 0, "main() : void");
} }
@ -461,7 +461,7 @@ public class BasicCallHierarchyTest extends CallHierarchyBaseTest {
editor.selectAndReveal(content.indexOf("mem4"), 0); editor.selectAndReveal(content.indexOf("mem4"), 0);
openCallHierarchy(editor); 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"); checkTreeNode(tree, 0, 0, "main() : void");
editor.selectAndReveal(content.indexOf("mem5"), 0); editor.selectAndReveal(content.indexOf("mem5"), 0);
@ -480,7 +480,7 @@ public class BasicCallHierarchyTest extends CallHierarchyBaseTest {
editor.selectAndReveal(content.indexOf("mem4."), 0); editor.selectAndReveal(content.indexOf("mem4."), 0);
openCallHierarchy(editor); 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"); checkTreeNode(tree, 0, 0, "main() : void");
} }

View file

@ -256,8 +256,8 @@ public class ContentAssistTests extends BaseUITestCase {
results = getResults(cu, c2.indexOf("::") + 2); //$NON-NLS-1$ results = getResults(cu, c2.indexOf("::") + 2); //$NON-NLS-1$
assertEquals(3, results.length); assertEquals(3, results.length);
assertEquals("getAbility(void) : enum _Ability", results[1].getDisplayString()); //$NON-NLS-1$ assertEquals("getAbility(void) : enum Strategy::_Ability", results[1].getDisplayString()); //$NON-NLS-1$
assertEquals("Strategy(enum _Ability a)", results[0].getDisplayString()); //$NON-NLS-1$ assertEquals("Strategy(enum Strategy::_Ability a)", results[0].getDisplayString()); //$NON-NLS-1$
assertEquals("_Ability", results[2].getDisplayString()); //$NON-NLS-1$ assertEquals("_Ability", results[2].getDisplayString()); //$NON-NLS-1$
} }

View file

@ -1538,6 +1538,23 @@ public class CompletionTests extends AbstractContentAssistTest {
assertContentAssistResults(fCursorOffset, expected, true, ID); assertContentAssistResults(fCursorOffset, expected, true, ID);
} }
// template <typename T>
// struct meta1;
//
// template <typename T>
// struct meta2;
//
// template <typename T>
// void waldo(T, typename meta1<T>::type, typename meta2<T>::type);
//
// int main() {
// wald/*cursor*/
// }
public void testNestingClassNameInCompletion_395571() throws Exception {
final String[] expected = { "waldo(T, meta1<T>::type, meta2<T>::type) : void" };
assertCompletionResults(fCursorOffset, expected, DISPLAY);
}
// void foo() { Specialization<int, /*cursor*/ // void foo() { Specialization<int, /*cursor*/
public void testTemplateArgumentList() throws Exception { public void testTemplateArgumentList() throws Exception {
setCommaAfterFunctionParameter(CCorePlugin.INSERT); setCommaAfterFunctionParameter(CCorePlugin.INSERT);

View file

@ -532,8 +532,9 @@ public class DOMCompletionProposalComputer extends ParsingBasedProposalComputer
idArgs.append(parameterDelimiter); idArgs.append(parameterDelimiter);
} }
dispArgs.append(ASTTypeUtil.getType(paramType, false)); String paramTypeString = ASTTypeUtil.getType(paramType, false);
idArgs.append(ASTTypeUtil.getType(paramType, false)); dispArgs.append(paramTypeString);
idArgs.append(paramTypeString);
String paramName = param.getName(); String paramName = param.getName();
if (paramName != null && paramName.length() > 0) { if (paramName != null && paramName.length() > 0) {
dispArgs.append(' '); dispArgs.append(' ');