Warn about annotations that targets non-existing accessors

#KT-15453 In Progress
This commit is contained in:
Mikhail Zarechenskiy
2018-07-13 15:42:32 +03:00
parent 70144f8003
commit b6db8971e4
18 changed files with 557 additions and 6 deletions
@@ -0,0 +1,116 @@
// Please make sure that this test is consistent with the blackbox test "annotationsOnNonExistentAccessors.kt"
import kotlin.reflect.KProperty
annotation class Ann
annotation class AnnRepeat
class Foo(
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@get:Ann<!> private val y0: Int,
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@get:Ann<!> private vararg val y1: String
) {
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@get:Ann<!>
private val x1 = ""
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@set:Ann<!>
private var x2 = ""
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@setparam:Ann<!>
private var x3 = ""
@setparam:[<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>Ann<!> <!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>AnnRepeat<!>]
private var x4 = ""
@get:Ann
internal val x5 = ""
@get:Ann
protected val x6 = ""
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@get:Ann<!>
private val x7: String = ""
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@AnnRepeat<!> get
@get:Ann
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@set:Ann<!>
private var x8: String = ""
get() { return "" }
@get:Ann
@set:Ann
private var x9: String = ""
get() { return "" }
set(f) { field = f }
}
private class EffetivelyPrivate private constructor(
@get:Ann val x0: Int,
@get:Ann protected val x1: Int,
@get:Ann internal val x2: Int
) {
private class Nested {
@get:Ann
val fofo = 0
}
}
class PrivateToThis<in I> {
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@get:Ann<!>
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@set:Ann<!>
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@setparam:Ann<!>
private var x0: I = TODO()
}
class Statics {
@get:Ann
lateinit var y0: String
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@get:Ann<!>
private lateinit var y1: String
companion object {
@JvmField
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@get:Ann<!>
val x0 = ""
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@get:Ann<!>
const val x1 = ""
@JvmStatic
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@get:Ann<!>
val x2 = ""
@JvmStatic
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@get:Ann<!>
private val x3 = ""
}
}
private class Other(@param:Ann private val param: Int) {
@property:Ann
@field:Ann
private val other = ""
private fun @receiver:Ann Int.receiver() {}
@delegate:Ann
@get:Ann
private val delegate by CustomDelegate()
}
class CustomDelegate {
operator fun getValue(thisRef: Any?, prop: KProperty<*>): String = prop.name
}
@Retention(AnnotationRetention.SOURCE)
annotation class SourceAnn
class WithSource {
@get:SourceAnn
@set:SourceAnn
@setparam:SourceAnn
private var x0 = ""
private val x1 = ""
@SourceAnn get
}
@@ -0,0 +1,114 @@
package
public final annotation class Ann : kotlin.Annotation {
public constructor Ann()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class AnnRepeat : kotlin.Annotation {
public constructor AnnRepeat()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class CustomDelegate {
public constructor CustomDelegate()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final operator fun getValue(/*0*/ thisRef: kotlin.Any?, /*1*/ prop: kotlin.reflect.KProperty<*>): kotlin.String
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
private final class EffetivelyPrivate {
private constructor EffetivelyPrivate(/*0*/ x0: kotlin.Int, /*1*/ x1: kotlin.Int, /*2*/ x2: kotlin.Int)
public final val x0: kotlin.Int
protected final val x1: kotlin.Int
internal final val x2: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
private final class Nested {
public constructor Nested()
public final val fofo: kotlin.Int = 0
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final class Foo {
public constructor Foo(/*0*/ y0: kotlin.Int, /*1*/ vararg y1: kotlin.String /*kotlin.Array<out kotlin.String>*/)
private final val x1: kotlin.String = ""
private final var x2: kotlin.String
@setparam:Ann private final var x3: kotlin.String
@setparam:Ann @setparam:AnnRepeat private final var x4: kotlin.String
internal final val x5: kotlin.String = ""
protected final val x6: kotlin.String = ""
private final val x7: kotlin.String = ""
private final var x8: kotlin.String
private final var x9: kotlin.String
private final val y0: kotlin.Int
private final val y1: kotlin.Array<out kotlin.String>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
private final class Other {
public constructor Other(/*0*/ @param:Ann param: kotlin.Int)
@delegate:Ann private final val delegate: kotlin.String
@property:Ann @field:Ann private final val other: kotlin.String = ""
private final val param: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
private final fun @receiver:Ann kotlin.Int.receiver(): kotlin.Unit
}
public final class PrivateToThis</*0*/ in I> {
public constructor PrivateToThis</*0*/ in I>()
@setparam:Ann private/*private to this*/ final var x0: I
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.annotation.Retention(value = AnnotationRetention.SOURCE) public final annotation class SourceAnn : kotlin.Annotation {
public constructor SourceAnn()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Statics {
public constructor Statics()
public final lateinit var y0: kotlin.String
private final lateinit var y1: kotlin.String
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion {
private constructor Companion()
@kotlin.jvm.JvmField public final val x0: kotlin.String = ""
public const final val x1: kotlin.String = ""
@kotlin.jvm.JvmStatic public final val x2: kotlin.String = ""
@kotlin.jvm.JvmStatic private final val x3: kotlin.String = ""
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final class WithSource {
public constructor WithSource()
@setparam:SourceAnn private final var x0: kotlin.String
private final val x1: kotlin.String = ""
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -37,11 +37,11 @@ abstract class C : I{
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
val explicitDefaultAnnotatedGetter: String = ""
@DemoAnnotation get
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@DemoAnnotation<!> get
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
var explicitDefaultAnnotatedSetter: String = ""
@DemoAnnotation set
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@DemoAnnotation<!> set
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
var customSetter: String = ""
@@ -45,7 +45,7 @@ interface B {
<!JVM_STATIC_NOT_IN_OBJECT_OR_CLASS_COMPANION!>@JvmStatic get<!>
private var foo8 = 1
<!JVM_STATIC_NOT_IN_OBJECT_OR_CLASS_COMPANION!>@JvmStatic <!SETTER_VISIBILITY_INCONSISTENT_WITH_PROPERTY_VISIBILITY!>public<!> set<!>
<!JVM_STATIC_NOT_IN_OBJECT_OR_CLASS_COMPANION!><!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@JvmStatic<!> <!SETTER_VISIBILITY_INCONSISTENT_WITH_PROPERTY_VISIBILITY!>public<!> set<!>
public var foo9 = 1
<!JVM_STATIC_NOT_IN_OBJECT_OR_CLASS_COMPANION!>@JvmStatic private set<!>
@@ -45,7 +45,7 @@ interface B {
<!JVM_STATIC_IN_INTERFACE_1_6!>@JvmStatic get<!>
private var foo8 = 1
<!JVM_STATIC_IN_INTERFACE_1_6!>@JvmStatic <!SETTER_VISIBILITY_INCONSISTENT_WITH_PROPERTY_VISIBILITY!>public<!> set<!>
<!JVM_STATIC_IN_INTERFACE_1_6!><!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@JvmStatic<!> <!SETTER_VISIBILITY_INCONSISTENT_WITH_PROPERTY_VISIBILITY!>public<!> set<!>
public var foo9 = 1
<!JVM_STATIC_ON_NON_PUBLIC_MEMBER, JVM_STATIC_IN_INTERFACE_1_6!>@JvmStatic private set<!>
@@ -46,7 +46,7 @@ interface B {
@JvmStatic get
private var foo8 = 1
@JvmStatic <!SETTER_VISIBILITY_INCONSISTENT_WITH_PROPERTY_VISIBILITY!>public<!> set
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@JvmStatic<!> <!SETTER_VISIBILITY_INCONSISTENT_WITH_PROPERTY_VISIBILITY!>public<!> set
public var foo9 = 1
<!JVM_STATIC_ON_NON_PUBLIC_MEMBER!>@JvmStatic private set<!>