1

gwt で独自の遅延バインディング レイヤーを作成するカスタム ジェネレーターがありますが、生成されたコードを純粋な Java モジュールでも使用する必要があります。私の gwt ジェネレーターは、クラスの注釈に従って「現在のバインディング設定」を既に出力しているため、pure-Java インスタンス化子の同等のボイラープレートも生成する必要があります。

必要なのは、リンカ ステージまたはジェネレータ ステージで、生成されたファイルを作業用ソース パッケージに出力することだけです {Android ジェネレータが R.java に対して行うように}。Java ファイルをソース フォルダに任意に出力するにはどうすればよいですか? java.io.File を使用する必要がありますか? ユーザーが生成されたソースを必要とする場所を定義できるように、soyc のようなコンパイラ フラグを使用することをお勧めします。

4

1 に答える 1

0

誰も答えなかったので、このハックをそこに投げます。

StandardGeneratorContext$GeneratedUnitWithFile をオーバーライドします。探す:

  FileOutputStream fos = null;
  try {
    fos = new FileOutputStream(file);
    diskCache.transferToStream(sourceToken, fos);
  } 

追加

    File newFile = rebaseFile(file); // Make a copy wherever you need 
    diskCache.transferToStream(sourceToken, fos);

これを使用して、保存したファイルを必要に応じてリベースします。静的な ThreadLocal を使用して、コピーを保存する場所をジェネレーターに伝えることをお勧めします。これは、ジェネレータ サブシステムが StandardGeneratorContext で .finish() を呼び出したときに呼び出されます (通常は GWT.create の最後で)。コミットする保留中の PrintWriter がない限り、手動で呼び出すことができます。

于 2013-07-24T15:33:36.267 に答える