2015-04-01 37 views
1

我正在尝试使用生成器实现延迟绑定。当我在dev模式下测试延迟绑定时,它会按预期工作,当我切换到生产延迟绑定时由于某种原因而不起作用。 我有以下类编译后GWT延迟绑定不工作

public class GeneratorTest implements EntryPoint { 

    //should be modified by generator 
    public static class GeneratorTestPrefs extends PreferencesImpl { 
... 
    } 
... 
} 

public class PreferencesImpl implements Preferences { 
... 
} 

public interface Preferences { 

    public void load(String key, Storage storage); 

    public void store(String key, Storage storage); 
} 

而在GWT module.xml以下定义

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

我添加日志由

GeneratorTestPrefs prefs = GWT.create(GeneratorTestPrefs.class) 

建立在开发模式情况下的类,在日志文件,我看到GWT 正在使用由发电机创建的类(GeneratorTestPrefs_PreferencesAdapter

[java] INFO: deferred binding: com.xxx.xxx.gwt.generator.client.GeneratorTestPrefs_PreferencesAdapter 

在生产模式下,在日志文件中,我看到GWT 被不使用的发电机产生类(GeneratorTest $ GeneratorTestPrefs

Wed Apr 01 15:48:06 GMT+300 2015 com.xxx.xxx.gwt.generator.client.GeneratorTest INFO: deferred binding: com.xxx.xxx.gwt.generator.client.GeneratorTest$GeneratorTestPrefs 

我不知道是什么是错的。我错过了什么吗?难道我做错了什么?

预先感谢您!

回答

0

这是发生器中的无效实现。它返回null时已经生成类,因为它的正确版本进行一些置换只使用

public String generate(TreeLogger logger, .....) ...{ 
    String className = null; 
    if (printWriter != null) { 
     SourceWriter writer = composer.createSourceWriter(ctx, printWriter); 
     .... 
     className = composer.getCreatedClassName(); 
    } 
    return className; 
} 

当我改变

String className = packageName + "." + simpleName; 

它开始按预期运行。