KT-43525 forbid @JvmOverloads on mangled funs and hidden constructors

This commit is contained in:
Dmitry Petrov
2020-11-24 14:22:47 +03:00
parent ca78261d7f
commit 3a166f3592
18 changed files with 218 additions and 26 deletions
@@ -0,0 +1,30 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// !LANGUAGE: +InlineClasses
inline class Z(val x: Int)
@JvmOverloads
fun testTopLevelFunction1(z: Z, x: Int = 0) {}
@JvmOverloads
fun testTopLevelFunction2(x: Int, z: Z = Z(0)) {}
@JvmOverloads
fun testTopLevelFunction3(x: Int = 0): Z = Z(x)
class C {
@JvmOverloads
constructor(i: Int, z: Z = Z(0))
@JvmOverloads
constructor(s: String, z: Z, i: Int = 0)
@JvmOverloads
fun testMemberFunction1(z: Z, x: Int = 0) {}
@JvmOverloads
fun testMemberFunction2(x: Int, z: Z = Z(0)) {}
@JvmOverloads
fun testMemberFunction3(x: Int = 0): Z = Z(x)
}
@@ -0,0 +1,30 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// !LANGUAGE: +InlineClasses
inline class Z(val x: Int)
<!OVERLOADS_ANNOTATION_MANGLED_FUNCTION!>@JvmOverloads<!>
fun testTopLevelFunction1(z: Z, x: Int = 0) {}
<!OVERLOADS_ANNOTATION_MANGLED_FUNCTION!>@JvmOverloads<!>
fun testTopLevelFunction2(x: Int, z: Z = Z(0)) {}
@JvmOverloads
fun testTopLevelFunction3(x: Int = 0): Z = Z(x)
class C {
<!OVERLOADS_ANNOTATION_HIDDEN_CONSTRUCTOR!>@JvmOverloads<!>
constructor(i: Int, z: Z = Z(0))
<!OVERLOADS_ANNOTATION_HIDDEN_CONSTRUCTOR!>@JvmOverloads<!>
constructor(s: String, z: Z, i: Int = 0)
<!OVERLOADS_ANNOTATION_MANGLED_FUNCTION!>@JvmOverloads<!>
fun testMemberFunction1(z: Z, x: Int = 0) {}
<!OVERLOADS_ANNOTATION_MANGLED_FUNCTION!>@JvmOverloads<!>
fun testMemberFunction2(x: Int, z: Z = Z(0)) {}
<!OVERLOADS_ANNOTATION_MANGLED_FUNCTION!>@JvmOverloads<!>
fun testMemberFunction3(x: Int = 0): Z = Z(x)
}
@@ -0,0 +1,24 @@
package
@kotlin.jvm.JvmOverloads public fun testTopLevelFunction1(/*0*/ z: Z, /*1*/ x: kotlin.Int = ...): kotlin.Unit
@kotlin.jvm.JvmOverloads public fun testTopLevelFunction2(/*0*/ x: kotlin.Int, /*1*/ z: Z = ...): kotlin.Unit
@kotlin.jvm.JvmOverloads public fun testTopLevelFunction3(/*0*/ x: kotlin.Int = ...): Z
public final class C {
@kotlin.jvm.JvmOverloads public constructor C(/*0*/ i: kotlin.Int, /*1*/ z: Z = ...)
@kotlin.jvm.JvmOverloads public constructor C(/*0*/ s: kotlin.String, /*1*/ z: Z, /*2*/ i: 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
@kotlin.jvm.JvmOverloads public final fun testMemberFunction1(/*0*/ z: Z, /*1*/ x: kotlin.Int = ...): kotlin.Unit
@kotlin.jvm.JvmOverloads public final fun testMemberFunction2(/*0*/ x: kotlin.Int, /*1*/ z: Z = ...): kotlin.Unit
@kotlin.jvm.JvmOverloads public final fun testMemberFunction3(/*0*/ x: kotlin.Int = ...): Z
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final inline class Z {
public constructor Z(/*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
}