I made a task which given:
A source dir, a source classpath, and destination dir,
A series of source interfaces and a new GWT name,
My task will generate all the GWT plumbing. Namely the Service interface, the ServiceAsync interface, and a Servlet Implementation. If you specify a delegate, the the servlet will implement the interface by calling the methods in the delegate.
Pretty sweet.
I learned a lot about how "Generic" info about classes can be obtained through the reflection API. You might think that all the type parameter stuff is erased, a-la
Section 4.6 of the Java spec., but it is all there in the class, available through reflection. On the other hand, this leads to a paradox, because the it's not supposed to be there.
For example, let's say you have:
public interface Foo{
List<String> someMethod();
}
The compiler halts with an error if you try to implement Foo with this class:
public class Bar implements Foo{
List<String> someMethod(){return new ArrayList<String>();}
}
Because the type parameter of the returned List<String> has been "erased", and the return type in the interface is actually just List.
But if you were using reflection to generate class source you would still find the <String> type parameter. So to get your implementation to compile, you must discard the Type info.
At least that's the way it seems to work :)