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:
parent
774de9a0ea
commit
456630b5a0
2 changed files with 23 additions and 12 deletions
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Add table
Reference in a new issue