Hi All,

I am trying to use deferred binding to generate implementation in run-time 
and encountered with one problem. I created pretty simple generator and use 
GWT.create to instantiate a class. I am expecting GWT will provide class 
generated by my generator and it works as expected in dev mode. When I am 
trying to make same in production, for some reason GWT does not provide 
generated version. I have no idea what is wrong, maybe somebody have any 
ideas? Thanks in advance!  
*Class, modified by generator*

public class GeneratedInterface {

    public String getValue(){
        return null;
    }
}


*Generator*

public String generate(TreeLogger logger, GeneratorContext ctx, String 
requestedClass) throws UnableToCompleteException {
    JClassType type = ctx.getTypeOracle().findType(requestedClass);
    String packageName = type.getPackage().getName();
    String simpleName = type.getSimpleSourceName() + "_Generated";
    logger.log(TreeLogger.Type.INFO, "Create adapter " + packageName + "." + 
simpleName + " for " + type.getQualifiedSourceName());
    ClassSourceFileComposerFactory composer = new 
ClassSourceFileComposerFactory(packageName, simpleName);
    composer.setSuperclass(GeneratedInterface.class.getName());
    PrintWriter printWriter = ctx.tryCreate(logger, packageName, simpleName);
    String className = null;
    if (printWriter != null) {
        SourceWriter writer = composer.createSourceWriter(ctx, printWriter);
        writer.println("public String getValue() {");
        writer.println("    return \"Test interface\";");
        writer.println("}");
        writer.commit(logger);
        className = composer.getCreatedClassName();
    }
    return className;
}


*EntryPoint* 

public class GeneratorTest implements EntryPoint {


public void onModuleLoad() {
    GeneratedInterface intf = GWT.create(GeneratedInterface.class);
    log.info("deferred binding: " + intf.getClass().getName());
    log.info("Value = " + intf.getValue());

    }
}


*module.xml*

<generate-with class="com.xxx.xxx.gwt.generator.server.TestGenerator">
    <when-type-assignable 
class="com.xxx.xxx.gwt.generator.client.GeneratedInterface"/>
</generate-with>


As you can see, generator just provides implementation for 
GeneratedInterface.getValue() 

In case of dev mode, in logs I GWT uses generated class 
Thu Apr 02 15:14:23 MSK 2015 
com.hp.usage.gwt.generator.client.GeneratorTest INFO: deferred binding: 
com.hp.usage.gwt.generator.client.*GeneratedInterface_Generated*
Thu Apr 02 15:14:23 MSK 2015 
com.hp.usage.gwt.generator.client.GeneratorTest INFO: Value = Test interface

In case of production mode, in logs I GWT does not use generated class 
Thu Apr 02 15:15:53 GMT+300 2015 
com.hp.usage.gwt.generator.client.GeneratorTest INFO: deferred binding: 
com.hp.usage.gwt.generator.client.*GeneratedInterface*
Thu Apr 02 15:15:53 GMT+300 2015 
com.hp.usage.gwt.generator.client.GeneratorTest INFO: Value = null







-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-web-toolkit.
For more options, visit https://groups.google.com/d/optout.

Reply via email to