Remove mapping of java.Repeatable to kotlin.Repeatable in JavaAnnotationMapper
The main motivation for this change is that java.lang.annotation.Repeatable has a parameter for the container annotation, which is lost during conversion to kotlin.annotation.Repeatable. To support j.l.a.Repeatable in backend properly, it's absolutely necessary to be able to load the container annotation for any repeatable annotation class, so the original j.l.a.Repeatable needs to be stored in the descriptor and accessible from the backend. Instead of mapping j.l.a.Repeatable -> k.a.Repeatable, add a frontend service PlatformAnnotationFeaturesSupport that will determine if an annotation is repeatable "according to the platform rules", which for JVM means that it's annotated with j.l.a.Repeatable. Some effects of this change include: - Usages of j.l.a.Repeatable are no longer reported as "deprecated", the corresponding test is deleted - Usages of repeatable annotations declared in Java with non-SOURCE retention with LV 1.5 and earlier will now result in a slightly different error (REPEATED_ANNOTATION instead of NON_SOURCE_REPEATED_ANNOTATION) #KT-12794
This commit is contained in:
+2
-2
@@ -37,10 +37,10 @@ public @interface Source {
|
||||
|
||||
// FILE: usage.kt
|
||||
|
||||
@Runtime <!NON_SOURCE_REPEATED_ANNOTATION!>@Runtime<!>
|
||||
@Runtime <!REPEATED_ANNOTATION!>@Runtime<!>
|
||||
class UseRuntime
|
||||
|
||||
@Clazz <!NON_SOURCE_REPEATED_ANNOTATION!>@Clazz<!>
|
||||
@Clazz <!REPEATED_ANNOTATION!>@Clazz<!>
|
||||
class UseClazz
|
||||
|
||||
@Source @Source
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
package
|
||||
|
||||
@kotlin.annotation.Repeatable @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class Clazz : kotlin.Annotation {
|
||||
@java.lang.annotation.Repeatable(value = Clazz.Container::class) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class Clazz : kotlin.Annotation {
|
||||
public constructor Clazz()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
@@ -15,7 +15,7 @@ package
|
||||
}
|
||||
}
|
||||
|
||||
@kotlin.annotation.Repeatable @kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) public final annotation class Runtime : kotlin.Annotation {
|
||||
@java.lang.annotation.Repeatable(value = Runtime.Container::class) @kotlin.annotation.Retention(value = AnnotationRetention.RUNTIME) public final annotation class Runtime : kotlin.Annotation {
|
||||
public constructor Runtime()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
@@ -30,7 +30,7 @@ package
|
||||
}
|
||||
}
|
||||
|
||||
@kotlin.annotation.Repeatable @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Source : kotlin.Annotation {
|
||||
@java.lang.annotation.Repeatable(value = Source.Container::class) @kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class Source : kotlin.Annotation {
|
||||
public constructor Source()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
|
||||
Reference in New Issue
Block a user