Remove @get: @set:, reorder remaining annotation targets

This commit is contained in:
Yan Zhulanow
2015-09-11 20:27:00 +03:00
parent 4e8d664dfb
commit 01b2d02196
11 changed files with 41 additions and 58 deletions
@@ -43,9 +43,9 @@ public class AnnotationSplitter(
applicableTargetsLazy: () -> Set<AnnotationUseSiteTarget> applicableTargetsLazy: () -> Set<AnnotationUseSiteTarget>
) { ) {
public companion object { public companion object {
private val TARGET_PRIORITIES = setOf(CONSTRUCTOR_PARAMETER, FIELD, PROPERTY, PROPERTY_SETTER, PROPERTY_GETTER) private val TARGET_PRIORITIES = setOf(CONSTRUCTOR_PARAMETER, PROPERTY, FIELD)
@jvmStatic @JvmStatic
public fun create( public fun create(
storageManager: StorageManager, storageManager: StorageManager,
annotations: Annotations, annotations: Annotations,
@@ -54,7 +54,7 @@ public class AnnotationSplitter(
return AnnotationSplitter(storageManager, annotations, { targets }) return AnnotationSplitter(storageManager, annotations, { targets })
} }
@jvmStatic @JvmStatic
public fun getTargetSet(parameter: Boolean, context: BindingContext, wrapper: PropertyWrapper): Set<AnnotationUseSiteTarget> { public fun getTargetSet(parameter: Boolean, context: BindingContext, wrapper: PropertyWrapper): Set<AnnotationUseSiteTarget> {
val property = wrapper.property val property = wrapper.property
assert(property != null) assert(property != null)
@@ -62,7 +62,7 @@ public class AnnotationSplitter(
return getTargetSet(parameter, property!!.isVar, hasBackingField) return getTargetSet(parameter, property!!.isVar, hasBackingField)
} }
@jvmStatic @JvmStatic
public fun getTargetSet(parameter: Boolean, isVar: Boolean, hasBackingField: Boolean): Set<AnnotationUseSiteTarget> { public fun getTargetSet(parameter: Boolean, isVar: Boolean, hasBackingField: Boolean): Set<AnnotationUseSiteTarget> {
return hashSetOf(PROPERTY, PROPERTY_GETTER).apply { return hashSetOf(PROPERTY, PROPERTY_GETTER).apply {
if (parameter) add(CONSTRUCTOR_PARAMETER) if (parameter) add(CONSTRUCTOR_PARAMETER)
@@ -29,7 +29,6 @@ import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.resolve.descriptorUtil.isRepeatableAnnotation import org.jetbrains.kotlin.resolve.descriptorUtil.isRepeatableAnnotation
import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget.* import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget.*
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import kotlin.platform.platformStatic
public class AnnotationChecker(private val additionalCheckers: Iterable<AdditionalAnnotationChecker>) { public class AnnotationChecker(private val additionalCheckers: Iterable<AdditionalAnnotationChecker>) {
@@ -146,7 +145,7 @@ public class AnnotationChecker(private val additionalCheckers: Iterable<Addition
return applicableTargetSet(classDescriptor) ?: KotlinTarget.DEFAULT_TARGET_SET return applicableTargetSet(classDescriptor) ?: KotlinTarget.DEFAULT_TARGET_SET
} }
platformStatic @JvmStatic
public fun applicableTargetSet(descriptor: AnnotationDescriptor): Set<KotlinTarget> { public fun applicableTargetSet(descriptor: AnnotationDescriptor): Set<KotlinTarget> {
val classDescriptor = descriptor.type.constructor.declarationDescriptor as? ClassDescriptor ?: return emptySet() val classDescriptor = descriptor.type.constructor.declarationDescriptor as? ClassDescriptor ?: return emptySet()
return applicableTargetSet(classDescriptor) ?: KotlinTarget.DEFAULT_TARGET_SET return applicableTargetSet(classDescriptor) ?: KotlinTarget.DEFAULT_TARGET_SET
@@ -211,24 +210,25 @@ public class AnnotationChecker(private val additionalCheckers: Iterable<Addition
} }
val T_MEMBER_PROPERTY = targetList(MEMBER_PROPERTY, PROPERTY) { val T_MEMBER_PROPERTY = targetList(MEMBER_PROPERTY, PROPERTY) {
canBeSubstituted(PROPERTY_GETTER, PROPERTY_SETTER, FIELD) extraTargets(FIELD)
onlyWithUseSiteTarget(VALUE_PARAMETER) onlyWithUseSiteTarget(VALUE_PARAMETER, PROPERTY_GETTER, PROPERTY_SETTER)
} }
val T_TOP_LEVEL_PROPERTY = targetList(TOP_LEVEL_PROPERTY, PROPERTY) { val T_TOP_LEVEL_PROPERTY = targetList(TOP_LEVEL_PROPERTY, PROPERTY) {
canBeSubstituted(FIELD, PROPERTY_GETTER, PROPERTY_SETTER) extraTargets(FIELD)
onlyWithUseSiteTarget(VALUE_PARAMETER) onlyWithUseSiteTarget(VALUE_PARAMETER, PROPERTY_GETTER, PROPERTY_SETTER)
} }
val T_PROPERTY_GETTER = targetList(PROPERTY_GETTER) val T_PROPERTY_GETTER = targetList(PROPERTY_GETTER)
val T_PROPERTY_SETTER = targetList(PROPERTY_SETTER) val T_PROPERTY_SETTER = targetList(PROPERTY_SETTER)
val T_VALUE_PARAMETER_WITHOUT_VAL = targetList(VALUE_PARAMETER) { val T_VALUE_PARAMETER_WITHOUT_VAL = targetList(VALUE_PARAMETER) {
onlyWithUseSiteTarget(PROPERTY, FIELD, PROPERTY_GETTER, PROPERTY_SETTER) onlyWithUseSiteTarget(PROPERTY, FIELD)
} }
val T_VALUE_PARAMETER_WITH_VAL = targetList(VALUE_PARAMETER, PROPERTY, MEMBER_PROPERTY) { val T_VALUE_PARAMETER_WITH_VAL = targetList(VALUE_PARAMETER, PROPERTY, MEMBER_PROPERTY) {
canBeSubstituted(FIELD, PROPERTY_GETTER, PROPERTY_SETTER) extraTargets(FIELD)
onlyWithUseSiteTarget(PROPERTY_GETTER, PROPERTY_SETTER)
} }
val T_FILE = targetList(FILE) val T_FILE = targetList(FILE)
@@ -273,7 +273,7 @@ public class AnnotationChecker(private val additionalCheckers: Iterable<Addition
private var canBeSubstituted: List<KotlinTarget> = listOf() private var canBeSubstituted: List<KotlinTarget> = listOf()
private var onlyWithUseSiteTarget: List<KotlinTarget> = listOf() private var onlyWithUseSiteTarget: List<KotlinTarget> = listOf()
fun canBeSubstituted(vararg targets: KotlinTarget) { fun extraTargets(vararg targets: KotlinTarget) {
canBeSubstituted = targets.toList() canBeSubstituted = targets.toList()
} }
@@ -10,29 +10,18 @@ annotation class AnnFieldProperty
@Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY) @Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.PROPERTY)
annotation class AnnParameterProperty annotation class AnnParameterProperty
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.FIELD) @Target(AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FIELD)
annotation class AnnParameterField annotation class AnnParameterField
@Target(AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY_SETTER) @Target(AnnotationTarget.FIELD, AnnotationTarget.TYPE)
annotation class AnnGetterSetter
@Target(AnnotationTarget.PROPERTY_SETTER, AnnotationTarget.PROPERTY)
annotation class AnnPropertySetter
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.PROPERTY_GETTER)
annotation class AnnTypeGetter
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.TYPE)
annotation class AnnTypeField annotation class AnnTypeField
public class A( public class A(
@AnnProperty @AnnField @AnnFieldProperty @AnnParameterProperty @AnnParameterField @AnnProperty @AnnField @AnnFieldProperty @AnnParameterProperty @AnnParameterField @AnnTypeField
@AnnGetterSetter @AnnPropertySetter @AnnTypeGetter @AnnTypeField
public val x: Int public val x: Int
) { ) {
@AnnProperty @AnnField @AnnFieldProperty @AnnParameterProperty @AnnParameterField @AnnProperty @AnnField @AnnFieldProperty @AnnParameterProperty @AnnParameterField @AnnTypeField
@AnnGetterSetter @AnnPropertySetter @AnnTypeGetter @AnnTypeField
public val a: Int = 1 public val a: Int = 1
} }
@@ -1,29 +1,23 @@
@kotlin.jvm.internal.KotlinClass A { @kotlin.jvm.internal.KotlinClass A {
field $kotlinClass: kotlin.reflect.KClass field $kotlinClass: kotlin.reflect.KClass
@AnnField @AnnFieldProperty @AnnParameterField field a: int @AnnField @AnnParameterField @AnnTypeField field a: int
@AnnField @AnnFieldProperty @AnnParameterField field x: int @AnnField @AnnTypeField field x: int
method <clinit>(): void method <clinit>(): void
@AnnProperty @AnnParameterProperty @AnnPropertySetter @AnnTypeGetter @AnnTypeField method a$annotations(): void @AnnProperty @AnnFieldProperty @AnnParameterProperty method a$annotations(): void
@AnnGetterSetter method getA(): int method getA(): int
@AnnProperty @AnnPropertySetter @AnnTypeGetter @AnnTypeField method x$annotations(): void @AnnProperty @AnnFieldProperty method x$annotations(): void
@AnnGetterSetter method getX(): int method getX(): int
method <init>(@AnnParameterProperty p0: int): void method <init>(@AnnParameterProperty @AnnParameterField p0: int): void
} }
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnField @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnField
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnFieldProperty @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnFieldProperty
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnGetterSetter
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnParameterField @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnParameterField
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnParameterProperty @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnParameterProperty
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnProperty @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnProperty
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnPropertySetter
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnTypeField @kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnTypeField
@kotlin.annotation.Target @java.lang.annotation.Retention @java.lang.annotation.Target @kotlin.jvm.internal.KotlinClass AnnTypeGetter
@@ -1,10 +1,10 @@
@kotlin.jvm.internal.KotlinClass A { @kotlin.jvm.internal.KotlinClass A {
field $kotlinClass: kotlin.reflect.KClass field $kotlinClass: kotlin.reflect.KClass
@AnnProp @AnnField field p: int @AnnField field p: int
@AnnField field x: int @AnnField field x: int
field y: int field y: int
method <clinit>(): void method <clinit>(): void
@AnnProp2 method p$annotations(): void @AnnProp @AnnProp2 method p$annotations(): void
@AnnGetter method getP(): int @AnnGetter method getP(): int
@AnnSetter method setP(@AnnParam p0: int): void @AnnSetter method setP(@AnnParam p0: int): void
@AnnProp2 method x$annotations(): void @AnnProp2 method x$annotations(): void
@@ -8,7 +8,7 @@ annotation class smartset
annotation class base annotation class base
class My(x: Int) { class My(x: Int) {
@smartget var y = x <!WRONG_ANNOTATION_TARGET!>@smartget<!> var y = x
<!WRONG_ANNOTATION_TARGET!>@base<!> @smartget <!WRONG_ANNOTATION_TARGET!>@smartset<!> get <!WRONG_ANNOTATION_TARGET!>@base<!> @smartget <!WRONG_ANNOTATION_TARGET!>@smartset<!> get
<!WRONG_ANNOTATION_TARGET!>@base<!> <!WRONG_ANNOTATION_TARGET!>@smartget<!> @smartset set <!WRONG_ANNOTATION_TARGET!>@base<!> <!WRONG_ANNOTATION_TARGET!>@smartget<!> @smartset set
@@ -2,7 +2,7 @@ package
public final class My { public final class My {
public constructor My(/*0*/ x: kotlin.Int) public constructor My(/*0*/ x: kotlin.Int)
public final var y: kotlin.Int smartget() public final var y: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
base() smartget() smartset() public final fun foo(): kotlin.Int base() smartget() smartset() public final fun foo(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -2,8 +2,8 @@ package
public final class A { public final class A {
public constructor A(/*0*/ @param:Ann() Ann() x: kotlin.Int, /*1*/ @param:RepeatableAnn() Ann() y: kotlin.Int) public constructor A(/*0*/ @param:Ann() Ann() x: kotlin.Int, /*1*/ @param:RepeatableAnn() Ann() y: kotlin.Int)
@property:Ann() @property:RepeatableAnn() @field:Ann() RepeatableAnn() public final val a: kotlin.Int = 0 @property:Ann() RepeatableAnn() @property:RepeatableAnn() @field:Ann() public final val a: kotlin.Int = 0
@property:Ann() Ann() @field:Ann() public final val b: kotlin.Int = 0 Ann() @property:Ann() @field:Ann() public final val b: kotlin.Int = 0
@field:RepeatableAnn() @field:RepeatableAnn() public final val c: kotlin.Int = 0 @field:RepeatableAnn() @field:RepeatableAnn() public final val c: kotlin.Int = 0
@property:RepeatableAnn() RepeatableAnn() public final val d: kotlin.Int = 0 @property:RepeatableAnn() RepeatableAnn() public final val d: kotlin.Int = 0
public final val x: kotlin.Int public final val x: kotlin.Int
@@ -6,10 +6,10 @@ fun foo() {}
@JvmName("b") @JvmName("b")
fun Any.foo() {} fun Any.foo() {}
@JvmName("c") <!WRONG_ANNOTATION_TARGET!>@JvmName("c")<!>
val px = 1 val px = 1
@JvmName("d") <!WRONG_ANNOTATION_TARGET!>@JvmName("d")<!>
val Any.px : Int val Any.px : Int
get() = 1 get() = 1
@@ -39,10 +39,10 @@ class C <!WRONG_ANNOTATION_TARGET!>@JvmName("primary")<!> constructor() {
@JvmName("b") @JvmName("b")
fun Any.foo() {} fun Any.foo() {}
@JvmName("c") <!WRONG_ANNOTATION_TARGET!>@JvmName("c")<!>
val px = 1 val px = 1
@JvmName("d") <!WRONG_ANNOTATION_TARGET!>@JvmName("d")<!>
val Any.px : Int val Any.px : Int
get() = 1 get() = 1
@@ -1,10 +1,10 @@
package package
public val px: kotlin.Int = 1 kotlin.jvm.JvmName(name = "c") public val px: kotlin.Int = 1
public val valx: kotlin.Int public val valx: kotlin.Int
public var vardef: kotlin.Int public var vardef: kotlin.Int
public var varx: kotlin.Int public var varx: kotlin.Int
public val kotlin.Any.px: kotlin.Int kotlin.jvm.JvmName(name = "d") public val kotlin.Any.px: kotlin.Int
kotlin.jvm.JvmName(name = "a") public fun foo(): kotlin.Unit kotlin.jvm.JvmName(name = "a") public fun foo(): kotlin.Unit
public fun foo1(): kotlin.Unit public fun foo1(): kotlin.Unit
kotlin.jvm.JvmName(name = "b") public fun kotlin.Any.foo(): kotlin.Unit kotlin.jvm.JvmName(name = "b") public fun kotlin.Any.foo(): kotlin.Unit
@@ -22,10 +22,10 @@ public abstract class AB {
kotlin.jvm.JvmName(name = "C") public final class C { kotlin.jvm.JvmName(name = "C") public final class C {
kotlin.jvm.JvmName(name = "primary") public constructor C() kotlin.jvm.JvmName(name = "primary") public constructor C()
kotlin.jvm.JvmName(name = "ctr") public constructor C(/*0*/ x: kotlin.Int) kotlin.jvm.JvmName(name = "ctr") public constructor C(/*0*/ x: kotlin.Int)
public final val px: kotlin.Int = 1 kotlin.jvm.JvmName(name = "c") public final val px: kotlin.Int = 1
public final val valx: kotlin.Int public final val valx: kotlin.Int
public final var varx: kotlin.Int public final var varx: kotlin.Int
public final val kotlin.Any.px: kotlin.Int kotlin.jvm.JvmName(name = "d") public final val kotlin.Any.px: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
kotlin.jvm.JvmName(name = "a") public final fun foo(): kotlin.Unit kotlin.jvm.JvmName(name = "a") public final fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -6,7 +6,7 @@ class A {
fun foo() { fun foo() {
@Ann("class") class Local { @Ann("class") class Local {
Ann("fun") fun foo(): Local = this Ann("fun") fun foo(): Local = this
Ann("val") val x = foo() @field:Ann("val") val x = foo()
Ann("inner") inner class Inner Ann("inner") inner class Inner
} }