diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java index 42257451015..0841328dbda 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AnnotationCodegen.java @@ -189,6 +189,7 @@ public abstract class AnnotationCodegen { static { annotationTargetMap.put(KotlinTarget.CLASSIFIER, ElementType.TYPE); + annotationTargetMap.put(KotlinTarget.CLASS, ElementType.TYPE); annotationTargetMap.put(KotlinTarget.ANNOTATION_CLASS, ElementType.ANNOTATION_TYPE); annotationTargetMap.put(KotlinTarget.CONSTRUCTOR, ElementType.CONSTRUCTOR); annotationTargetMap.put(KotlinTarget.LOCAL_VARIABLE, ElementType.LOCAL_VARIABLE); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt index 4a2f879ded7..4bd22c9222d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt @@ -204,7 +204,7 @@ public class AnnotationChecker(private val additionalCheckers: Iterable>( ENUM_KEYWORD to EnumSet.of(ENUM_CLASS), - ABSTRACT_KEYWORD to EnumSet.of(CLASS, LOCAL_CLASS, INNER_CLASS, INTERFACE, MEMBER_PROPERTY, MEMBER_FUNCTION), - OPEN_KEYWORD to EnumSet.of(CLASS, LOCAL_CLASS, INNER_CLASS, INTERFACE, MEMBER_PROPERTY, MEMBER_FUNCTION), - FINAL_KEYWORD to EnumSet.of(CLASS, LOCAL_CLASS, INNER_CLASS, ENUM_CLASS, OBJECT, MEMBER_PROPERTY, MEMBER_FUNCTION), - SEALED_KEYWORD to EnumSet.of(CLASS, LOCAL_CLASS, INNER_CLASS), + ABSTRACT_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INNER_CLASS, INTERFACE, MEMBER_PROPERTY, MEMBER_FUNCTION), + OPEN_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INNER_CLASS, INTERFACE, MEMBER_PROPERTY, MEMBER_FUNCTION), + FINAL_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INNER_CLASS, ENUM_CLASS, OBJECT, MEMBER_PROPERTY, MEMBER_FUNCTION), + SEALED_KEYWORD to EnumSet.of(CLASS_ONLY, LOCAL_CLASS, INNER_CLASS), INNER_KEYWORD to EnumSet.of(INNER_CLASS), OVERRIDE_KEYWORD to EnumSet.of(MEMBER_PROPERTY, MEMBER_FUNCTION), - PRIVATE_KEYWORD to EnumSet.of(CLASSIFIER, MEMBER_FUNCTION, TOP_LEVEL_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, + PRIVATE_KEYWORD to EnumSet.of(CLASS, CLASSIFIER, MEMBER_FUNCTION, TOP_LEVEL_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, MEMBER_PROPERTY, TOP_LEVEL_PROPERTY, CONSTRUCTOR), - PUBLIC_KEYWORD to EnumSet.of(CLASSIFIER, MEMBER_FUNCTION, TOP_LEVEL_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, + PUBLIC_KEYWORD to EnumSet.of(CLASS, CLASSIFIER, MEMBER_FUNCTION, TOP_LEVEL_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, MEMBER_PROPERTY, TOP_LEVEL_PROPERTY, CONSTRUCTOR), - INTERNAL_KEYWORD to EnumSet.of(CLASSIFIER, MEMBER_FUNCTION, TOP_LEVEL_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, + INTERNAL_KEYWORD to EnumSet.of(CLASS, CLASSIFIER, MEMBER_FUNCTION, TOP_LEVEL_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, MEMBER_PROPERTY, TOP_LEVEL_PROPERTY, CONSTRUCTOR), - PROTECTED_KEYWORD to EnumSet.of(CLASSIFIER, MEMBER_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, MEMBER_PROPERTY, CONSTRUCTOR), + PROTECTED_KEYWORD to EnumSet.of(CLASS, CLASSIFIER, MEMBER_FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, MEMBER_PROPERTY, CONSTRUCTOR), IN_KEYWORD to EnumSet.of(TYPE_PARAMETER, TYPE_PROJECTION), OUT_KEYWORD to EnumSet.of(TYPE_PARAMETER, TYPE_PROJECTION), REIFIED_KEYWORD to EnumSet.of(TYPE_PARAMETER), VARARG_KEYWORD to EnumSet.of(VALUE_PARAMETER, PROPERTY_PARAMETER), COMPANION_KEYWORD to EnumSet.of(OBJECT), LATE_INIT_KEYWORD to EnumSet.of(MEMBER_PROPERTY), - DATA_KEYWORD to EnumSet.of(CLASSIFIER), + DATA_KEYWORD to EnumSet.of(CLASS, CLASSIFIER), INLINE_KEYWORD to EnumSet.of(FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, PROPERTY), NOINLINE_KEYWORD to EnumSet.of(VALUE_PARAMETER), TAILREC_KEYWORD to EnumSet.of(FUNCTION), @@ -75,10 +75,10 @@ public object ModifierCheckerCore { ) private val possibleParentTargetMap = mapOf>( - INNER_KEYWORD to EnumSet.of(CLASS, INNER_CLASS, LOCAL_CLASS, ENUM_CLASS, ENUM_ENTRY), - OVERRIDE_KEYWORD to EnumSet.of(CLASSIFIER, ENUM_ENTRY), - PROTECTED_KEYWORD to EnumSet.of(CLASSIFIER, ENUM_ENTRY), - COMPANION_KEYWORD to EnumSet.of(CLASS, ENUM_CLASS, INTERFACE) + INNER_KEYWORD to EnumSet.of(CLASS_ONLY, INNER_CLASS, LOCAL_CLASS, ENUM_CLASS, ENUM_ENTRY), + OVERRIDE_KEYWORD to EnumSet.of(CLASS, CLASSIFIER, ENUM_ENTRY), + PROTECTED_KEYWORD to EnumSet.of(CLASS, CLASSIFIER, ENUM_ENTRY), + COMPANION_KEYWORD to EnumSet.of(CLASS_ONLY, ENUM_CLASS, INTERFACE) ) // First modifier in pair should be also first in declaration diff --git a/compiler/testData/cli/js/diagnosticForUnhandledElements.kt b/compiler/testData/cli/js/diagnosticForUnhandledElements.kt index ee924501143..24ca9eec9c9 100644 --- a/compiler/testData/cli/js/diagnosticForUnhandledElements.kt +++ b/compiler/testData/cli/js/diagnosticForUnhandledElements.kt @@ -1,6 +1,6 @@ package foo -@Target(AnnotationTarget.CLASSIFIER, AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION) +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.EXPRESSION) annotation class fancy @fancy diff --git a/compiler/testData/compileJavaAgainstKotlin/targets/classifier.kt b/compiler/testData/compileJavaAgainstKotlin/targets/classifier.kt index 1abd6a2338c..1fc67242405 100644 --- a/compiler/testData/compileJavaAgainstKotlin/targets/classifier.kt +++ b/compiler/testData/compileJavaAgainstKotlin/targets/classifier.kt @@ -1,4 +1,4 @@ package test -@Target(AnnotationTarget.CLASSIFIER) +@Target(AnnotationTarget.CLASS) annotation class classifier \ No newline at end of file diff --git a/compiler/testData/compileJavaAgainstKotlin/targets/classifier.txt b/compiler/testData/compileJavaAgainstKotlin/targets/classifier.txt index ada0e61f661..5aee56a7af8 100644 --- a/compiler/testData/compileJavaAgainstKotlin/targets/classifier.txt +++ b/compiler/testData/compileJavaAgainstKotlin/targets/classifier.txt @@ -1,5 +1,5 @@ package test -kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASSIFIER}) kotlin.annotation.annotation() public final class classifier : kotlin.Annotation { +kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) kotlin.annotation.annotation() public final class classifier : kotlin.Annotation { public constructor classifier() } diff --git a/compiler/testData/compileJavaAgainstKotlin/targets/multiple.kt b/compiler/testData/compileJavaAgainstKotlin/targets/multiple.kt index c3bdf7c5f57..1936ca86869 100644 --- a/compiler/testData/compileJavaAgainstKotlin/targets/multiple.kt +++ b/compiler/testData/compileJavaAgainstKotlin/targets/multiple.kt @@ -1,4 +1,4 @@ package test -@Target(AnnotationTarget.CLASSIFIER, AnnotationTarget.FUNCTION) +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) annotation class multiple diff --git a/compiler/testData/compileJavaAgainstKotlin/targets/multiple.txt b/compiler/testData/compileJavaAgainstKotlin/targets/multiple.txt index aa86bd06252..c02f5a7984c 100644 --- a/compiler/testData/compileJavaAgainstKotlin/targets/multiple.txt +++ b/compiler/testData/compileJavaAgainstKotlin/targets/multiple.txt @@ -1,5 +1,5 @@ package test -kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASSIFIER, AnnotationTarget.FUNCTION}) kotlin.annotation.annotation() public final class multiple : kotlin.Annotation { +kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FUNCTION}) kotlin.annotation.annotation() public final class multiple : kotlin.Annotation { public constructor multiple() } diff --git a/compiler/testData/diagnostics/tests/annotations/atAnnotationResolve.kt b/compiler/testData/diagnostics/tests/annotations/atAnnotationResolve.kt index b89137da40b..4be1de7ca30 100644 --- a/compiler/testData/diagnostics/tests/annotations/atAnnotationResolve.kt +++ b/compiler/testData/diagnostics/tests/annotations/atAnnotationResolve.kt @@ -1,5 +1,5 @@ // !DIAGNOSTICS: -UNUSED_PARAMETER -@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASSIFIER, +@Target(AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.EXPRESSION, AnnotationTarget.PROPERTY) @Retention(AnnotationRetention.SOURCE) diff --git a/compiler/testData/diagnostics/tests/annotations/atAnnotationResolve.txt b/compiler/testData/diagnostics/tests/annotations/atAnnotationResolve.txt index 5f63f2dcbb7..7615f458799 100644 --- a/compiler/testData/diagnostics/tests/annotations/atAnnotationResolve.txt +++ b/compiler/testData/diagnostics/tests/annotations/atAnnotationResolve.txt @@ -10,7 +10,7 @@ Ann(x = 1) Ann(x = 2) Ann(x = 3) private final class A { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } -kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE, AnnotationTarget.CLASSIFIER, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.EXPRESSION, AnnotationTarget.PROPERTY}) kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) kotlin.annotation.Repeatable() kotlin.annotation.annotation() public final class Ann : kotlin.Annotation { +kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE, AnnotationTarget.CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.EXPRESSION, AnnotationTarget.PROPERTY}) kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) kotlin.annotation.Repeatable() kotlin.annotation.annotation() public final class Ann : kotlin.Annotation { public constructor Ann(/*0*/ x: kotlin.Int = ...) public final val x: kotlin.Int public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean diff --git a/compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt b/compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt index eb25fb89bee..b89c9ada80f 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt +++ b/compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.kt @@ -1,7 +1,7 @@ import java.lang.annotation.* @java.lang.annotation.Target(ElementType.PACKAGE) -@Target(AnnotationTarget.CLASSIFIER) +@Target(AnnotationTarget.CLASS) annotation class my @java.lang.annotation.Retention(RetentionPolicy.SOURCE) diff --git a/compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.txt b/compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.txt index e2922a60111..9f85cbbe83c 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.txt +++ b/compiler/testData/diagnostics/tests/annotations/options/javaKotlinTargetRetention.txt @@ -1,6 +1,6 @@ package -java.lang.annotation.Target(value = {ElementType.PACKAGE}) kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASSIFIER}) kotlin.annotation.annotation() public final class my : kotlin.Annotation { +java.lang.annotation.Target(value = {ElementType.PACKAGE}) kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) kotlin.annotation.annotation() public final class my : kotlin.Annotation { public constructor my() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/annotations/options/target.kt b/compiler/testData/diagnostics/tests/annotations/options/target.kt index 489a1317d1a..100f5def653 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/target.kt +++ b/compiler/testData/diagnostics/tests/annotations/options/target.kt @@ -1,4 +1,4 @@ -@Target(AnnotationTarget.CLASSIFIER) +@Target(AnnotationTarget.CLASS) annotation class base @base data class My diff --git a/compiler/testData/diagnostics/tests/annotations/options/target.txt b/compiler/testData/diagnostics/tests/annotations/options/target.txt index 253d52a70d5..31e9e650e09 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/target.txt +++ b/compiler/testData/diagnostics/tests/annotations/options/target.txt @@ -8,7 +8,7 @@ base() kotlin.data() public final class My { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } -kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASSIFIER}) kotlin.annotation.annotation() public final class base : kotlin.Annotation { +kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) kotlin.annotation.annotation() public final class base : kotlin.Annotation { public constructor base() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/annotations/options/targets/classifier.kt b/compiler/testData/diagnostics/tests/annotations/options/targets/classifier.kt index cd28f0b8307..348832ec0df 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/targets/classifier.kt +++ b/compiler/testData/diagnostics/tests/annotations/options/targets/classifier.kt @@ -1,5 +1,5 @@ // !DIAGNOSTICS: -UNUSED_PARAMETER -@Target(AnnotationTarget.CLASSIFIER) annotation class base +@Target(AnnotationTarget.CLASS) annotation class base @base annotation class derived diff --git a/compiler/testData/diagnostics/tests/annotations/options/targets/classifier.txt b/compiler/testData/diagnostics/tests/annotations/options/targets/classifier.txt index dfd9d3b83d6..30f5096be5f 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/targets/classifier.txt +++ b/compiler/testData/diagnostics/tests/annotations/options/targets/classifier.txt @@ -22,7 +22,7 @@ base() public final enum class My : kotlin.Enum { public final /*synthesized*/ fun values(): kotlin.Array } -kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASSIFIER}) kotlin.annotation.annotation() public final class base : kotlin.Annotation { +kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) kotlin.annotation.annotation() public final class base : kotlin.Annotation { public constructor base() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/annotations/options/targets/java.txt b/compiler/testData/diagnostics/tests/annotations/options/targets/java.txt index 4b5a7a9e96f..579aa17ab2a 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/targets/java.txt +++ b/compiler/testData/diagnostics/tests/annotations/options/targets/java.txt @@ -64,7 +64,7 @@ package test { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } - kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASSIFIER, AnnotationTarget.FILE}) public final class type : kotlin.Annotation { + kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FILE}) public final class type : kotlin.Annotation { public constructor type() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/annotations/options/targets/nested.kt b/compiler/testData/diagnostics/tests/annotations/options/targets/nested.kt index 33c996616b6..57694f7a6e5 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/targets/nested.kt +++ b/compiler/testData/diagnostics/tests/annotations/options/targets/nested.kt @@ -1,4 +1,4 @@ -@Target(AnnotationTarget.CLASSIFIER) +@Target(AnnotationTarget.CLASS) annotation class base @Target(AnnotationTarget.ANNOTATION_CLASS) diff --git a/compiler/testData/diagnostics/tests/annotations/options/targets/nested.txt b/compiler/testData/diagnostics/tests/annotations/options/targets/nested.txt index ed40a6f6185..0cb54878d2e 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/targets/nested.txt +++ b/compiler/testData/diagnostics/tests/annotations/options/targets/nested.txt @@ -22,7 +22,7 @@ base() public final class Outer { } } -kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASSIFIER}) kotlin.annotation.annotation() public final class base : kotlin.Annotation { +kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) kotlin.annotation.annotation() public final class base : kotlin.Annotation { public constructor base() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int diff --git a/compiler/testData/loadJava/compiledJava/annotations/AnnotationTargets.txt b/compiler/testData/loadJava/compiledJava/annotations/AnnotationTargets.txt index 7dacabd815a..c14d2db1db2 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/AnnotationTargets.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/AnnotationTargets.txt @@ -39,7 +39,7 @@ public open class AnnotationTargets { public constructor parameter() } - kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASSIFIER, AnnotationTarget.FILE}) public final class type : kotlin.Annotation { + kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS, AnnotationTarget.FILE}) public final class type : kotlin.Annotation { public constructor type() } } diff --git a/compiler/testData/loadJava/compiledKotlin/annotations/TargetedAnnotation.kt b/compiler/testData/loadJava/compiledKotlin/annotations/TargetedAnnotation.kt index 100387765f2..c1024dcdb26 100644 --- a/compiler/testData/loadJava/compiledKotlin/annotations/TargetedAnnotation.kt +++ b/compiler/testData/loadJava/compiledKotlin/annotations/TargetedAnnotation.kt @@ -2,5 +2,5 @@ package test -@Target(AnnotationTarget.CLASSIFIER) +@Target(AnnotationTarget.CLASS) public annotation class TargetedAnnotation diff --git a/compiler/testData/loadJava/compiledKotlin/annotations/TargetedAnnotation.txt b/compiler/testData/loadJava/compiledKotlin/annotations/TargetedAnnotation.txt index 31954a15408..13d7e2628f2 100644 --- a/compiler/testData/loadJava/compiledKotlin/annotations/TargetedAnnotation.txt +++ b/compiler/testData/loadJava/compiledKotlin/annotations/TargetedAnnotation.txt @@ -1,5 +1,5 @@ package test -kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASSIFIER}) kotlin.annotation.annotation() public final class TargetedAnnotation : kotlin.Annotation { +kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) kotlin.annotation.annotation() public final class TargetedAnnotation : kotlin.Annotation { /*primary*/ public constructor TargetedAnnotation() } diff --git a/core/builtins/src/kotlin/annotation/Annotations.kt b/core/builtins/src/kotlin/annotation/Annotations.kt index 1d2c477c355..6836194df73 100644 --- a/core/builtins/src/kotlin/annotation/Annotations.kt +++ b/core/builtins/src/kotlin/annotation/Annotations.kt @@ -22,6 +22,7 @@ package kotlin.annotation public enum class AnnotationTarget { /** Class, interface or object, annotation class is also included */ CLASSIFIER, + CLASS, /** Annotation class only */ ANNOTATION_CLASS, /** Generic type parameter (unsupported yet) */ diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/JavaAnnotationMapper.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/JavaAnnotationMapper.kt index a24577a94d4..4952a94fc92 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/JavaAnnotationMapper.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/components/JavaAnnotationMapper.kt @@ -156,7 +156,7 @@ class JavaRetentionAnnotationDescriptor( public object JavaAnnotationTargetMapper { private val targetNameLists = mapOf("PACKAGE" to EnumSet.noneOf(KotlinTarget::class.java), - "TYPE" to EnumSet.of(KotlinTarget.CLASSIFIER, KotlinTarget.FILE), + "TYPE" to EnumSet.of(KotlinTarget.CLASS, KotlinTarget.FILE), "ANNOTATION_TYPE" to EnumSet.of(KotlinTarget.ANNOTATION_CLASS), "TYPE_PARAMETER" to EnumSet.of(KotlinTarget.TYPE_PARAMETER), "FIELD" to EnumSet.of(KotlinTarget.FIELD), diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/KotlinTarget.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/KotlinTarget.kt index cfaeb87f3aa..fc57310ff74 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/KotlinTarget.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/KotlinTarget.kt @@ -24,7 +24,8 @@ import java.util.* // NOTE: this enum must have the same entries with kotlin.annotation.AnnotationTarget, // and may also have some additional entries public enum class KotlinTarget(val description: String, val isDefault: Boolean = true) { - CLASSIFIER("classifier"), // includes CLASS, OBJECT, INTERFACE, *_CLASS but not ENUM_ENTRY + CLASSIFIER("class"), // deprecated: migrates to CLASS + CLASS("class"), // includes CLASS_ONLY, OBJECT, INTERFACE, *_CLASS but not ENUM_ENTRY ANNOTATION_CLASS("annotation class"), TYPE_PARAMETER("type parameter", false), PROPERTY("property"), // includes *_PROPERTY, PROPERTY_PARAMETER, ENUM_ENTRY @@ -43,7 +44,7 @@ public enum class KotlinTarget(val description: String, val isDefault: Boolean = STAR_PROJECTION("star projection", false), PROPERTY_PARAMETER("property constructor parameter", false), - CLASS("class", false), + CLASS_ONLY("class", false), // includes only top level classes and nested classes (but not enums, objects, interfaces, inner or local classes) OBJECT("object", false), INTERFACE("interface", false), ENUM_CLASS("enum class", false), @@ -79,25 +80,25 @@ public enum class KotlinTarget(val description: String, val isDefault: Boolean = public val ALL_TARGET_SET: Set = values().toSet() public fun classActualTargets(descriptor: ClassDescriptor): List = when (descriptor.kind) { - ClassKind.ANNOTATION_CLASS -> listOf(ANNOTATION_CLASS, CLASSIFIER) + ClassKind.ANNOTATION_CLASS -> listOf(ANNOTATION_CLASS, CLASS, CLASSIFIER) ClassKind.CLASS -> if (descriptor.isInner) { - listOf(INNER_CLASS, CLASSIFIER) + listOf(INNER_CLASS, CLASS, CLASSIFIER) } else if (DescriptorUtils.isLocal(descriptor)) { - listOf(LOCAL_CLASS, CLASSIFIER) + listOf(LOCAL_CLASS, CLASS, CLASSIFIER) } else { - listOf(CLASS, CLASSIFIER) + listOf(CLASS_ONLY, CLASS, CLASSIFIER) } - ClassKind.OBJECT -> listOf(OBJECT, CLASSIFIER) - ClassKind.INTERFACE -> listOf(INTERFACE, CLASSIFIER) + ClassKind.OBJECT -> listOf(OBJECT, CLASS, CLASSIFIER) + ClassKind.INTERFACE -> listOf(INTERFACE, CLASS, CLASSIFIER) ClassKind.ENUM_CLASS -> if (DescriptorUtils.isLocal(descriptor)) { - listOf(LOCAL_CLASS, CLASSIFIER) + listOf(LOCAL_CLASS, CLASS, CLASSIFIER) } else { - listOf(ENUM_CLASS, CLASSIFIER) + listOf(ENUM_CLASS, CLASS, CLASSIFIER) } ClassKind.ENUM_ENTRY -> listOf(ENUM_ENTRY, PROPERTY, FIELD) } diff --git a/idea/testData/decompiler/decompiledText/Annotations/Dependency.kt b/idea/testData/decompiler/decompiledText/Annotations/Dependency.kt index 65918ca39aa..b35e436e5c4 100644 --- a/idea/testData/decompiler/decompiledText/Annotations/Dependency.kt +++ b/idea/testData/decompiler/decompiledText/Annotations/Dependency.kt @@ -1,13 +1,13 @@ package dependency -@Target(AnnotationTarget.CLASSIFIER, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.TYPE) annotation class A(val s: String) -@Target(AnnotationTarget.CLASSIFIER, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.TYPE) annotation class B(val i: Int) -@Target(AnnotationTarget.CLASSIFIER, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, +@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER) annotation class C diff --git a/idea/testData/decompiler/stubBuilder/Annotations/Annotations.kt b/idea/testData/decompiler/stubBuilder/Annotations/Annotations.kt index 856bf16e199..5a3d55d0c47 100644 --- a/idea/testData/decompiler/stubBuilder/Annotations/Annotations.kt +++ b/idea/testData/decompiler/stubBuilder/Annotations/Annotations.kt @@ -27,10 +27,10 @@ a public class Annotations private @a constructor(private @property:a @param:a v @Target(AnnotationTarget.PROPERTY, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FUNCTION, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER, - AnnotationTarget.TYPE, AnnotationTarget.CLASSIFIER) + AnnotationTarget.TYPE, AnnotationTarget.CLASS) annotation class a -@Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASSIFIER, +@Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS, AnnotationTarget.CONSTRUCTOR, AnnotationTarget.TYPE) @Retention(AnnotationRetention.SOURCE) @Repeatable diff --git a/idea/testData/highlighter/Annotations.kt b/idea/testData/highlighter/Annotations.kt index 42faf285288..264d1948577 100644 --- a/idea/testData/highlighter/Annotations.kt +++ b/idea/testData/highlighter/Annotations.kt @@ -1,4 +1,4 @@ -@Target(AnnotationTarget.CLASSIFIER, AnnotationTarget.EXPRESSION) +@Target(AnnotationTarget.CLASS, AnnotationTarget.EXPRESSION) annotation class Ann @Ann class A