Можно ли вызвать плагин 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();
}
Другие вопросы по тегам