Merge use-site targeted annotations into corresponding Annotations

Add PropertyDescriptor.backingField/delegateField to store annotations
on the field directly in an otherwise almost empty descriptor instance,
instead of storing them with use-sites in the corresponding property
descriptor. Instead of AnnotationWithTarget, create AnnotationDescriptor
instances in AnnotationSplitter. Change DescriptorRenderer to render
annotations on "related" declarations when needed, with the explicit
use-site target if applicable.

Most changes in diagnostic test data are related to the fact that
annotations which are known to have an incompatible use-site to the
declaration they're applied at (such as `@param:`-annotation on a
function), are now not loaded at all. It's fine because the code is
erroneous, so it doesn't really matter how do we load annotations with
invalid targets (some of this logic is also changed freely in subsequent
commits). Some changes are also explained by the fact that for example
an annotation on the property which is only applicable to FIELD is now
rendered with an explicit use-site target `@field:`, regardless of
whether it did have that use-site target syntactically or not.

Basically, after this change there's no point in calling
Annotations.getUseSiteTargetedAnnotations/getAllAnnotations anymore
because it's easier and more intuitive to just use Annotations of the
corresponding descriptor -- the backing / delegate field (introduced in
this commit) or the extension receiver / setter parameter (related
behavior was fixed in previous commits). Usages of
use-site-target-related methods will be refactored out in subsequent
commits
This commit is contained in:
Alexander Udalov
2018-08-14 16:45:11 +02:00
parent 8c21e86ded
commit fc87043cb3
68 changed files with 436 additions and 386 deletions
@@ -2,7 +2,7 @@ package
public final class A {
public constructor A()
@kotlin.jvm.JvmField public final val clash: kotlin.Int = 1
@field:kotlin.jvm.JvmField public final val clash: kotlin.Int = 1
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
@@ -1,11 +1,11 @@
package
@kotlin.jvm.JvmField public val c: kotlin.Int = 4
@kotlin.jvm.JvmField public var g: kotlin.Int
@field:kotlin.jvm.JvmField public val c: kotlin.Int = 4
@field:kotlin.jvm.JvmField public var g: kotlin.Int
public final class C {
public constructor C()
@kotlin.jvm.JvmField public final var g: kotlin.Int
@field:kotlin.jvm.JvmField public final var g: 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
@@ -1,11 +1,11 @@
package
@kotlin.jvm.JvmField public val c: kotlin.Int = 4
@kotlin.jvm.JvmField public var g: kotlin.Int
@field:kotlin.jvm.JvmField public val c: kotlin.Int = 4
@field:kotlin.jvm.JvmField public var g: kotlin.Int
public final class C {
public constructor C()
@kotlin.jvm.JvmField public final var g: kotlin.Int
@field:kotlin.jvm.JvmField public final var g: 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
@@ -7,7 +7,7 @@ public interface A {
public companion object Companion {
private constructor Companion()
@kotlin.jvm.JvmField public final val c: kotlin.Int = 3
@field:kotlin.jvm.JvmField public final val c: kotlin.Int = 3
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
@@ -21,8 +21,8 @@ public interface B {
public companion object Companion {
private constructor Companion()
@kotlin.jvm.JvmField public final val a: kotlin.Int = 3
@kotlin.jvm.JvmField public final val c: kotlin.Int = 3
@field:kotlin.jvm.JvmField public final val a: kotlin.Int = 3
@field:kotlin.jvm.JvmField public final val c: kotlin.Int = 3
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,7 +37,7 @@ public interface C {
public companion object Companion {
private constructor Companion()
public final val a: kotlin.Int = 3
@kotlin.jvm.JvmField public final val c: kotlin.Int = 3
@field:kotlin.jvm.JvmField public final val c: kotlin.Int = 3
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
@@ -51,7 +51,7 @@ public interface D {
public companion object Companion {
private constructor Companion()
@kotlin.jvm.JvmField public final var c: kotlin.Int
@field:kotlin.jvm.JvmField public final var c: 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
@@ -65,9 +65,9 @@ public interface E {
public companion object Companion {
private constructor Companion()
@kotlin.jvm.JvmField private final val a: kotlin.Int = 3
@kotlin.jvm.JvmField internal final val b: kotlin.Int = 3
@kotlin.jvm.JvmField protected final val c: kotlin.Int = 3
@field:kotlin.jvm.JvmField private final val a: kotlin.Int = 3
@field:kotlin.jvm.JvmField internal final val b: kotlin.Int = 3
@field:kotlin.jvm.JvmField protected final val c: kotlin.Int = 3
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
@@ -81,7 +81,7 @@ public interface F {
public companion object Companion {
private constructor Companion()
@kotlin.jvm.JvmField public open val a: kotlin.Int = 3
@field:kotlin.jvm.JvmField public open val a: kotlin.Int = 3
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
@@ -17,7 +17,7 @@ abstract class C : I{
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!> private fun foo(s: String = "OK") {
}
<!INAPPLICABLE_JVM_FIELD, WRONG_ANNOTATION_TARGET!>@JvmField<!> val a: String by lazy { "A" }
<!WRONG_ANNOTATION_TARGET!>@JvmField<!> val a: String by lazy { "A" }
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!> open val b: Int = 3
@@ -1,25 +1,25 @@
package
@kotlin.jvm.JvmField public const val Const: kotlin.Int = 4
@kotlin.jvm.JvmField public var i: kotlin.Int
@kotlin.jvm.JvmField private val private: kotlin.Int = 3
@field:kotlin.jvm.JvmField public const val Const: kotlin.Int = 4
@field:kotlin.jvm.JvmField public var i: kotlin.Int
@field:kotlin.jvm.JvmField private val private: kotlin.Int = 3
@kotlin.jvm.JvmField public fun foo(): kotlin.Unit
@kotlin.jvm.JvmField public abstract class C : I {
@kotlin.jvm.JvmField public constructor C(/*0*/ s: kotlin.String)
@kotlin.jvm.JvmField public final val a: kotlin.String
@kotlin.jvm.JvmField public final override /*1*/ val ai: kotlin.Int = 3
@kotlin.jvm.JvmField public open val b: kotlin.Int = 3
@field:kotlin.jvm.JvmField public final override /*1*/ val ai: kotlin.Int = 3
@field:kotlin.jvm.JvmField public open val b: kotlin.Int = 3
@kotlin.jvm.JvmField public open override /*1*/ /*fake_override*/ val bi: kotlin.Int
@kotlin.jvm.JvmField public abstract val c: kotlin.Int
@kotlin.jvm.JvmField public final val customGetter: kotlin.String = ""
@kotlin.jvm.JvmField public final var customSetter: kotlin.String
@kotlin.jvm.JvmField public final val explicitDefaultAnnotatedGetter: kotlin.String = ""
@kotlin.jvm.JvmField public final var explicitDefaultAnnotatedSetter: kotlin.String
@kotlin.jvm.JvmField public final val explicitDefaultGetter: kotlin.String = ""
@kotlin.jvm.JvmField public final var explicitDefaultSetter: kotlin.String
@field:kotlin.jvm.JvmField public final val customGetter: kotlin.String = ""
@field:kotlin.jvm.JvmField public final var customSetter: kotlin.String
@field:kotlin.jvm.JvmField public final val explicitDefaultAnnotatedGetter: kotlin.String = ""
@field:kotlin.jvm.JvmField public final var explicitDefaultAnnotatedSetter: kotlin.String
@field:kotlin.jvm.JvmField public final val explicitDefaultGetter: kotlin.String = ""
@field:kotlin.jvm.JvmField public final var explicitDefaultSetter: kotlin.String
@kotlin.jvm.JvmField public final val noBackingField: kotlin.String
@kotlin.jvm.JvmField private final val private: kotlin.Int = 3
@field:kotlin.jvm.JvmField private final val private: kotlin.Int = 3
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@kotlin.jvm.JvmField private final fun foo(/*0*/ s: kotlin.String = ...): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@@ -35,7 +35,7 @@ public final annotation class DemoAnnotation : kotlin.Annotation {
public final class G {
public constructor G()
@kotlin.jvm.JvmField public final lateinit var lateInit: kotlin.String
@field:kotlin.jvm.JvmField public final lateinit var lateInit: kotlin.String
@delegate:kotlin.jvm.JvmField public final val s: 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
@@ -50,7 +50,7 @@ public final class H {
public companion object Companion {
private constructor Companion()
@kotlin.jvm.JvmField public final var c: kotlin.Int
@field:kotlin.jvm.JvmField public final var c: 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
@@ -74,7 +74,7 @@ public interface K {
public companion object Companion {
private constructor Companion()
@kotlin.jvm.JvmField public final var c: kotlin.Int
@field:kotlin.jvm.JvmField public final var c: kotlin.Int
public final var x: 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
@@ -84,8 +84,8 @@ public interface K {
public final class KK : K {
public constructor KK()
@kotlin.jvm.JvmField public open override /*1*/ val i: kotlin.Int = 0
@kotlin.jvm.JvmField public final override /*1*/ val j: kotlin.Int = 0
@field:kotlin.jvm.JvmField public open override /*1*/ val i: kotlin.Int = 0
@field:kotlin.jvm.JvmField public final override /*1*/ val j: 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
@@ -93,8 +93,8 @@ public final class KK : K {
public open class KKK : K {
public constructor KKK()
@kotlin.jvm.JvmField public open override /*1*/ val i: kotlin.Int = 0
@kotlin.jvm.JvmField public final override /*1*/ val j: kotlin.Int = 0
@field:kotlin.jvm.JvmField public open override /*1*/ val i: kotlin.Int = 0
@field:kotlin.jvm.JvmField public final override /*1*/ val j: 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
@@ -108,7 +108,7 @@ public final annotation class L : kotlin.Annotation {
public companion object Companion {
private constructor Companion()
@kotlin.jvm.JvmField public final var c: kotlin.Int
@field:kotlin.jvm.JvmField public final var c: 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
@@ -117,7 +117,7 @@ public final annotation class L : kotlin.Annotation {
public object O {
private constructor O()
@kotlin.jvm.JvmField public final val c: kotlin.Int = 3
@field:kotlin.jvm.JvmField public final val c: kotlin.Int = 3
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