[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[jdt-apt-dev] About TypeDeclaration.getActualTypeArguments()
|
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