Introduction of AnnotationTarget.CLASS as a replacement for CLASSIFIER (first step)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -204,7 +204,7 @@ public class AnnotationChecker(private val additionalCheckers: Iterable<Addition
|
||||
}
|
||||
|
||||
private object TargetLists {
|
||||
val T_CLASSIFIER = targetList(CLASSIFIER)
|
||||
val T_CLASSIFIER = targetList(CLASS, CLASSIFIER)
|
||||
|
||||
val T_LOCAL_VARIABLE = targetList(LOCAL_VARIABLE) {
|
||||
onlyWithUseSiteTarget(PROPERTY, FIELD, PROPERTY_GETTER, PROPERTY_SETTER, VALUE_PARAMETER)
|
||||
|
||||
@@ -39,26 +39,26 @@ public object ModifierCheckerCore {
|
||||
|
||||
private val possibleTargetMap = mapOf<JetModifierKeywordToken, Set<KotlinTarget>>(
|
||||
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<JetModifierKeywordToken, Set<KotlinTarget>>(
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package test
|
||||
|
||||
@Target(AnnotationTarget.CLASSIFIER)
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
annotation class classifier
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
package test
|
||||
|
||||
@Target(AnnotationTarget.CLASSIFIER, AnnotationTarget.FUNCTION)
|
||||
@Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION)
|
||||
annotation class multiple
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
import java.lang.annotation.*
|
||||
|
||||
<!DEPRECATED_JAVA_ANNOTATION!>@java.lang.annotation.Target(ElementType.PACKAGE)<!>
|
||||
@Target(AnnotationTarget.CLASSIFIER)
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
annotation class my
|
||||
|
||||
<!DEPRECATED_JAVA_ANNOTATION!>@java.lang.annotation.Retention(RetentionPolicy.SOURCE)<!>
|
||||
|
||||
+1
-1
@@ -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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@Target(AnnotationTarget.CLASSIFIER)
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
annotation class base
|
||||
|
||||
@base data class My
|
||||
|
||||
@@ -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
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !DIAGNOSTICS: -UNUSED_PARAMETER
|
||||
@Target(AnnotationTarget.CLASSIFIER) annotation class base
|
||||
@Target(AnnotationTarget.CLASS) annotation class base
|
||||
|
||||
@base annotation class derived
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ base() public final enum class My : kotlin.Enum<My> {
|
||||
public final /*synthesized*/ fun values(): kotlin.Array<My>
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
@Target(AnnotationTarget.CLASSIFIER)
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
annotation class base
|
||||
|
||||
@Target(AnnotationTarget.ANNOTATION_CLASS)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,5 +2,5 @@
|
||||
|
||||
package test
|
||||
|
||||
@Target(AnnotationTarget.CLASSIFIER)
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
public annotation class TargetedAnnotation
|
||||
|
||||
+1
-1
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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) */
|
||||
|
||||
+1
-1
@@ -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),
|
||||
|
||||
@@ -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<KotlinTarget> = values().toSet()
|
||||
|
||||
public fun classActualTargets(descriptor: ClassDescriptor): List<KotlinTarget> = 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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
<info descr="null" textAttributesKey="KOTLIN_ANNOTATION">@Target</info>(<info descr="null" textAttributesKey="KOTLIN_CLASS">AnnotationTarget</info>.<info descr="null" textAttributesKey="KOTLIN_ENUM_ENTRY">CLASSIFIER</info>, <info descr="null" textAttributesKey="KOTLIN_CLASS">AnnotationTarget</info>.<info descr="null" textAttributesKey="KOTLIN_ENUM_ENTRY">EXPRESSION</info>)
|
||||
<info descr="null" textAttributesKey="KOTLIN_ANNOTATION">@Target</info>(<info descr="null" textAttributesKey="KOTLIN_CLASS">AnnotationTarget</info>.<info descr="null" textAttributesKey="KOTLIN_ENUM_ENTRY">CLASS</info>, <info descr="null" textAttributesKey="KOTLIN_CLASS">AnnotationTarget</info>.<info descr="null" textAttributesKey="KOTLIN_ENUM_ENTRY">EXPRESSION</info>)
|
||||
<info descr="null">annotation</info> class <info descr="null">Ann</info>
|
||||
|
||||
<info descr="null" textAttributesKey="KOTLIN_ANNOTATION">@Ann</info> class <info descr="null">A</info>
|
||||
|
||||
Reference in New Issue
Block a user