mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-09 02:36:01 +02:00
Fix for 193962, isSameType() for anonymous types.
This commit is contained in:
parent
925667561d
commit
6ca0ffde23
8 changed files with 320 additions and 61 deletions
|
@ -719,5 +719,4 @@ public class IndexBugsTests extends BaseTestCase {
|
||||||
CProjectHelper.delete(p2);
|
CProjectHelper.delete(p2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import org.eclipse.cdt.core.dom.ast.IParameter;
|
||||||
import org.eclipse.cdt.core.dom.ast.IType;
|
import org.eclipse.cdt.core.dom.ast.IType;
|
||||||
import org.eclipse.cdt.core.dom.ast.ITypedef;
|
import org.eclipse.cdt.core.dom.ast.ITypedef;
|
||||||
import org.eclipse.cdt.core.dom.ast.IVariable;
|
import org.eclipse.cdt.core.dom.ast.IVariable;
|
||||||
|
import org.eclipse.cdt.core.index.IIndexBinding;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For testing PDOM binding resolution
|
* For testing PDOM binding resolution
|
||||||
|
@ -268,4 +269,62 @@ public class IndexCBindingResolutionBugs extends IndexBindingResolutionTestBase
|
||||||
ei= e.getEnumerators();
|
ei= e.getEnumerators();
|
||||||
assertEquals(1, ei.length);
|
assertEquals(1, ei.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// // no header needed
|
||||||
|
|
||||||
|
// typedef struct {
|
||||||
|
// int member;
|
||||||
|
// } t_struct;
|
||||||
|
// typedef union {
|
||||||
|
// int member;
|
||||||
|
// } t_union;
|
||||||
|
// typedef enum {
|
||||||
|
// ei
|
||||||
|
// } t_enum;
|
||||||
|
public void testIsSameAnonymousType_Bug193962() throws DOMException {
|
||||||
|
// struct
|
||||||
|
IBinding tdAST = getBindingFromASTName("t_struct;", 8);
|
||||||
|
assertFalse(tdAST instanceof IIndexBinding);
|
||||||
|
IBinding tdIndex= strategy.getIndex().adaptBinding(tdAST);
|
||||||
|
assertTrue(tdIndex instanceof IIndexBinding);
|
||||||
|
assertTrue(tdAST instanceof ITypedef);
|
||||||
|
assertTrue(tdIndex instanceof ITypedef);
|
||||||
|
|
||||||
|
IType tAST= ((ITypedef) tdAST).getType();
|
||||||
|
IType tIndex= ((ITypedef) tdIndex).getType();
|
||||||
|
assertTrue(tAST instanceof ICompositeType);
|
||||||
|
assertTrue(tIndex instanceof ICompositeType);
|
||||||
|
assertTrue(tAST.isSameType(tIndex));
|
||||||
|
assertTrue(tIndex.isSameType(tAST));
|
||||||
|
|
||||||
|
// union
|
||||||
|
tdAST = getBindingFromASTName("t_union;", 7);
|
||||||
|
assertFalse(tdAST instanceof IIndexBinding);
|
||||||
|
tdIndex= strategy.getIndex().adaptBinding(tdAST);
|
||||||
|
assertTrue(tdIndex instanceof IIndexBinding);
|
||||||
|
assertTrue(tdAST instanceof ITypedef);
|
||||||
|
assertTrue(tdIndex instanceof ITypedef);
|
||||||
|
|
||||||
|
tAST= ((ITypedef) tdAST).getType();
|
||||||
|
tIndex= ((ITypedef) tdIndex).getType();
|
||||||
|
assertTrue(tAST instanceof ICompositeType);
|
||||||
|
assertTrue(tIndex instanceof ICompositeType);
|
||||||
|
assertTrue(tAST.isSameType(tIndex));
|
||||||
|
assertTrue(tIndex.isSameType(tAST));
|
||||||
|
|
||||||
|
// enum
|
||||||
|
tdAST = getBindingFromASTName("t_enum;", 6);
|
||||||
|
assertFalse(tdAST instanceof IIndexBinding);
|
||||||
|
tdIndex= strategy.getIndex().adaptBinding(tdAST);
|
||||||
|
assertTrue(tdIndex instanceof IIndexBinding);
|
||||||
|
assertTrue(tdAST instanceof ITypedef);
|
||||||
|
assertTrue(tdIndex instanceof ITypedef);
|
||||||
|
|
||||||
|
tAST= ((ITypedef) tdAST).getType();
|
||||||
|
tIndex= ((ITypedef) tdIndex).getType();
|
||||||
|
assertTrue(tAST instanceof IEnumeration);
|
||||||
|
assertTrue(tIndex instanceof IEnumeration);
|
||||||
|
assertTrue(tAST.isSameType(tIndex));
|
||||||
|
assertTrue(tIndex.isSameType(tAST));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import junit.framework.TestSuite;
|
||||||
import org.eclipse.cdt.core.dom.ast.DOMException;
|
import org.eclipse.cdt.core.dom.ast.DOMException;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
import org.eclipse.cdt.core.dom.ast.IBinding;
|
import org.eclipse.cdt.core.dom.ast.IBinding;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.ICompositeType;
|
||||||
import org.eclipse.cdt.core.dom.ast.IEnumeration;
|
import org.eclipse.cdt.core.dom.ast.IEnumeration;
|
||||||
import org.eclipse.cdt.core.dom.ast.IFunction;
|
import org.eclipse.cdt.core.dom.ast.IFunction;
|
||||||
import org.eclipse.cdt.core.dom.ast.IParameter;
|
import org.eclipse.cdt.core.dom.ast.IParameter;
|
||||||
|
@ -32,6 +33,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPSpecialization;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateDefinition;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPTemplateParameter;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPVariable;
|
||||||
|
import org.eclipse.cdt.core.index.IIndexBinding;
|
||||||
import org.eclipse.cdt.core.parser.util.ObjectMap;
|
import org.eclipse.cdt.core.parser.util.ObjectMap;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalTemplateInstantiator;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalTemplateInstantiator;
|
||||||
|
|
||||||
|
@ -385,4 +387,159 @@ public class IndexCPPBindingResolutionBugs extends IndexBindingResolutionTestBas
|
||||||
type= ((ITypedef) type).getType();
|
type= ((ITypedef) type).getType();
|
||||||
assertTrue(type instanceof IEnumeration);
|
assertTrue(type instanceof IEnumeration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// // no header needed
|
||||||
|
|
||||||
|
// typedef class {
|
||||||
|
// int member;
|
||||||
|
// } t_class;
|
||||||
|
// typedef struct {
|
||||||
|
// int member;
|
||||||
|
// } t_struct;
|
||||||
|
// typedef union {
|
||||||
|
// int member;
|
||||||
|
// } t_union;
|
||||||
|
// typedef enum {
|
||||||
|
// ei
|
||||||
|
// } t_enum;
|
||||||
|
public void testIsSameAnonymousType_Bug193962() throws DOMException {
|
||||||
|
// class
|
||||||
|
IBinding tdAST = getBindingFromASTName("t_class;", 7);
|
||||||
|
assertFalse(tdAST instanceof IIndexBinding);
|
||||||
|
IBinding tdIndex= strategy.getIndex().adaptBinding(tdAST);
|
||||||
|
assertTrue(tdIndex instanceof IIndexBinding);
|
||||||
|
assertTrue(tdAST instanceof ITypedef);
|
||||||
|
assertTrue(tdIndex instanceof ITypedef);
|
||||||
|
|
||||||
|
IType tAST= ((ITypedef) tdAST).getType();
|
||||||
|
IType tIndex= ((ITypedef) tdIndex).getType();
|
||||||
|
assertTrue(tAST instanceof ICompositeType);
|
||||||
|
assertTrue(tIndex instanceof ICompositeType);
|
||||||
|
assertTrue(tAST.isSameType(tIndex));
|
||||||
|
assertTrue(tIndex.isSameType(tAST));
|
||||||
|
|
||||||
|
// struct
|
||||||
|
tdAST = getBindingFromASTName("t_struct;", 8);
|
||||||
|
assertFalse(tdAST instanceof IIndexBinding);
|
||||||
|
tdIndex= strategy.getIndex().adaptBinding(tdAST);
|
||||||
|
assertTrue(tdIndex instanceof IIndexBinding);
|
||||||
|
assertTrue(tdAST instanceof ITypedef);
|
||||||
|
assertTrue(tdIndex instanceof ITypedef);
|
||||||
|
|
||||||
|
tAST= ((ITypedef) tdAST).getType();
|
||||||
|
tIndex= ((ITypedef) tdIndex).getType();
|
||||||
|
assertTrue(tAST instanceof ICompositeType);
|
||||||
|
assertTrue(tIndex instanceof ICompositeType);
|
||||||
|
assertTrue(tAST.isSameType(tIndex));
|
||||||
|
assertTrue(tIndex.isSameType(tAST));
|
||||||
|
|
||||||
|
// union
|
||||||
|
tdAST = getBindingFromASTName("t_union;", 7);
|
||||||
|
assertFalse(tdAST instanceof IIndexBinding);
|
||||||
|
tdIndex= strategy.getIndex().adaptBinding(tdAST);
|
||||||
|
assertTrue(tdIndex instanceof IIndexBinding);
|
||||||
|
assertTrue(tdAST instanceof ITypedef);
|
||||||
|
assertTrue(tdIndex instanceof ITypedef);
|
||||||
|
|
||||||
|
tAST= ((ITypedef) tdAST).getType();
|
||||||
|
tIndex= ((ITypedef) tdIndex).getType();
|
||||||
|
assertTrue(tAST instanceof ICompositeType);
|
||||||
|
assertTrue(tIndex instanceof ICompositeType);
|
||||||
|
assertTrue(tAST.isSameType(tIndex));
|
||||||
|
assertTrue(tIndex.isSameType(tAST));
|
||||||
|
|
||||||
|
// enum
|
||||||
|
tdAST = getBindingFromASTName("t_enum;", 6);
|
||||||
|
assertFalse(tdAST instanceof IIndexBinding);
|
||||||
|
tdIndex= strategy.getIndex().adaptBinding(tdAST);
|
||||||
|
assertTrue(tdIndex instanceof IIndexBinding);
|
||||||
|
assertTrue(tdAST instanceof ITypedef);
|
||||||
|
assertTrue(tdIndex instanceof ITypedef);
|
||||||
|
|
||||||
|
tAST= ((ITypedef) tdAST).getType();
|
||||||
|
tIndex= ((ITypedef) tdIndex).getType();
|
||||||
|
assertTrue(tAST instanceof IEnumeration);
|
||||||
|
assertTrue(tIndex instanceof IEnumeration);
|
||||||
|
assertTrue(tAST.isSameType(tIndex));
|
||||||
|
assertTrue(tIndex.isSameType(tAST));
|
||||||
|
}
|
||||||
|
|
||||||
|
// // no header needed
|
||||||
|
|
||||||
|
// namespace ns {
|
||||||
|
// typedef class {
|
||||||
|
// int member;
|
||||||
|
// } t_class;
|
||||||
|
// typedef struct {
|
||||||
|
// int member;
|
||||||
|
// } t_struct;
|
||||||
|
// typedef union {
|
||||||
|
// int member;
|
||||||
|
// } t_union;
|
||||||
|
// typedef enum {
|
||||||
|
// ei
|
||||||
|
// } t_enum;
|
||||||
|
// };
|
||||||
|
public void testIsSameNestedAnonymousType_Bug193962() throws DOMException {
|
||||||
|
// class
|
||||||
|
IBinding tdAST = getBindingFromASTName("t_class;", 7);
|
||||||
|
assertFalse(tdAST instanceof IIndexBinding);
|
||||||
|
IBinding tdIndex= strategy.getIndex().adaptBinding(tdAST);
|
||||||
|
assertTrue(tdIndex instanceof IIndexBinding);
|
||||||
|
assertTrue(tdAST instanceof ITypedef);
|
||||||
|
assertTrue(tdIndex instanceof ITypedef);
|
||||||
|
|
||||||
|
IType tAST= ((ITypedef) tdAST).getType();
|
||||||
|
IType tIndex= ((ITypedef) tdIndex).getType();
|
||||||
|
assertTrue(tAST instanceof ICompositeType);
|
||||||
|
assertTrue(tIndex instanceof ICompositeType);
|
||||||
|
assertTrue(tAST.isSameType(tIndex));
|
||||||
|
assertTrue(tIndex.isSameType(tAST));
|
||||||
|
|
||||||
|
// struct
|
||||||
|
tdAST = getBindingFromASTName("t_struct;", 8);
|
||||||
|
assertFalse(tdAST instanceof IIndexBinding);
|
||||||
|
tdIndex= strategy.getIndex().adaptBinding(tdAST);
|
||||||
|
assertTrue(tdIndex instanceof IIndexBinding);
|
||||||
|
assertTrue(tdAST instanceof ITypedef);
|
||||||
|
assertTrue(tdIndex instanceof ITypedef);
|
||||||
|
|
||||||
|
tAST= ((ITypedef) tdAST).getType();
|
||||||
|
tIndex= ((ITypedef) tdIndex).getType();
|
||||||
|
assertTrue(tAST instanceof ICompositeType);
|
||||||
|
assertTrue(tIndex instanceof ICompositeType);
|
||||||
|
assertTrue(tAST.isSameType(tIndex));
|
||||||
|
assertTrue(tIndex.isSameType(tAST));
|
||||||
|
|
||||||
|
// union
|
||||||
|
tdAST = getBindingFromASTName("t_union;", 7);
|
||||||
|
assertFalse(tdAST instanceof IIndexBinding);
|
||||||
|
tdIndex= strategy.getIndex().adaptBinding(tdAST);
|
||||||
|
assertTrue(tdIndex instanceof IIndexBinding);
|
||||||
|
assertTrue(tdAST instanceof ITypedef);
|
||||||
|
assertTrue(tdIndex instanceof ITypedef);
|
||||||
|
|
||||||
|
tAST= ((ITypedef) tdAST).getType();
|
||||||
|
tIndex= ((ITypedef) tdIndex).getType();
|
||||||
|
assertTrue(tAST instanceof ICompositeType);
|
||||||
|
assertTrue(tIndex instanceof ICompositeType);
|
||||||
|
assertTrue(tAST.isSameType(tIndex));
|
||||||
|
assertTrue(tIndex.isSameType(tAST));
|
||||||
|
|
||||||
|
// enum
|
||||||
|
tdAST = getBindingFromASTName("t_enum;", 6);
|
||||||
|
assertFalse(tdAST instanceof IIndexBinding);
|
||||||
|
tdIndex= strategy.getIndex().adaptBinding(tdAST);
|
||||||
|
assertTrue(tdIndex instanceof IIndexBinding);
|
||||||
|
assertTrue(tdAST instanceof ITypedef);
|
||||||
|
assertTrue(tdIndex instanceof ITypedef);
|
||||||
|
|
||||||
|
tAST= ((ITypedef) tdAST).getType();
|
||||||
|
tIndex= ((ITypedef) tdIndex).getType();
|
||||||
|
assertTrue(tAST instanceof IEnumeration);
|
||||||
|
assertTrue(tIndex instanceof IEnumeration);
|
||||||
|
assertTrue(tAST.isSameType(tIndex));
|
||||||
|
assertTrue(tIndex.isSameType(tAST));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ import org.eclipse.cdt.core.dom.ast.IField;
|
||||||
import org.eclipse.cdt.core.dom.ast.IScope;
|
import org.eclipse.cdt.core.dom.ast.IScope;
|
||||||
import org.eclipse.cdt.core.dom.ast.IType;
|
import org.eclipse.cdt.core.dom.ast.IType;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPField;
|
||||||
|
@ -246,11 +247,11 @@ public class PDOMASTAdapter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class AnonymousClassType implements ICPPClassType {
|
private static class AnonymousCPPBinding implements ICPPBinding {
|
||||||
private ICPPClassType fDelegate;
|
protected ICPPBinding fDelegate;
|
||||||
private char[] fName;
|
private char[] fName;
|
||||||
|
|
||||||
public AnonymousClassType(char[] name, ICPPClassType delegate) {
|
public AnonymousCPPBinding(char[] name, ICPPBinding delegate) {
|
||||||
fName= name;
|
fName= name;
|
||||||
fDelegate= delegate;
|
fDelegate= delegate;
|
||||||
}
|
}
|
||||||
|
@ -267,70 +268,32 @@ public class PDOMASTAdapter {
|
||||||
return fName;
|
return fName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IField findField(String name) throws DOMException {
|
public String[] getQualifiedName() throws DOMException {
|
||||||
return fDelegate.findField(name);
|
String[] qn= fDelegate.getQualifiedName();
|
||||||
|
if (qn.length < 1) {
|
||||||
|
qn= new String[]{null};
|
||||||
|
}
|
||||||
|
qn[qn.length-1]= new String(fName);
|
||||||
|
return qn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public char[][] getQualifiedNameCharArray() throws DOMException {
|
||||||
|
char[][] qn= fDelegate.getQualifiedNameCharArray();
|
||||||
|
if (qn.length < 1) {
|
||||||
|
qn= new char[][]{null};
|
||||||
|
}
|
||||||
|
qn[qn.length-1]= fName;
|
||||||
|
return qn;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getAdapter(Class adapter) {
|
public Object getAdapter(Class adapter) {
|
||||||
return fDelegate.getAdapter(adapter);
|
return fDelegate.getAdapter(adapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ICPPMethod[] getAllDeclaredMethods() throws DOMException {
|
|
||||||
return fDelegate.getAllDeclaredMethods();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ICPPBase[] getBases() throws DOMException {
|
|
||||||
return fDelegate.getBases();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IScope getCompositeScope() throws DOMException {
|
|
||||||
return fDelegate.getCompositeScope();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ICPPConstructor[] getConstructors() throws DOMException {
|
|
||||||
return fDelegate.getConstructors();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ICPPField[] getDeclaredFields() throws DOMException {
|
|
||||||
return fDelegate.getDeclaredFields();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ICPPMethod[] getDeclaredMethods() throws DOMException {
|
|
||||||
return fDelegate.getDeclaredMethods();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IField[] getFields() throws DOMException {
|
|
||||||
return fDelegate.getFields();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IBinding[] getFriends() throws DOMException {
|
|
||||||
return fDelegate.getFriends();
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getKey() throws DOMException {
|
|
||||||
return fDelegate.getKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ILinkage getLinkage() throws CoreException {
|
public ILinkage getLinkage() throws CoreException {
|
||||||
return fDelegate.getLinkage();
|
return fDelegate.getLinkage();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ICPPMethod[] getMethods() throws DOMException {
|
|
||||||
return fDelegate.getMethods();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ICPPClassType[] getNestedClasses() throws DOMException {
|
|
||||||
return fDelegate.getNestedClasses();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String[] getQualifiedName() throws DOMException {
|
|
||||||
return fDelegate.getQualifiedName();
|
|
||||||
}
|
|
||||||
|
|
||||||
public char[][] getQualifiedNameCharArray() throws DOMException {
|
|
||||||
return fDelegate.getQualifiedNameCharArray();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IScope getScope() throws DOMException {
|
public IScope getScope() throws DOMException {
|
||||||
return fDelegate.getScope();
|
return fDelegate.getScope();
|
||||||
}
|
}
|
||||||
|
@ -338,9 +301,77 @@ public class PDOMASTAdapter {
|
||||||
public boolean isGloballyQualified() throws DOMException {
|
public boolean isGloballyQualified() throws DOMException {
|
||||||
return fDelegate.isGloballyQualified();
|
return fDelegate.isGloballyQualified();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class AnonymousCPPEnumeration extends AnonymousCPPBinding implements IEnumeration, ICPPBinding {
|
||||||
|
public AnonymousCPPEnumeration(char[] name, IEnumeration delegate) {
|
||||||
|
super(name, (ICPPBinding) delegate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerator[] getEnumerators() throws DOMException {
|
||||||
|
return ((IEnumeration) fDelegate).getEnumerators();
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSameType(IType type) {
|
public boolean isSameType(IType type) {
|
||||||
return fDelegate.isSameType(type);
|
return ((IEnumeration) fDelegate).isSameType(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class AnonymousClassType extends AnonymousCPPBinding implements ICPPClassType {
|
||||||
|
public AnonymousClassType(char[] name, ICPPClassType delegate) {
|
||||||
|
super(name, delegate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IField findField(String name) throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).findField(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICPPMethod[] getAllDeclaredMethods() throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).getAllDeclaredMethods();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICPPBase[] getBases() throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).getBases();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IScope getCompositeScope() throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).getCompositeScope();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICPPConstructor[] getConstructors() throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).getConstructors();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICPPField[] getDeclaredFields() throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).getDeclaredFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICPPMethod[] getDeclaredMethods() throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).getDeclaredMethods();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IField[] getFields() throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).getFields();
|
||||||
|
}
|
||||||
|
|
||||||
|
public IBinding[] getFriends() throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).getFriends();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getKey() throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).getKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICPPMethod[] getMethods() throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).getMethods();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ICPPClassType[] getNestedClasses() throws DOMException {
|
||||||
|
return ((ICPPClassType) fDelegate).getNestedClasses();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSameType(IType type) {
|
||||||
|
return ((ICPPClassType) fDelegate).isSameType(type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -358,6 +389,9 @@ public class PDOMASTAdapter {
|
||||||
if (binding instanceof IEnumeration) {
|
if (binding instanceof IEnumeration) {
|
||||||
name= ASTTypeUtil.createNameForAnonymous(binding);
|
name= ASTTypeUtil.createNameForAnonymous(binding);
|
||||||
if (name != null) {
|
if (name != null) {
|
||||||
|
if (binding instanceof ICPPBinding) {
|
||||||
|
return new AnonymousCPPEnumeration(name, (IEnumeration) binding);
|
||||||
|
}
|
||||||
return new AnonymousEnumeration(name, (IEnumeration) binding);
|
return new AnonymousEnumeration(name, (IEnumeration) binding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,8 +19,10 @@ import org.eclipse.cdt.core.dom.ast.IEnumeration;
|
||||||
import org.eclipse.cdt.core.dom.ast.IEnumerator;
|
import org.eclipse.cdt.core.dom.ast.IEnumerator;
|
||||||
import org.eclipse.cdt.core.dom.ast.IType;
|
import org.eclipse.cdt.core.dom.ast.IType;
|
||||||
import org.eclipse.cdt.core.dom.ast.ITypedef;
|
import org.eclipse.cdt.core.dom.ast.ITypedef;
|
||||||
|
import org.eclipse.cdt.internal.core.index.IIndexCBindingConstants;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexType;
|
import org.eclipse.cdt.internal.core.index.IIndexType;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMASTAdapter;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError;
|
||||||
|
@ -49,7 +51,7 @@ class PDOMCEnumeration extends PDOMBinding implements IEnumeration, IIndexType {
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNodeType() {
|
public int getNodeType() {
|
||||||
return PDOMCLinkage.CENUMERATION;
|
return IIndexCBindingConstants.CENUMERATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerator[] getEnumerators() throws DOMException {
|
public IEnumerator[] getEnumerators() throws DOMException {
|
||||||
|
@ -103,6 +105,7 @@ class PDOMCEnumeration extends PDOMBinding implements IEnumeration, IIndexType {
|
||||||
|
|
||||||
if (type instanceof IEnumeration) {
|
if (type instanceof IEnumeration) {
|
||||||
IEnumeration etype= (IEnumeration) type;
|
IEnumeration etype= (IEnumeration) type;
|
||||||
|
etype= (IEnumeration) PDOMASTAdapter.getAdapterIfAnonymous(etype);
|
||||||
try {
|
try {
|
||||||
return getDBName().equals(etype.getNameCharArray());
|
return getDBName().equals(etype.getNameCharArray());
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
|
|
|
@ -36,6 +36,7 @@ import org.eclipse.cdt.internal.core.index.IIndexType;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
import org.eclipse.cdt.internal.core.pdom.db.PDOMNodeLinkedList;
|
import org.eclipse.cdt.internal.core.pdom.db.PDOMNodeLinkedList;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMMemberOwner;
|
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMMemberOwner;
|
||||||
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMASTAdapter;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError;
|
||||||
|
@ -181,6 +182,7 @@ public class PDOMCStructure extends PDOMBinding implements ICompositeType, ICCom
|
||||||
|
|
||||||
if (type instanceof ICompositeType) {
|
if (type instanceof ICompositeType) {
|
||||||
ICompositeType etype= (ICompositeType) type;
|
ICompositeType etype= (ICompositeType) type;
|
||||||
|
etype= (ICompositeType) PDOMASTAdapter.getAdapterIfAnonymous(etype);
|
||||||
try {
|
try {
|
||||||
return getDBName().equals(etype.getNameCharArray());
|
return getDBName().equals(etype.getNameCharArray());
|
||||||
} catch (CoreException e) {
|
} catch (CoreException e) {
|
||||||
|
|
|
@ -51,6 +51,7 @@ import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
import org.eclipse.cdt.internal.core.pdom.db.PDOMNodeLinkedList;
|
import org.eclipse.cdt.internal.core.pdom.db.PDOMNodeLinkedList;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.BindingCollector;
|
import org.eclipse.cdt.internal.core.pdom.dom.BindingCollector;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMMemberOwner;
|
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMMemberOwner;
|
||||||
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMASTAdapter;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMLinkage;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMName;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMName;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
||||||
|
@ -128,6 +129,7 @@ class PDOMCPPClassType extends PDOMCPPBinding implements ICPPClassType,
|
||||||
|
|
||||||
if (type instanceof ICPPClassType && !(type instanceof ProblemBinding)) {
|
if (type instanceof ICPPClassType && !(type instanceof ProblemBinding)) {
|
||||||
ICPPClassType ctype= (ICPPClassType) type;
|
ICPPClassType ctype= (ICPPClassType) type;
|
||||||
|
ctype= (ICPPClassType) PDOMASTAdapter.getAdapterIfAnonymous(ctype);
|
||||||
try {
|
try {
|
||||||
if (ctype.getKey() == getKey()) {
|
if (ctype.getKey() == getKey()) {
|
||||||
char[][] qname= ctype.getQualifiedNameCharArray();
|
char[][] qname= ctype.getQualifiedNameCharArray();
|
||||||
|
|
|
@ -24,8 +24,10 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPBinding;
|
||||||
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
|
import org.eclipse.cdt.core.dom.ast.cpp.ICPPDelegate;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDelegateCreator;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPDelegateCreator;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPEnumeration.CPPEnumerationDelegate;
|
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPEnumeration.CPPEnumerationDelegate;
|
||||||
|
import org.eclipse.cdt.internal.core.index.IIndexCPPBindingConstants;
|
||||||
import org.eclipse.cdt.internal.core.index.IIndexType;
|
import org.eclipse.cdt.internal.core.index.IIndexType;
|
||||||
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
import org.eclipse.cdt.internal.core.pdom.PDOM;
|
||||||
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMASTAdapter;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMBinding;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNode;
|
||||||
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError;
|
import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError;
|
||||||
|
@ -55,7 +57,7 @@ class PDOMCPPEnumeration extends PDOMCPPBinding
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getNodeType() {
|
public int getNodeType() {
|
||||||
return PDOMCPPLinkage.CPPENUMERATION;
|
return IIndexCPPBindingConstants.CPPENUMERATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerator[] getEnumerators() throws DOMException {
|
public IEnumerator[] getEnumerators() throws DOMException {
|
||||||
|
@ -111,6 +113,7 @@ class PDOMCPPEnumeration extends PDOMCPPBinding
|
||||||
if (type instanceof IEnumeration) {
|
if (type instanceof IEnumeration) {
|
||||||
if (type instanceof ICPPBinding) {
|
if (type instanceof ICPPBinding) {
|
||||||
ICPPBinding etype= (ICPPBinding) type;
|
ICPPBinding etype= (ICPPBinding) type;
|
||||||
|
etype= (ICPPBinding) PDOMASTAdapter.getAdapterIfAnonymous(etype);
|
||||||
char[][] qname = etype.getQualifiedNameCharArray();
|
char[][] qname = etype.getQualifiedNameCharArray();
|
||||||
return hasQualifiedName(qname, qname.length-1);
|
return hasQualifiedName(qname, qname.length-1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue