Though we do not make a promise to process GWT.create() of entry point types before any other GWT.create() calls, it was easy to restore this behavior in incremental, so I went ahead and did it ( https://gwt-review.googlesource.com/#/c/10410/).
You should probably find a way not to depend on this in the future, as it is not promised and may change again. On Mon Nov 17 2014 at 2:07:02 PM Christopher Viel < [email protected]> wrote: > Hi, > > I'm gonna add some more background here. > > The generator generates a bunch of file and binds the interfaces using > GIN. I would't say this is strictly necessary, but it brings the advantages > of DI to the generated code. So we have an Entry Point that is an interface > and a rebind rule. UserAgentAsserter uses a similar technique. What we also > do is generate a Ginjector interface and put a > *GWT.create(GeneratedGinjector.class)* call inside the generated entry > point. That way GIN's generator is called after and everything should be > resolvable. The generated ginjector is setup to look at a specific property > to load additional gin modules. Here it happens that one of them is also > generated. So all of that actually work with 2.7. > > What no longer works is if the entry point and the ginjector are no longer > generated. If there is a GWT.create() call that resolves to a Ginjector > from an explicit entry point, it fails. I'm not sure I'm being very clear > here so here's an example: > > *MyModule.gwt.xml:* > <module> > <entry-point class="com.project.EntryPointToGenerate"/> > <entry-point class="com.project.ExplicitEntryPoint"/> > > <extend-configuration-property name="gin.ginjector.modules" > value="com.project.GeneratedGinModule"/> > > <generate-with class="com.project.EntryPointGenerator"> > <when-type-is class="com.project.EntryPointToGenerate"/> > </generate-with> > </module> > > *EntryPointToGenerate:* > public interface EntryPointToGenerate extends EntryPoint {} > > *EntryPointGenerator*: Generates *com.project.GeneratedGinModule* and an > implementation of *EntryPointToGenerate* > > *ExplicitEntryPoint*: > public class ExplicitEntryPoint implements EntryPoint { > private static final ExplicitGinjector GINJECTOR = GWT.create( > ExplicitGinjector.class); > > @Override > public void onModuleLoad() {} > } > > *ExplicitGinjector:* > @GinModules( value = ExplicitGinModule.class, properties = > "gin.ginjector.modules" ) > public interface ExplicitGinjector extends Ginjector { > /* snip */ > } > > With this code in a regular compilation, EntryPointToGenerate is generated > before ExplicitEntryPoint is traversed. With incremental compilation, > ExplicitEntryPoint is traversed (and incidentally GINs generator is called) > before EntryPointGenerator is called. I would expect the first entry point > to be traversed at first, even if it means calling a generator. > > On Sunday, November 16, 2014 3:56:20 PM UTC-5, Nicolas Morel wrote: >> >> Hi, >> >> I'm currently testing GWT 2.7.0-rc1 and one of my project using GWTP >> Rest-Dispatch <https://github.com/ArcBees/GWTP/wiki/Rest-Dispatch> is >> not working under SDM. >> The compilation fails with this error : >> >> [ERROR] Unable to load gin module type >> [com.gwtplatform.dispatch.rest.client.RestGinModule], maybe you haven't >> compiled your client java sources? >> java.lang.ClassNotFoundException: com$gwtplatform$dispatch$rest$ >> client$RestGinModule >> at com.google.gwt.inject.rebind.GinBridgeClassLoader.findClass( >> GinBridgeClassLoader.java:150) >> at java.lang.ClassLoader.loadClass(ClassLoader.java:424) >> at com.google.gwt.inject.rebind.GinBridgeClassLoader.loadClass( >> GinBridgeClassLoader.java:108) >> at java.lang.ClassLoader.loadClass(ClassLoader.java:357) >> at java.lang.Class.forName0(Native Method) >> at java.lang.Class.forName(Class.java:340) >> at com.google.gwt.inject.rebind.GinjectorGenerator.loadClass( >> GinjectorGenerator.java:223) >> at com.google.gwt.inject.rebind.GinjectorGenerator. >> getPropertyModuleClasses(GinjectorGenerator.java:137) >> at com.google.gwt.inject.rebind.GinjectorGenerator.getModuleClasses( >> GinjectorGenerator.java:116) >> at com.google.gwt.inject.rebind.GinjectorGenerator.generate( >> GinjectorGenerator.java:72) >> at com.google.gwt.core.ext.IncrementalGenerator.generateNonIncrementally( >> IncrementalGenerator.java:40) >> >> The full stack trace is available in attachment. >> >> The problem has been reported to the GWTP team here >> <https://github.com/ArcBees/GWTP/issues/614>. The "normal" compilation >> works but not the incremental compile from SDM. >> >> I made a simple example available here >> <https://github.com/nmorel/hello-gwt-rest-dispatch>. >> >> From what I saw, the RestGinModule that gin is trying to load is >> generated by a GWT generator (VelocityGenerator >> <https://github.com/ArcBees/GWTP/blob/master/gwtp-core/gwtp-dispatch-rest/src/main/java/com/gwtplatform/dispatch/rest/rebind/VelocityGenerator.java> >> .generateRestGinModule()) and passed to gin through the property >> "gin.ginjector.modules". >> It seems unconventional but was working before. >> Any ideas what is going on please ? >> >> >> >> -- > You received this message because you are subscribed to the Google Groups > "GWT Contributors" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/google-web-toolkit-contributors/57be9c00-e1f2-4c99-ad20-40c0c86943aa%40googlegroups.com > <https://groups.google.com/d/msgid/google-web-toolkit-contributors/57be9c00-e1f2-4c99-ad20-40c0c86943aa%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "GWT Contributors" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/google-web-toolkit-contributors/CAFw3gJ-r-Dc2Hgjpx8BCXwA6DWyxm2KzbcvKi-QhEF6O%2BBAOug%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
