2015-04-01 71 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; 

它開始按預期運行。