Support properties from primary constructor in JvmFieldApplicabilityChecker

#KT-32753 In progress
This commit is contained in:
Him188
2021-03-31 19:37:49 +08:00
committed by TeamCityServer
parent e4ebeec275
commit f90cbb0ce7
12 changed files with 502 additions and 12 deletions
@@ -1,4 +1,4 @@
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses -ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
@kotlin.jvm.JvmField
@@ -114,6 +114,11 @@ open class KKK : K {
override final val j: Int = 0
}
class JK(
override val i: Int,
@JvmField override val j: Int,
) : K
annotation class L {
companion object {
@JvmField
@@ -0,0 +1,148 @@
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses -ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!>
fun foo() {
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!> val x = "A"
}
annotation class DemoAnnotation
<!WRONG_ANNOTATION_TARGET!>@JvmField<!>
abstract class C : I{
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!> constructor(s: String) {
}
<!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" }
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!> open val b: Int = 3
<!WRONG_ANNOTATION_TARGET!>@JvmField<!> abstract val c: Int
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
val customGetter: String = ""
get() = field
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
val explicitDefaultGetter: String = ""
get
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
var explicitDefaultSetter: String = ""
set
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
val explicitDefaultAnnotatedGetter: String = ""
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@DemoAnnotation<!> get
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
var explicitDefaultAnnotatedSetter: String = ""
<!ANNOTATION_TARGETS_NON_EXISTENT_ACCESSOR!>@DemoAnnotation<!> set
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
var customSetter: String = ""
set(s) {
field = s
}
<!WRONG_ANNOTATION_TARGET!>@JvmField<!>
val noBackingField: String
get() = "a"
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
final override val ai = 3
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
private val private = 3
}
interface I {
<!WRONG_ANNOTATION_TARGET!>@JvmField<!> val ai: Int
<!WRONG_ANNOTATION_TARGET!>@JvmField<!> val bi: Int
get() = 5
}
class G {
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
lateinit var lateInit: String
<!INAPPLICABLE_JVM_FIELD!>@delegate:JvmField<!>
val s: String by lazy { "s" }
}
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
const val Const = 4
@JvmField
var i = 5
class H {
companion object {
@JvmField
var c = 3
}
}
interface K {
val i: Int
val j: Int
companion object {
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
var c = 3
var x = 3
}
}
class KK : K {
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
override val i: Int = 0
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
override final val j: Int = 0
}
open class KKK : K {
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
override val i: Int = 0
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
override final val j: Int = 0
}
class JK(
override val i: Int,
<!INAPPLICABLE_JVM_FIELD_WARNING!>@JvmField<!> override val j: Int,
) : K
annotation class L {
companion object {
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
var c = 3
}
}
object O {
@JvmField
val c = 3
}
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
private val private = 3
inline class Foo(val x: Int)
object IObject {
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
val c: Foo = Foo(42)
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
val u = 42u
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
private val r: Result<Int> = TODO()
}
@@ -83,6 +83,15 @@ public object IObject {
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class JK : K {
public constructor JK(/*0*/ i: kotlin.Int, /*1*/ j: kotlin.Int)
public open override /*1*/ val i: kotlin.Int
@field:kotlin.jvm.JvmField public open override /*1*/ val j: 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
}
public interface K {
public abstract val i: kotlin.Int
public abstract val j: kotlin.Int
@@ -0,0 +1,148 @@
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses +ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
@kotlin.jvm.JvmField
fun foo() {
@kotlin.jvm.JvmField val x = "A"
}
annotation class DemoAnnotation
@JvmField
abstract class C : I{
@kotlin.jvm.JvmField constructor(s: String) {
}
@kotlin.jvm.JvmField private fun foo(s: String = "OK") {
}
@JvmField val a: String by lazy { "A" }
@JvmField open val b: Int = 3
@JvmField abstract val c: Int
@JvmField
val customGetter: String = ""
get() = field
@JvmField
val explicitDefaultGetter: String = ""
get
@JvmField
var explicitDefaultSetter: String = ""
set
@JvmField
val explicitDefaultAnnotatedGetter: String = ""
@DemoAnnotation get
@JvmField
var explicitDefaultAnnotatedSetter: String = ""
@DemoAnnotation set
@JvmField
var customSetter: String = ""
set(s) {
field = s
}
@JvmField
val noBackingField: String
get() = "a"
@JvmField
final override val ai = 3
@JvmField
private val private = 3
}
interface I {
@JvmField val ai: Int
@JvmField val bi: Int
get() = 5
}
class G {
@JvmField
lateinit var lateInit: String
@delegate:JvmField
val s: String by lazy { "s" }
}
@JvmField
const val Const = 4
@JvmField
var i = 5
class H {
companion object {
@JvmField
var c = 3
}
}
interface K {
val i: Int
val j: Int
companion object {
@JvmField
var c = 3
var x = 3
}
}
class KK : K {
@JvmField
override val i: Int = 0
@JvmField
override final val j: Int = 0
}
open class KKK : K {
@JvmField
override val i: Int = 0
@JvmField
override final val j: Int = 0
}
class JK(
override val i: Int,
@JvmField override val j: Int,
) : K
annotation class L {
companion object {
@JvmField
var c = 3
}
}
object O {
@JvmField
val c = 3
}
@JvmField
private val private = 3
inline class Foo(val x: Int)
object IObject {
@JvmField
val c: Foo = Foo(42)
@JvmField
val u = 42u
@JvmField
private val r: Result<Int> = TODO()
}
@@ -1,4 +1,4 @@
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses
// !LANGUAGE: +NestedClassesInAnnotations +InlineClasses -JvmInlineValueClasses +ProhibitJvmFieldOnOverrideFromInterfaceInPrimaryConstructor
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
<!WRONG_ANNOTATION_TARGET!>@kotlin.jvm.JvmField<!>
@@ -114,6 +114,11 @@ open class KKK : K {
override final val j: Int = 0
}
class JK(
override val i: Int,
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!> override val j: Int,
) : K
annotation class L {
companion object {
<!INAPPLICABLE_JVM_FIELD!>@JvmField<!>
@@ -0,0 +1,151 @@
package
@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)
@field:kotlin.jvm.JvmField public final val a: kotlin.String
@field:kotlin.jvm.JvmField public final override /*1*/ val ai: kotlin.Int = 3
@field:kotlin.jvm.JvmField public open val b: kotlin.Int = 3
@field:kotlin.jvm.JvmField public open override /*1*/ /*fake_override*/ val bi: kotlin.Int
@field:kotlin.jvm.JvmField public abstract val c: kotlin.Int
@field:kotlin.jvm.JvmField public final val customGetter: kotlin.String = ""
@field:kotlin.jvm.JvmField public final var customSetter: kotlin.String
@field:kotlin.jvm.JvmField @get:DemoAnnotation public final val explicitDefaultAnnotatedGetter: kotlin.String = ""
@field:kotlin.jvm.JvmField @set:DemoAnnotation 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
@field:kotlin.jvm.JvmField public final val noBackingField: kotlin.String
@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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final annotation class DemoAnnotation : kotlin.Annotation {
public constructor DemoAnnotation()
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 inline class Foo {
public constructor Foo(/*0*/ x: kotlin.Int)
public final val x: kotlin.Int
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final class G {
public constructor G()
@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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class H {
public constructor H()
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()
@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
}
}
public interface I {
@field:kotlin.jvm.JvmField public abstract val ai: kotlin.Int
@field:kotlin.jvm.JvmField public open val bi: 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
}
public object IObject {
private constructor IObject()
@field:kotlin.jvm.JvmField public final val c: Foo
@field:kotlin.jvm.JvmField private final val r: kotlin.Result<kotlin.Int>
@field:kotlin.jvm.JvmField public final val u: kotlin.UInt = 42.toUInt()
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 JK : K {
public constructor JK(/*0*/ i: kotlin.Int, /*1*/ j: kotlin.Int)
public open override /*1*/ val i: kotlin.Int
@field:kotlin.jvm.JvmField public open override /*1*/ val j: 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
}
public interface K {
public abstract val i: kotlin.Int
public abstract val j: 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
public companion object Companion {
private constructor Companion()
@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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final class KK : K {
public constructor KK()
@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
}
public open class KKK : K {
public constructor KKK()
@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
}
public final annotation class L : kotlin.Annotation {
public constructor L()
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()
@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
}
}
public object O {
private constructor O()
@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
}