mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-02 05:45:58 +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.IFunction;
|
||||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
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.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.ICPPNamespace;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
||||||
|
@ -222,4 +223,25 @@ public class IndexBindingResolutionBugs extends IndexBindingResolutionTestBase {
|
||||||
IBinding b0 = getBindingFromASTName("func1;", 5);
|
IBinding b0 = getBindingFromASTName("func1;", 5);
|
||||||
assertTrue(b0 instanceof IFunction);
|
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 {
|
public class PDOM extends PlatformObject implements IIndexFragment, IPDOM {
|
||||||
protected Database db;
|
protected Database db;
|
||||||
|
|
||||||
public static final int VERSION = 33;
|
public static final int VERSION = 34;
|
||||||
// 0 - the beginning of it all
|
// 0 - the beginning of it all
|
||||||
// 1 - first change to kick off upgrades
|
// 1 - first change to kick off upgrades
|
||||||
// 2 - added file inclusions
|
// 2 - added file inclusions
|
||||||
|
@ -110,6 +110,7 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM {
|
||||||
// 31 - macros: added file locations
|
// 31 - macros: added file locations
|
||||||
// 32 - support standalone function types (181936)
|
// 32 - support standalone function types (181936)
|
||||||
// 33 - templates: constructor instances
|
// 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 LINKAGES = Database.DATA_AREA;
|
||||||
public static final int FILE_INDEX = Database.DATA_AREA + 4;
|
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_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_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_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_PARAMETER_SPECIALIZATION= PDOMLinkage.LAST_NODE_TYPE + 27;
|
||||||
public static final int CPP_FIELD_SPECIALIZATION= PDOMLinkage.LAST_NODE_TYPE + 28;
|
public static final int CPP_FIELD_SPECIALIZATION= PDOMLinkage.LAST_NODE_TYPE + 28;
|
||||||
public static final int CPP_FUNCTION_SPECIALIZATION= PDOMLinkage.LAST_NODE_TYPE + 29;
|
public static final int CPP_FUNCTION_SPECIALIZATION= PDOMLinkage.LAST_NODE_TYPE + 29;
|
||||||
|
@ -713,6 +713,14 @@ class PDOMCPPLinkage extends PDOMLinkage {
|
||||||
super.onCreateName(pdomName, name);
|
super.onCreateName(pdomName, name);
|
||||||
|
|
||||||
IASTNode parentNode= name.getParent();
|
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) {
|
if (parentNode instanceof ICPPASTBaseSpecifier) {
|
||||||
PDOMName derivedClassName= (PDOMName) pdomName.getEnclosingDefinition();
|
PDOMName derivedClassName= (PDOMName) pdomName.getEnclosingDefinition();
|
||||||
if (derivedClassName != null) {
|
if (derivedClassName != null) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue