2015-04-01 3 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

Это была недопустимая реализация в генераторе. Он возвращается нуль, когда класс был создан уже и из-за этого собственно версии использовались на некоторых перестановок только

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; 

Он начал работать, как ожидалось.

Смежные вопросы