const ではなく、Java アノテーションの引数として使用されている Kotlin プロパティを報告します。

たとえば、@JvmField アノテーション付きのプロパティにコンパイル時に評価できるイニシャライザーがあり、プリミティブ型または String 型を持っている場合が挙げられます。

Kotlin 1.1-1.2 のバイトコードでは、このようなプロパティは ConstantValue 属性を持っています。 この属性があれば、javac を使って対応するフィールドの使用箇所を折りたたみ、そのフィールドをアノテーション内で使用することができます。 これにより、Java と Kotlin が混在するコードでは、個別のコンパイルやインクリメンタルコンパイルの際に不正な動作が発生する可能性があります。 この動作は、Kotlin 1.3 で変更される予定です (ConstantValue 属性は廃止される予定です)。

例:

foo.kt ファイルの Kotlin コード:


  annotation class Ann(val s: String)
  @JvmField val importantString = "important"

Java コード:


  public class JavaUser {
      // これは危険です
      @Ann(s = FooKt.importantString)
      public void foo() {}
  }

この問題を修正するには、関連する Kotlin プロパティの @JvmField アノテーションを const 修飾子に置換するか、インライン化してください。