Report JVM signature clashes from JVM_IR

Also:

* Do not rename public ABI fields
This includes backing fields for const, lateinit, @JvmField properties,
and instance fields for objects.

* FAKE_OVERRIDE declarations for static members of parent Java classes
Required to report cases when a Kotlin function accidentally overrides
Java class member.
This commit is contained in:
Dmitry Petrov
2020-02-10 11:27:48 +03:00
parent c1db9b6d40
commit 866f188120
233 changed files with 4487 additions and 44 deletions
@@ -0,0 +1,34 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: A.java
public class A {
public static void foo() {}
public static void baz(String s) {}
}
// FILE: B.kt
open class B : A() {
}
// FILE: C.java
public class C extends B {
public static void bar(int i) {}
}
// FILE: K.kt
open class K : C() {
<!ACCIDENTAL_OVERRIDE!>fun foo()<!> {}
fun foo(a: Any) {}
<!ACCIDENTAL_OVERRIDE!>fun bar(i: Int)<!> {}
fun bar(i: String) {}
fun baz(i: Int) {}
companion object {
fun foo() {}
fun bar(i: Int) {}
}
}
@@ -0,0 +1,52 @@
package
public open class A {
public constructor A()
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
// Static members
public open fun baz(/*0*/ s: kotlin.String!): kotlin.Unit
public open fun foo(): kotlin.Unit
}
public open class B : A {
public constructor B()
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 C : B {
public constructor C()
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
// Static members
public open fun bar(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun baz(/*0*/ s: kotlin.String!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
}
public open class K : C {
public constructor K()
public final fun bar(/*0*/ i: kotlin.Int): kotlin.Unit
public final fun bar(/*0*/ i: kotlin.String): kotlin.Unit
public final fun baz(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public final fun foo(/*0*/ a: kotlin.Any): kotlin.Unit
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()
public final fun bar(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -0,0 +1,22 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: A.java
public class A {
public static int a = 1;
public static void foo() {}
public static void baz(String s) {}
}
// FILE: K.kt
open class K : A() {
val a = 1
<!ACCIDENTAL_OVERRIDE!>fun foo()<!> {}
fun foo(i: Int) {}
fun baz(i: Int) {}
companion object {
fun foo() {}
}
}
@@ -0,0 +1,32 @@
package
public open class A {
public constructor A()
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
// Static members
public final var a: kotlin.Int
public open fun baz(/*0*/ s: kotlin.String!): kotlin.Unit
public open fun foo(): kotlin.Unit
}
public open class K : A {
public constructor K()
public final val a: kotlin.Int = 1
public final fun baz(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public final fun foo(/*0*/ i: kotlin.Int): kotlin.Unit
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()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -0,0 +1,29 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: A.java
public class A {
public static void foo() {}
public static void baz(String s) {}
}
// FILE: B.java
public class B extends A {
public static void bar(int i) {}
}
// FILE: K.kt
open class K : B() {
<!ACCIDENTAL_OVERRIDE!>fun foo()<!> {}
fun foo(a: Any) {}
<!ACCIDENTAL_OVERRIDE!>fun bar(i: Int)<!> {}
fun bar(i: String) {}
fun baz(i: Int) {}
companion object {
fun foo() {}
fun bar(i: Int) {}
}
}
@@ -0,0 +1,45 @@
package
public open class A {
public constructor A()
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
// Static members
public open fun baz(/*0*/ s: kotlin.String!): kotlin.Unit
public open fun foo(): kotlin.Unit
}
public open class B : A {
public constructor B()
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
// Static members
public open fun bar(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun baz(/*0*/ s: kotlin.String!): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
}
public open class K : B {
public constructor K()
public final fun bar(/*0*/ i: kotlin.Int): kotlin.Unit
public final fun bar(/*0*/ i: kotlin.String): kotlin.Unit
public final fun baz(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public final fun foo(/*0*/ a: kotlin.Any): kotlin.Unit
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()
public final fun bar(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -0,0 +1,22 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: A.java
public interface A {
public String a = "";
public static void foo() {}
public static void baz(String s) {}
}
// FILE: K.kt
open class K : A {
val a = ""
fun foo() {}
fun foo(i: Int) {}
fun baz(i: Int) {}
companion object {
fun foo() {}
}
}
@@ -0,0 +1,31 @@
package
public interface A {
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
// Static members
public const final val a: kotlin.String = ""
public open fun baz(/*0*/ s: kotlin.String!): kotlin.Unit
public open fun foo(): kotlin.Unit
}
public open class K : A {
public constructor K()
public final val a: kotlin.String = ""
public final fun baz(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public final fun foo(/*0*/ i: kotlin.Int): kotlin.Unit
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()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -0,0 +1,29 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: A.java
public interface A {
public static void foo() {}
public static void baz(String s) {}
}
// FILE: B.java
public interface B extends A {
public static void bar(int i) {}
}
// FILE: K.kt
open class K : B {
fun foo() {}
fun foo(a: Any) {}
fun bar(i: Int) {}
fun bar(i: String) {}
fun baz(i: Int) {}
companion object {
fun foo() {}
fun bar(i: Int) {}
}
}
@@ -0,0 +1,41 @@
package
public interface A {
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
// Static members
public open fun baz(/*0*/ s: kotlin.String!): kotlin.Unit
public open fun foo(): kotlin.Unit
}
public interface B : A {
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
// Static members
public open fun bar(/*0*/ i: kotlin.Int): kotlin.Unit
}
public open class K : B {
public constructor K()
public final fun bar(/*0*/ i: kotlin.Int): kotlin.Unit
public final fun bar(/*0*/ i: kotlin.String): kotlin.Unit
public final fun baz(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public final fun foo(/*0*/ a: kotlin.Any): kotlin.Unit
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()
public final fun bar(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -0,0 +1,24 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// FILE: foo/A.java
package foo;
public class A {
private static void foo(int s) {}
static void bar(double s) {}
}
// FILE: K.kt
import foo.A
open class K : A() {
fun foo(i: Int) {}
fun bar(d: Double) {}
fun baz(i: Int) {}
companion object {
fun foo(i: Int) {}
fun bar(d: Double) {}
}
}
@@ -0,0 +1,34 @@
package
public open class K : foo.A {
public constructor K()
public final fun bar(/*0*/ d: kotlin.Double): kotlin.Unit
public final fun baz(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(/*0*/ i: kotlin.Int): kotlin.Unit
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()
public final fun bar(/*0*/ d: kotlin.Double): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun foo(/*0*/ i: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
package foo {
public open class A {
public constructor A()
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
// Static members
public/*package*/ open fun bar(/*0*/ s: kotlin.Double): kotlin.Unit
private open fun foo(/*0*/ s: kotlin.Int): kotlin.Unit
}
}