[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jdt-apt-dev] Fwd: About TypeDeclaration.getActualTypeArguments()

I have made sure that my code runs well under SUN apt, while JDT apt keep throwing
ClassCastException described here, this should be a bug of Eclipse JDT apt.

I suppose you need to write dedicated implementations for DeclaredType and all its subinterfaces,
including ClassType,InterfaceType and etc. Now they are implemented by their corrsponding
declaration implementation class, this seems incorrect.

--- Compl Yue Still <complystill@xxxxxxxxxxxx> wrote:

> Date: Sat, 10 Dec 2005 00:55:43 -0800 (PST)
> From: Compl Yue Still <complystill@xxxxxxxxxxxx>
> Subject: Fwd: About TypeDeclaration.getActualTypeArguments()
> To: jdt-apt-dev@xxxxxxxxxxx
> 
> In addition, I did search up the type hierarchy for the judgement, in a simular example, I was
> testing a field of type Set<Integer> vs Collection<Number> and been expecting it return true. I
> started with the DeclaredType for Set<Integer> and called getSuperinterfaces() on it to get the
> DeclaredType for Collection<Integer>, maybe the getSuperinterfaces() call removed the type
> parameter <Integer> and just returned the erased type Collection ??
> 
> --- Compl Yue Still <complystill@xxxxxxxxxxxx> wrote:
> 
> > Date: Sat, 10 Dec 2005 00:38:03 -0800 (PST)
> > From: Compl Yue Still <complystill@xxxxxxxxxxxx>
> > Subject: About TypeDeclaration.getActualTypeArguments()
> > To: jdt-apt-dev@xxxxxxxxxxx
> > 
> > Hello buddies,
> > 
> >    I met some problem with TypeDeclaration.getActualTypeArguments(), I don't know if my
> > understand
> > is correct that this invocation should return the concrete types substituting the formal type
> > parameters as possible.
> >    The last straw was that I called Types.isAssignable(TypeMirror, TypeMirror) with a type
> > parameter from the generic type of a field declaration, and ended up with a
> > ClassCastException:org.eclipse.jdt.apt.core.internal.declaration.TypeParameterDeclarationImpl
> > 
> >    After some dig, I found the implementation here:
> > 
> >     public Collection<TypeMirror> getActualTypeArguments()
> >     {
> >         final ITypeBinding type = getTypeBinding();
> >         final ITypeBinding[] typeArgs = type.getTypeArguments();
> >         if( typeArgs == null || typeArgs.length == 0 )
> >     		return Collections.emptyList();
> > 
> >         final Collection<TypeMirror> result = new ArrayList<TypeMirror>(typeArgs.length);
> >         for( ITypeBinding arg : typeArgs ){
> >             final TypeMirror mirror = Factory.createTypeMirror(arg, _env);
> >             if(arg == null)
> >                 result.add(Factory.createErrorClassType(arg));
> >             else
> >                 result.add(mirror);
> >         }
> > 
> >         return result;
> >     }
> > 
> >    Is this CORRECT? If it is, please any buddy tell me how to test that whether the type
> > parameter
> > of a field declaration is sub class of a specific one? Say, when processing annotations, how
> can
> > I
> > see whether a field is of type Set<? extends Collection>, but not a Set<String> ? In this case
> a
> > field of type Set<List> should return true while type Set<String> should return false.
> > 
> >    Thanks in advance to any hint!
> > 
> > Compl Yue Still
> > 
> > 
> > __________________________________________________
> > Do You Yahoo!?
> > Tired of spam?  Yahoo! Mail has the best spam protection around 
> > http://mail.yahoo.com 
> > 
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around 
> http://mail.yahoo.com 
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com