1
0
Fork 0
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:
Markus Schorn 2007-04-25 07:36:17 +00:00
parent 8fb26410f5
commit 1d07593fd1
3 changed files with 33 additions and 2 deletions

View file

@ -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);
}
}

View file

@ -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;

View file

@ -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) {