mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-23 00:45:28 +02:00
Fix for 183843 by Bryan Wilkinson, qualified base classes in index.
This commit is contained in:
parent
8fb26410f5
commit
1d07593fd1
3 changed files with 33 additions and 2 deletions
|
@ -19,6 +19,7 @@ import org.eclipse.cdt.core.dom.ast.IBinding;
|
|||
import org.eclipse.cdt.core.dom.ast.IFunction;
|
||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassTemplate;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPNamespace;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
|
||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
||||
|
@ -222,4 +223,25 @@ public class IndexBindingResolutionBugs extends IndexBindingResolutionTestBase {
|
|||
IBinding b0 = getBindingFromASTName("func1;", 5);
|
||||
assertTrue(b0 instanceof IFunction);
|
||||
}
|
||||
|
||||
// class B {
|
||||
// public:
|
||||
// class BB {
|
||||
// public:
|
||||
// int field;
|
||||
// };
|
||||
// };
|
||||
//
|
||||
// class A : public B::BB {};
|
||||
|
||||
// #include "header.h"
|
||||
//
|
||||
// void foo() {
|
||||
// A c;
|
||||
// c.field;//comment
|
||||
// }
|
||||
public void testBug183843() throws DOMException {
|
||||
IBinding b0 = getBindingFromASTName("field;//", 5);
|
||||
assertTrue(b0 instanceof ICPPField);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,7 +75,7 @@ import org.eclipse.core.runtime.Status;
|
|||
public class PDOM extends PlatformObject implements IIndexFragment, IPDOM {
|
||||
protected Database db;
|
||||
|
||||
public static final int VERSION = 33;
|
||||
public static final int VERSION = 34;
|
||||
// 0 - the beginning of it all
|
||||
// 1 - first change to kick off upgrades
|
||||
// 2 - added file inclusions
|
||||
|
@ -110,6 +110,7 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM {
|
|||
// 31 - macros: added file locations
|
||||
// 32 - support standalone function types (181936)
|
||||
// 33 - templates: constructor instances
|
||||
// 34 - fix for base classes represented by qualified names (183843)
|
||||
|
||||
public static final int LINKAGES = Database.DATA_AREA;
|
||||
public static final int FILE_INDEX = Database.DATA_AREA + 4;
|
||||
|
|
|
@ -117,7 +117,7 @@ class PDOMCPPLinkage extends PDOMLinkage {
|
|||
public static final int CPP_CONSTRUCTOR_INSTANCE= PDOMLinkage.LAST_NODE_TYPE + 23;
|
||||
public static final int CPP_DEFERRED_FUNCTION_INSTANCE= PDOMLinkage.LAST_NODE_TYPE + 24;
|
||||
public static final int CPP_CLASS_INSTANCE= PDOMLinkage.LAST_NODE_TYPE + 25;
|
||||
public static final int CPP_DEFERRED_CLASS_INSTANCE= PDOMCPPLinkage.LAST_NODE_TYPE + 26;
|
||||
public static final int CPP_DEFERRED_CLASS_INSTANCE= PDOMLinkage.LAST_NODE_TYPE + 26;
|
||||
public static final int CPP_PARAMETER_SPECIALIZATION= PDOMLinkage.LAST_NODE_TYPE + 27;
|
||||
public static final int CPP_FIELD_SPECIALIZATION= PDOMLinkage.LAST_NODE_TYPE + 28;
|
||||
public static final int CPP_FUNCTION_SPECIALIZATION= PDOMLinkage.LAST_NODE_TYPE + 29;
|
||||
|
@ -713,6 +713,14 @@ class PDOMCPPLinkage extends PDOMLinkage {
|
|||
super.onCreateName(pdomName, name);
|
||||
|
||||
IASTNode parentNode= name.getParent();
|
||||
if (parentNode instanceof ICPPASTQualifiedName) {
|
||||
IASTName [] ns = ((ICPPASTQualifiedName)parentNode).getNames();
|
||||
if ( name != ns[ ns.length -1 ] ) {
|
||||
return;
|
||||
} else {
|
||||
parentNode = parentNode.getParent();
|
||||
}
|
||||
}
|
||||
if (parentNode instanceof ICPPASTBaseSpecifier) {
|
||||
PDOMName derivedClassName= (PDOMName) pdomName.getEnclosingDefinition();
|
||||
if (derivedClassName != null) {
|
||||
|
|
Loading…
Add table
Reference in a new issue