JVM: produce a better error on @JvmStatic external in interface

Java does not permit `static native` methods in interfaces, so this
never worked on any existing JRE.

 #KT-43696 Fixed
This commit is contained in:
pyos
2021-07-14 12:07:36 +02:00
committed by Alexander Udalov
parent ad7ed483f3
commit f5dd5ead1f
12 changed files with 55 additions and 3 deletions
@@ -18,6 +18,8 @@ interface B {
}
@JvmStatic external fun a5()
@JvmStatic
var foo = 1
@@ -49,6 +51,11 @@ interface B {
public var foo9 = 1
@JvmStatic private set
@JvmStatic
val foo10: Int external get
val foo11: Int @JvmStatic external get
}
}
@@ -18,6 +18,8 @@ interface B {
}
<!JVM_STATIC_NOT_IN_OBJECT_OR_CLASS_COMPANION!>@JvmStatic external fun a5()<!>
<!JVM_STATIC_NOT_IN_OBJECT_OR_CLASS_COMPANION!>@JvmStatic
var foo<!> = 1
@@ -49,6 +51,11 @@ interface B {
public var foo9 = 1
<!JVM_STATIC_NOT_IN_OBJECT_OR_CLASS_COMPANION!>@JvmStatic private set<!>
<!JVM_STATIC_NOT_IN_OBJECT_OR_CLASS_COMPANION!>@JvmStatic
val foo10: Int<!> external get
val foo11: Int <!JVM_STATIC_NOT_IN_OBJECT_OR_CLASS_COMPANION!>@JvmStatic external get<!>
}
}
@@ -9,6 +9,8 @@ public interface B {
private constructor Companion()
@kotlin.jvm.JvmStatic public final var foo: kotlin.Int
@kotlin.jvm.JvmStatic public final var foo1: kotlin.Int
@kotlin.jvm.JvmStatic public final val foo10: kotlin.Int
@get:kotlin.jvm.JvmStatic public final val foo11: kotlin.Int
@kotlin.jvm.JvmStatic public final var foo2: kotlin.Int
@kotlin.jvm.JvmStatic private final var foo3: kotlin.Int
@kotlin.jvm.JvmStatic protected final var foo4: kotlin.Int
@@ -21,6 +23,7 @@ public interface B {
@kotlin.jvm.JvmStatic private final fun a2(): kotlin.Unit
@kotlin.jvm.JvmStatic protected final fun a3(): kotlin.Unit
@kotlin.jvm.JvmStatic internal final fun a4(): kotlin.Unit
@kotlin.jvm.JvmStatic public final external fun a5(): kotlin.Unit
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
@@ -20,6 +20,8 @@ interface B {
}
@JvmStatic external fun a5()
@JvmStatic
var foo = 1
@@ -52,6 +54,10 @@ interface B {
public var foo9 = 1
@JvmStatic private set
@JvmStatic
val foo10: Int external get
val foo11: Int @JvmStatic external get
}
}
@@ -20,6 +20,8 @@ interface B {
}
<!JVM_STATIC_IN_INTERFACE_1_6, JVM_STATIC_ON_EXTERNAL_IN_INTERFACE!>@JvmStatic external fun a5()<!>
<!JVM_STATIC_IN_INTERFACE_1_6!>@JvmStatic
var foo<!> = 1
@@ -52,6 +54,10 @@ interface B {
public var foo9 = 1
<!JVM_STATIC_IN_INTERFACE_1_6, JVM_STATIC_ON_NON_PUBLIC_MEMBER!>@JvmStatic private set<!>
<!JVM_STATIC_IN_INTERFACE_1_6, JVM_STATIC_ON_EXTERNAL_IN_INTERFACE!>@JvmStatic
val foo10: Int<!> external get
val foo11: Int <!JVM_STATIC_IN_INTERFACE_1_6, JVM_STATIC_ON_EXTERNAL_IN_INTERFACE!>@JvmStatic external get<!>
}
}
@@ -9,6 +9,8 @@ public interface B {
private constructor Companion()
@kotlin.jvm.JvmStatic public final var foo: kotlin.Int
@kotlin.jvm.JvmStatic public final var foo1: kotlin.Int
@kotlin.jvm.JvmStatic public final val foo10: kotlin.Int
@get:kotlin.jvm.JvmStatic public final val foo11: kotlin.Int
@kotlin.jvm.JvmStatic public final var foo2: kotlin.Int
@kotlin.jvm.JvmStatic private final var foo3: kotlin.Int
@kotlin.jvm.JvmStatic protected final var foo4: kotlin.Int
@@ -21,6 +23,7 @@ public interface B {
@kotlin.jvm.JvmStatic private final fun a2(): kotlin.Unit
@kotlin.jvm.JvmStatic protected final fun a3(): kotlin.Unit
@kotlin.jvm.JvmStatic internal final fun a4(): kotlin.Unit
@kotlin.jvm.JvmStatic public final external fun a5(): kotlin.Unit
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
@@ -19,6 +19,8 @@ interface B {
}
@JvmStatic external fun a5()
@JvmStatic
var foo = 1
@@ -51,6 +53,10 @@ interface B {
public var foo9 = 1
@JvmStatic private set
@JvmStatic
val foo10: Int external get
val foo11: Int @JvmStatic external get
}
}
@@ -19,6 +19,8 @@ interface B {
}
<!JVM_STATIC_ON_EXTERNAL_IN_INTERFACE!>@JvmStatic external fun a5()<!>
@JvmStatic
var foo = 1
@@ -51,6 +53,10 @@ interface B {
public var foo9 = 1
<!JVM_STATIC_ON_NON_PUBLIC_MEMBER!>@JvmStatic private set<!>
<!JVM_STATIC_ON_EXTERNAL_IN_INTERFACE!>@JvmStatic
val foo10: Int<!> external get
val foo11: Int <!JVM_STATIC_ON_EXTERNAL_IN_INTERFACE!>@JvmStatic external get<!>
}
}
@@ -9,6 +9,8 @@ public interface B {
private constructor Companion()
@kotlin.jvm.JvmStatic public final var foo: kotlin.Int
@kotlin.jvm.JvmStatic public final var foo1: kotlin.Int
@kotlin.jvm.JvmStatic public final val foo10: kotlin.Int
@get:kotlin.jvm.JvmStatic public final val foo11: kotlin.Int
@kotlin.jvm.JvmStatic public final var foo2: kotlin.Int
@kotlin.jvm.JvmStatic private final var foo3: kotlin.Int
@kotlin.jvm.JvmStatic protected final var foo4: kotlin.Int
@@ -21,6 +23,7 @@ public interface B {
@kotlin.jvm.JvmStatic private final fun a2(): kotlin.Unit
@kotlin.jvm.JvmStatic protected final fun a3(): kotlin.Unit
@kotlin.jvm.JvmStatic internal final fun a4(): kotlin.Unit
@kotlin.jvm.JvmStatic public final external fun a5(): kotlin.Unit
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