[jboss-user] [JBoss Microcontainer Development] New message: "Re: JBREFLECT-5 - Implementing generics in JavassistClassInfo"

Kabir Khan do-not-reply at jboss.com
Mon Mar 15 14:33:34 EDT 2010

User development,

A new message was posted in the thread "JBREFLECT-5 - Implementing generics in JavassistClassInfo":


Author  : Kabir Khan
Profile : http://community.jboss.org/people/kabir.khan@jboss.com

One thing I have been doing which might be unnecessary is to wrap things with wildcards with a delegating class, e.g.:
 * Type info for a wildcard type
 * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
 * @version $Revision: 1.1 $
public class WildcardTypeInfo extends DelegateClassInfo
   private static final long serialVersionUID = 1L;
   private final String name;
   public WildcardTypeInfo(String name, ClassInfo delegate)
      this.name = name;
   public void toShortString(JBossStringBuilder buffer)
   protected void toString(JBossStringBuilder buffer)

So if you try to get the typeInfo for Class<? extends some.Thing> we end up with a ParameterizedClassInfo for Class which contains one type argument. This type argument is for some.Thing. The original introspection implemetation would just use that directly. What I am doing now is to
get the TypeInfo for some.Thing (1) and decorate that with a WildcardTypeInfo that delegates to 1, but has the name '? extends some.Thing' which is ONLY used in these two cases:
* invoking toString(). 
* looking up the WildcardTypeInfo in the cache
This has been done for both implementations.
The reason I am unsure if this is needed after all is that I am currently implementing TypeVariables, e.g.:
public <T extends some.Thing> T signatureMethod()
If I were to wrap it, I would end up with 1 and wrapping that with a TypeVariableTypeInfo which overrides toString with 'T extends some.Thing'. The problem is that if we also have
public <U extends some.Thing> T signatureMethod2()
public <V extends some.Thing> T signatureMethod3()
We end up with 3 different cached versions with a different name used for toString(), which all delegate to 1.
The only reason I did this was to have nice output when calling toString(), so I am wondering if that is really necessary?


To reply to this message visit the message page: http://community.jboss.org/message/532084#532084

More information about the jboss-user mailing list