Kotlin1.9でlanguageVersion=2.0にした時に出たエラーを調べました。
enum内の可視性
enumのアノテーションからcompanion objectのprivateにアクセスする事が不可能になりました。
private enum class Version { @Deprecated(DEPRECATE_TEXT) VERSION_1, VERSION_2, ; companion object { private const val DEPRECATE_TEXT: String = "Old Version" } }
Javaのアノテーションとの互換性
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target( { ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR, ElementType.LOCAL_VARIABLE, ElementType.ANNOTATION_TYPE, ElementType.PACKAGE, ElementType.TYPE_PARAMETER, ElementType.TYPE_USE, ElementType.MODULE, } ) @Retention(RetentionPolicy.CLASS) public @interface TestJavaAnnotation { }
式に付けられなくなりました。 android.annotation.SuppressLint
とかで困ります。
object Test { init { @TestJavaAnnotation when(false) { true -> "true" false -> "false" } } }
式に付けるにはKotlinのAnnotationでEXPRESSIONを含む必要があります。
@Target(AnnotationTarget.EXPRESSION) @Retention(AnnotationRetention.SOURCE) annotation class TestAnnotation