diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IType.java index c990b35efe6..23520d86f52 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IType.java @@ -13,7 +13,7 @@ package org.eclipse.cdt.core.dom.ast; /** * @author Doug Schaefer */ -public interface IType { +public interface IType extends Cloneable { + public Object clone(); - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeContainer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeContainer.java index a0849f2d3f7..10abf451c18 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeContainer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ITypeContainer.java @@ -21,4 +21,5 @@ import org.eclipse.cdt.core.dom.ast.IType; */ public interface ITypeContainer extends IType{ IType getType(); + void setType( IType type ); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CArrayType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CArrayType.java index 12e030620c9..9bee97581c8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CArrayType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CArrayType.java @@ -34,6 +34,10 @@ public class CArrayType implements ICArrayType, ITypeContainer { return type; } + public void setType( IType t ){ + this.type = t; + } + public void setModifiedArrayModifier(ICASTArrayModifier mod) { this.mod = mod; } @@ -78,4 +82,13 @@ public class CArrayType implements ICArrayType, ITypeContainer { return false; } + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java index 4edfd9fa04b..c79bb2b659c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CBasicType.java @@ -10,6 +10,7 @@ **********************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.c; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.c.ICASTSimpleDeclSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICBasicType; @@ -83,4 +84,14 @@ public class CBasicType implements ICBasicType { && cObj.isUnsigned() == this.isUnsigned() && cObj.isLongLong() == this.isLongLong()); } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumeration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumeration.java index 3069dbb903e..36d032611a8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumeration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CEnumeration.java @@ -17,6 +17,7 @@ package org.eclipse.cdt.internal.core.dom.parser.c; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IEnumeration; import org.eclipse.cdt.core.dom.ast.IScope; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.c.ICASTEnumerationSpecifier; /** @@ -54,4 +55,13 @@ public class CEnumeration implements IEnumeration { return CVisitor.getContainingScope( enumSpec ); } + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunction.java index 7ca3d368021..e1da1b9765e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunction.java @@ -16,11 +16,11 @@ import java.util.List; import org.eclipse.cdt.core.dom.ast.IASTDeclaration; import org.eclipse.cdt.core.dom.ast.IASTDeclarator; import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator; -import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; -import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IFunction; import org.eclipse.cdt.core.dom.ast.IFunctionType; import org.eclipse.cdt.core.dom.ast.IScope; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunctionType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunctionType.java index ee159f88d2d..81ca2d07025 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunctionType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CFunctionType.java @@ -59,4 +59,13 @@ public class CFunctionType implements IFunctionType { return parameters; } + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CPointerType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CPointerType.java index d6af183ef72..5bcda02c7e5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CPointerType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CPointerType.java @@ -64,4 +64,14 @@ public class CPointerType implements ICPointerType, ITypeContainer { public void setPointer(ICASTPointer pointer) { this.pointer = pointer; } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifiedPointerType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifiedPointerType.java index db88f8b11ff..8287df45fa8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifiedPointerType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifiedPointerType.java @@ -62,4 +62,14 @@ public class CQualifiedPointerType implements ICPointerType, ITypeContainer { if (mod == null || !(mod instanceof ICASTArrayModifier)) return false; return ((ICASTArrayModifier)mod).isVolatile(); } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifierType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifierType.java index 0e84fff8c79..35010961485 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifierType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CQualifierType.java @@ -82,4 +82,18 @@ public class CQualifierType implements ICQualifierType, ITypeContainer { return type; } + + public void setType( IType t ){ + type = t; + } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java index 791a506f7f0..12fcda95b02 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CStructure.java @@ -25,6 +25,7 @@ import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.ICompositeType; import org.eclipse.cdt.core.dom.ast.IField; import org.eclipse.cdt.core.dom.ast.IScope; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.c.ICASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.c.ICASTElaboratedTypeSpecifier; @@ -160,4 +161,14 @@ public class CStructure implements ICompositeType { public IScope getCompositeScope() { return (definition != null ) ? definition.getScope() : null; } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CTypeDef.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CTypeDef.java index 731f0a08ba8..56793609016 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CTypeDef.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/c/CTypeDef.java @@ -43,6 +43,10 @@ public class CTypeDef implements ITypedef, ITypeContainer { type = CVisitor.createType(name); return type; } + + public void setType( IType t ){ + type = t; + } /* (non-Javadoc) * @see org.eclipse.cdt.core.dom.ast.IBinding#getName() @@ -62,4 +66,13 @@ public class CTypeDef implements ITypedef, ITypeContainer { return CVisitor.getContainingScope( (IASTDeclaration) declarator.getParent() ); } + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPArrayType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPArrayType.java index ea857370007..99b1ef5dd53 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPArrayType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPArrayType.java @@ -32,10 +32,24 @@ public class CPPArrayType implements IArrayType, ITypeContainer { return type; } + public void setType( IType t ){ + this.type = t; + } + public boolean equals(Object obj) { if( obj instanceof IArrayType ){ return ((IArrayType) obj).getType().equals( type ); } return false; } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java index 5fdb16017ea..081bb8b0861 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPBasicType.java @@ -13,6 +13,7 @@ */ package org.eclipse.cdt.internal.core.dom.parser.cpp; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBasicType; /** @@ -77,4 +78,14 @@ public class CPPBasicType implements ICPPBasicType { public boolean isLong() { return ( qualifierBits & IS_LONG ) != 0; } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java index 313197de2f4..09820a846b0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPClassType.java @@ -26,11 +26,13 @@ import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IField; import org.eclipse.cdt.core.dom.ast.IScope; +import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPBase; 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.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; /** @@ -209,4 +211,22 @@ public class CPPClassType implements ICPPClassType { // TODO Auto-generated method stub return null; } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.dom.ast.cpp.ICPPClassType#getConstructors() + */ + public ICPPConstructor[] getConstructors() { + // TODO Auto-generated method stub + return null; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java index 154a371a2fc..a4f4871fa28 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPEnumeration.java @@ -18,6 +18,7 @@ import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IEnumeration; import org.eclipse.cdt.core.dom.ast.IScope; +import org.eclipse.cdt.core.dom.ast.IType; /** * @author aniefer @@ -58,5 +59,15 @@ public class CPPEnumeration implements IEnumeration { public IASTNode getPhysicalNode() { return enumSpecifier; } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionType.java index 695ea429dfc..922f4925dad 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPFunctionType.java @@ -40,7 +40,11 @@ public class CPPFunctionType implements IFunctionType { if( fps.length != parameters.length ) return false; - if( ! returnType.equals( ft.getReturnType() ) ) + + //constructors & destructors have null return type + if( ( returnType == null ) ^ ( ft.getReturnType() == null ) ) + return false; + else if( returnType != null && ! returnType.equals( ft.getReturnType() ) ) return false; for( int i = 0; i < parameters.length; i++ ) if( ! parameters[i].equals( fps[i] ) ) @@ -63,4 +67,13 @@ public class CPPFunctionType implements IFunctionType { return parameters; } + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java index 311048096d3..ef88ed1ab7e 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPPointerType.java @@ -59,6 +59,10 @@ public class CPPPointerType implements IPointerType, ITypeContainer { public IType getType() { return type; } + + public void setType( IType t ){ + type = t; + } /* (non-Javadoc) * @see org.eclipse.cdt.core.dom.ast.IPointerType#isConst() @@ -73,4 +77,14 @@ public class CPPPointerType implements IPointerType, ITypeContainer { public boolean isVolatile() { return ( operator != null ) ? operator.isVolatile() : false; } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPQualifierType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPQualifierType.java index 2b2bf31ddde..0657df472e0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPQualifierType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPQualifierType.java @@ -65,5 +65,18 @@ public class CPPQualifierType implements IQualifierType, ITypeContainer { public IType getType() { return type; } - + + public void setType( IType t ){ + type = t; + } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPReferenceType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPReferenceType.java index 26ec8c48f14..502bc8143d7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPReferenceType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPReferenceType.java @@ -16,11 +16,12 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.core.dom.ast.cpp.ICPPReferenceType; +import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer; /** * @author aniefer */ -public class CPPReferenceType implements ICPPReferenceType { +public class CPPReferenceType implements ICPPReferenceType, ITypeContainer { IType type = null; /** @@ -36,6 +37,10 @@ public class CPPReferenceType implements ICPPReferenceType { public IType getType() { return type; } + + public void setType( IType t ){ + type = t; + } public boolean equals(Object obj) { if( obj instanceof ICPPReferenceType ){ @@ -43,4 +48,14 @@ public class CPPReferenceType implements ICPPReferenceType { } return false; } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java index b1871156a52..630bfae21be 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPTypedef.java @@ -25,6 +25,8 @@ import org.eclipse.cdt.internal.core.dom.parser.ITypeContainer; */ public class CPPTypedef implements ITypedef, ITypeContainer { private IASTDeclarator declarator = null; + private IType type = null; + /** * @param declarator */ @@ -48,7 +50,13 @@ public class CPPTypedef implements ITypedef, ITypeContainer { * @see org.eclipse.cdt.core.dom.ast.ITypedef#getType() */ public IType getType() { - return CPPVisitor.createType( declarator ); + if( type == null ) + type = CPPVisitor.createType( declarator ); + return type; + } + + public void setType( IType t ){ + type = t; } /* (non-Javadoc) @@ -78,4 +86,14 @@ public class CPPTypedef implements ITypedef, ITypeContainer { public IASTNode getPhysicalNode() { return declarator; } + + public Object clone(){ + IType t = null; + try { + t = (IType) super.clone(); + } catch ( CloneNotSupportedException e ) { + //not going to happen + } + return t; + } }