2016-09-16 5 views
0

コンパイラフラグ-XjsInteropMode JSを使用して移行しようとしていますが、問題が発生しました。GWT JsInterop migration

私はこのようになりますModuleと呼ばれるインタフェースを持っている:

@JsType 
public interface Module { 
    @JsProperty 
    String getBasename(); 
} 

その後、私が持っているこのようになりますAuthenticationModuleと呼ばれる別のインターフェイス:

@JsType 
public interface AuthenticationModule extends Module { 
    static final String MODULE_NAME = "authentication"; 

    void logIn(String username, String password, JsConsumer<JavaScriptObject> onSuccess, JsConsumer<JavaScriptObject> onError); 

    void logOut(JsConsumer<JavaScriptObject> onSuccess, JsConsumer<JavaScriptObject> onError); 
} 

モジュールインターフェースがちょうどマーカーインターフェイスで、そのため、モジュールをロードしていたときに、最終的には私が望むモジュールにキャストすることができました。例:

@Override 
    public void getAuthenticationModule(
      OnModuleLoaded<AuthenticationModule> onModuleLoaded) { 
     initializeIfNecessary(); 
     JsArrayString requiredModules = JavaScriptObject.createArray().cast(); 
     requiredModules.push(AuthenticationModule.MODULE_NAME); 
     modules.require(requiredModules, loadedModule -> { 
      onModuleLoaded.moduleLoaded((AuthenticationModule) loadedModule); // this line (the casting) throws ClassCastException 
     }); 
    } 
このコードで

modulesはこのようになります別のインターフェイスである: https://docs.google.com/document/d/10fmlEYIHcyead_4R1S5wKGs1t2I7Fnp_PaNaa7XTEk0/edit#

私はこの問題を解決することができませんでした:

@JsType 
public interface Modules { 
    @JsFunction 
    @FunctionalInterface 
    interface CallbackRequire { 
     void apply(Module module); 
    } 

    @JsProperty 
    String getBase(); 

    @JsProperty 
    void setBase(String base); 

    void require(JsArrayString modules, CallbackRequire onload); 
} 

私は、この文書に移行する方法についての規則に従いました。私が得られる最高のものは@JsType@JsType(isNative = true)に変更していた。その後、キャスティングは機能していましたが、別のエラーが発生しましたが、今思い出すことはできませんが、isNativeが本当にこの問題を解決する正しい方法かどうかはわかりません。

+0

どのGWTバージョンをお使いですか? GWT 2.8-beta? 'GWT 2.8-rc2'を使うようにしてください。また' XjsInteropMode JS'フラグが '-generateJsInteropExports'に改名されました。 –

+0

私は2.8.0-betaを持っていましたが、今度は2.8.0-rc2を試してみました。そして最後にXjsInteropMode 、しかし、私はそのClassCastExceptionを取得しています。マイ・ポストで指定したドキュメントを使用して移行したので、新しいフラグ「-generateJsInteropExports」が設定されています。両方のバージョンを新しいフラグで試しましたが、エラーは同じです。 –

+0

投稿を正確な例外で更新できますか? –

答えて

0

ほとんどのインターフェイスに "(isNative = true)"を追加すると、すべてが再び機能します。変更しなければならないのは、ネイティブJsTypeで初期化できないため、MODULE_NAMEフィールドだけです。

+1

'@ JsOverlay'は助けますか? –

+0

はい、できます!ありがとう!私は方法のためだと思った。 –