1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 424571 - C++ indexer cannot find a derived class if the base class

in its declaration is written with namespace
This commit is contained in:
Sergey Prigogin 2014-05-08 20:03:40 -07:00
parent 774de9a0ea
commit 456630b5a0
2 changed files with 23 additions and 12 deletions

View file

@ -1011,17 +1011,10 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
if (parentNode instanceof ICPPASTQualifiedName) {
if (name != ((ICPPASTQualifiedName) parentNode).getLastName())
return;
name = (IASTName) parentNode;
parentNode = parentNode.getParent();
}
if (name.getPropertyInParent() == ICPPASTBaseSpecifier.NAME ||
(name.getPropertyInParent() == ICPPASTTemplateId.TEMPLATE_NAME &&
parentNode.getPropertyInParent() == ICPPASTBaseSpecifier.NAME)) {
pdomName.setIsBaseSpecifier();
} else if (parentNode instanceof ICPPASTUsingDirective) {
IASTNode parent= name.getParent();
if (parent instanceof ICPPASTQualifiedName) {
name = (IASTName) parent;
}
if (parentNode instanceof ICPPASTUsingDirective) {
IScope container= CPPVisitor.getContainingScope(name);
boolean doit= false;
PDOMCPPNamespace containerNS= null;
@ -1100,6 +1093,19 @@ class PDOMCPPLinkage extends PDOMLinkage implements IIndexCPPBindingConstants {
}
}
}
} else {
if (name.getPropertyInParent() == ICPPASTTemplateId.TEMPLATE_NAME) {
name = (IASTName) parentNode;
parentNode = parentNode.getParent();
}
if (parentNode instanceof ICPPASTQualifiedName) {
if (name != ((ICPPASTQualifiedName) parentNode).getLastName())
return;
name = (IASTName) parentNode;
parentNode = parentNode.getParent();
}
if (name.getPropertyInParent() == ICPPASTBaseSpecifier.NAME)
pdomName.setIsBaseSpecifier();
}
}

View file

@ -840,13 +840,18 @@ public class CppTypeHierarchyTest extends TypeHierarchyBaseTest {
checkMethodTable(new String[] {"field1 : T", "method1() : T"});
}
// namespace ns {
//
// template<typename T>
// class A {
// public:
// int field1;
// int method1();
// };
// class B : public A<int> {
//
// }
//
// class B : public ns::A<int> {
// public:
// int field2;
// int method2();
@ -863,7 +868,7 @@ public class CppTypeHierarchyTest extends TypeHierarchyBaseTest {
openTypeHierarchy(editor);
tree= getHierarchyViewer().getTree();
item1= checkTreeNode(tree, 0, "A");
item1= checkTreeNode(tree, 0, "ns::A");
assertEquals(1, tree.getItemCount());
getHierarchyViewer().expandAll();
@ -875,7 +880,7 @@ public class CppTypeHierarchyTest extends TypeHierarchyBaseTest {
editor.selectAndReveal(content.indexOf("B"), 1);
openTypeHierarchy(editor);
tree= getHierarchyViewer().getTree();
item1= checkTreeNode(tree, 0, "A");
item1= checkTreeNode(tree, 0, "ns::A");
assertEquals(1, tree.getItemCount());
item2= checkTreeNode(item1, 0, "B");