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 (parentNode instanceof ICPPASTQualifiedName) {
|
||||||
if (name != ((ICPPASTQualifiedName) parentNode).getLastName())
|
if (name != ((ICPPASTQualifiedName) parentNode).getLastName())
|
||||||
return;
|
return;
|
||||||
|
name = (IASTName) parentNode;
|
||||||
parentNode = parentNode.getParent();
|
parentNode = parentNode.getParent();
|
||||||
}
|
}
|
||||||
if (name.getPropertyInParent() == ICPPASTBaseSpecifier.NAME ||
|
if (parentNode instanceof ICPPASTUsingDirective) {
|
||||||
(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;
|
|
||||||
}
|
|
||||||
IScope container= CPPVisitor.getContainingScope(name);
|
IScope container= CPPVisitor.getContainingScope(name);
|
||||||
boolean doit= false;
|
boolean doit= false;
|
||||||
PDOMCPPNamespace containerNS= null;
|
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"});
|
checkMethodTable(new String[] {"field1 : T", "method1() : T"});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// namespace ns {
|
||||||
|
//
|
||||||
// template<typename T>
|
// template<typename T>
|
||||||
// class A {
|
// class A {
|
||||||
// public:
|
// public:
|
||||||
// int field1;
|
// int field1;
|
||||||
// int method1();
|
// int method1();
|
||||||
// };
|
// };
|
||||||
// class B : public A<int> {
|
//
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// class B : public ns::A<int> {
|
||||||
// public:
|
// public:
|
||||||
// int field2;
|
// int field2;
|
||||||
// int method2();
|
// int method2();
|
||||||
|
@ -863,7 +868,7 @@ public class CppTypeHierarchyTest extends TypeHierarchyBaseTest {
|
||||||
openTypeHierarchy(editor);
|
openTypeHierarchy(editor);
|
||||||
tree= getHierarchyViewer().getTree();
|
tree= getHierarchyViewer().getTree();
|
||||||
|
|
||||||
item1= checkTreeNode(tree, 0, "A");
|
item1= checkTreeNode(tree, 0, "ns::A");
|
||||||
assertEquals(1, tree.getItemCount());
|
assertEquals(1, tree.getItemCount());
|
||||||
getHierarchyViewer().expandAll();
|
getHierarchyViewer().expandAll();
|
||||||
|
|
||||||
|
@ -875,7 +880,7 @@ public class CppTypeHierarchyTest extends TypeHierarchyBaseTest {
|
||||||
editor.selectAndReveal(content.indexOf("B"), 1);
|
editor.selectAndReveal(content.indexOf("B"), 1);
|
||||||
openTypeHierarchy(editor);
|
openTypeHierarchy(editor);
|
||||||
tree= getHierarchyViewer().getTree();
|
tree= getHierarchyViewer().getTree();
|
||||||
item1= checkTreeNode(tree, 0, "A");
|
item1= checkTreeNode(tree, 0, "ns::A");
|
||||||
assertEquals(1, tree.getItemCount());
|
assertEquals(1, tree.getItemCount());
|
||||||
|
|
||||||
item2= checkTreeNode(item1, 0, "B");
|
item2= checkTreeNode(item1, 0, "B");
|
||||||
|
|
Loading…
Add table
Reference in a new issue