0

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选项放置垃圾而不是单词注释,则不会出现错误消息或行为变化。

如果您能告诉我如何使用kotlincAnt 或从 Ant 运行它,我将不胜感激!

4

1 回答 1

1

请检查noarg-compiler-plugin.jar文件的路径。这对我有用(来自Homebrew的 Kotlin 1.1.3-2 ):

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();
}
于 2017-07-12T14:38:14.470 回答