2016-02-02 15 views
19

私はコンパイル時にJavaファイルの束を生成するJavaアノテーションプロセッサを持っています。私は、生成されたクラスを拡張メソッドを追加することでkotlinで使いやすくしたいと考えています。私はkotlinフォーラムで、私の拡張機能を含むkotlinファイルを書くことが試みられると言われました。これを試してみましたが、Filerオブジェクトを使用してこのファイルを作成し、StandardLocations.SOURCE_OUTPUTディレクトリに出力しました。 Intellijは私の生成クラスを見ることができ、意図したように拡張機能を使うことができますが、コンパイラは新しいkotlinファイルを見つけることができないので、アプリケーションはコンパイルされません。 kotlinコンパイラで取り上げられる新しいkotlinファイルを書く方法はありますか?注釈プロセッサからkotlinファイルを生成する方法は?

+0

あなたのアプリケーションをコンパイルする方法を正確に? – yole

+0

kotlin-android gradleプラグインを使用しています。申し訳ありませんが、それはかなり重要な詳細です。 –

+0

問題を示すサンプルプロジェクトを投稿できますか? – miensol

答えて

2

kaptの場合は、経由でソースフォルダを取得できます。

Map<String, String> options = processingEnv.getOptions(); 
       String generatedPath = options.get("kapt.kotlin.generated"); 

String path = generatedPath 
        .replaceAll("(.*)tmp(/kapt/debug/)kotlinGenerated", 
          "$1generated/source$2"); 

残念ながら、それはkapt2のために動作しない(問題KT-14070を参照)

また、リソースライター

Writer w = processingEnv.getFiler().createResource(SOURCE_OUTPUT, "package_name", "Sample.kt") 

経由.ktファイルを作成することができますしかし、今のところ、あなたは二回コンパイラを起動する必要がありますcompileDebugKotlinタスクが実行される前にcompileDebugJavaWithJavacタスクによってjavaxアノテーションプロセッサが呼び出される)

0

ファイルを適切なパッケージあなたのbuild.gradleからsrc/build/generated-src/kotlin/your/package/File.kt

と、これを追加のようなディレクトリに電子名):

sourceSets { 
    main.java.srcDirs += 'build/generated-src/kotlin' 
} 
関連する問題