Можно ли вызвать плагин Kotlin noargs из командной строки или из Ant?
В Kotlin есть плагин компилятора noarg, который можно использовать для генерации синтетических конструкторов без аргументов для специально аннотированных классов. На странице документации четко объясняется, как использовать ее с Maven и Gradle, но неясно, можно ли ее использовать, или как ее использовать, либо из Ant, либо из kotlinc
в командной строке.
До сих пор я не смог заставить его работать. Вот мой NoArgs.kt
исходный файл:
package test
annotation class NoArgs
@NoArgs data class Test(val x: String, val y: String)
И вот некоторые командные строки, которые я пробовал, которые не имеют никакого эффекта:
$ kotlinc -verbose "-Xplugin:$KOTLIN_HOME/lib/noarg-compiler-plugin.jar -P plugin:org.jetbrains.kotlin.noarg:annotation=test.NoArgs NoArgs.kt
а также:
$ kotlinc -verbose "-Xplugin=$KOTLIN_HOME/lib/kotlin-annotation-processing.jar;$KOTLIN_HOME/lib/noarg-compiler-plugin.jar;$JRE_HOME/lib/tools.jar" -P plugin:org.jetbrains.kotlin.noarg:annotation=test.NoArgs NoArgs.kt
Когда я бегу $ javap test.Test
нет никаких доказательств сгенерированного конструктора без аргументов. Есть некоторые побочные доказательства того, что плагин вообще не работает, а также тот факт, что, если я добавлю мусор вместо слова- аннотации для опции -P, не будет сообщения об ошибке или изменения в поведении.
Если вы можете сказать мне, как заставить его работать с помощью kotlinc
или от муравья, я бы очень признателен!
1 ответ
Пожалуйста, проверьте путь к noarg-compiler-plugin.jar
файл. Это работает для меня (Kotlin 1.1.3-2 от Homebrew):
kotlinc-jvm -Xplugin=$KOTLIN_HOME/libexec/lib/noarg-compiler-plugin.jar -P plugin:org.jetbrains.kotlin.noarg:annotation=test.NoArgs NoArgs.kt
Compiled from "NoArgs.kt"
public final class test.Test {
public final java.lang.String getX();
public final java.lang.String getY();
public test.Test(java.lang.String, java.lang.String);
public final java.lang.String component1();
public final java.lang.String component2();
public final test.Test copy(java.lang.String, java.lang.String);
public static test.Test copy$default(test.Test, java.lang.String, java.lang.String, int, java.lang.Object);
public java.lang.String toString();
public int hashCode();
public boolean equals(java.lang.Object);
public test.Test();
}