KT-5524 Support [platformName] annotation for class members
@platformName is now supported for final non-overriding class member functions (including property accessors). Front-end provides diagnostics for inapplicable annotation cases. Code generation updated: - ignore kotlin.platform.platformName annotation for Java class methods; - bridges generation generates proper JVM declarations in case of methods renamed with @platformName. @platformName-related tests added. #KT-5524 Fixed
This commit is contained in:
+18
-1
@@ -4,4 +4,21 @@ import kotlin.platform.*
|
||||
@platformName("bar")
|
||||
fun foo(a: Any) {}
|
||||
|
||||
fun Any.foo() {}
|
||||
fun Any.foo() {}
|
||||
|
||||
@platformName("barInt")
|
||||
fun bar(x: List<Int>) {}
|
||||
|
||||
@platformName("barStr")
|
||||
fun bar(x: List<String>) {}
|
||||
|
||||
class C {
|
||||
var rwProp: Int
|
||||
@platformName("get_rwProp")
|
||||
get() = 0
|
||||
@platformName("set_rwProp")
|
||||
set(v) {}
|
||||
|
||||
fun getRwProp(): Int = 123
|
||||
fun setRwProp(v: Int) {}
|
||||
}
|
||||
|
||||
+13
-1
@@ -1,4 +1,16 @@
|
||||
package
|
||||
package
|
||||
|
||||
kotlin.platform.platformName(name = "barInt": kotlin.String) internal fun bar(/*0*/ x: kotlin.List<kotlin.Int>): kotlin.Unit
|
||||
kotlin.platform.platformName(name = "barStr": kotlin.String) internal fun bar(/*0*/ x: kotlin.List<kotlin.String>): kotlin.Unit
|
||||
kotlin.platform.platformName(name = "bar": kotlin.String) internal fun foo(/*0*/ a: kotlin.Any): kotlin.Unit
|
||||
internal fun kotlin.Any.foo(): kotlin.Unit
|
||||
|
||||
internal final class C {
|
||||
public constructor C()
|
||||
internal final var rwProp: kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
internal final fun getRwProp(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
internal final fun setRwProp(/*0*/ v: kotlin.Int): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
Vendored
+49
-1
@@ -4,4 +4,52 @@ import kotlin.platform.*
|
||||
<!CONFLICTING_JVM_DECLARATIONS!>@platformName("bar")
|
||||
fun foo(a: Any)<!> {}
|
||||
|
||||
<!CONFLICTING_JVM_DECLARATIONS!>fun bar(a: Any)<!> {}
|
||||
<!CONFLICTING_JVM_DECLARATIONS!>fun bar(a: Any)<!> {}
|
||||
|
||||
class C {
|
||||
<!CONFLICTING_JVM_DECLARATIONS!>@platformName("foo1")
|
||||
fun foo(list: List<Int>)<!> {}
|
||||
|
||||
<!CONFLICTING_JVM_DECLARATIONS!>@platformName("foo1")
|
||||
fun foo(list: List<String>)<!> {}
|
||||
}
|
||||
|
||||
// Conflicts in inheritance.
|
||||
|
||||
// A1 -> B1 with accidental override
|
||||
|
||||
open class A1 {
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("bar")<!>
|
||||
open fun foo() {}
|
||||
}
|
||||
|
||||
class B1 : A1() {
|
||||
<!ACCIDENTAL_OVERRIDE!>fun bar()<!> {}
|
||||
}
|
||||
|
||||
// A2 -> B2 with intended override and conflicting JVM declarations
|
||||
|
||||
open class A2 {
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("bar")<!>
|
||||
open fun foo() {}
|
||||
}
|
||||
|
||||
class <!CONFLICTING_JVM_DECLARATIONS!>B2<!> : A2() {
|
||||
override fun foo() {}
|
||||
|
||||
<!CONFLICTING_JVM_DECLARATIONS!>fun bar()<!> {}
|
||||
}
|
||||
|
||||
// A3 -> B3 -> C3 with accidental override
|
||||
|
||||
open class A3 {
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("bar")<!>
|
||||
open fun foo() {}
|
||||
}
|
||||
|
||||
open class B3: A3() {
|
||||
}
|
||||
|
||||
class C3: B3() {
|
||||
<!ACCIDENTAL_OVERRIDE!>fun bar()<!> {}
|
||||
}
|
||||
Vendored
+69
-1
@@ -1,4 +1,72 @@
|
||||
package
|
||||
package
|
||||
|
||||
internal fun bar(/*0*/ a: kotlin.Any): kotlin.Unit
|
||||
kotlin.platform.platformName(name = "bar": kotlin.String) internal fun foo(/*0*/ a: kotlin.Any): kotlin.Unit
|
||||
|
||||
internal open class A1 {
|
||||
public constructor A1()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
kotlin.platform.platformName(name = "bar": kotlin.String) internal open fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal open class A2 {
|
||||
public constructor A2()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
kotlin.platform.platformName(name = "bar": kotlin.String) internal open fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal open class A3 {
|
||||
public constructor A3()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
kotlin.platform.platformName(name = "bar": kotlin.String) internal open fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal final class B1 : A1 {
|
||||
public constructor B1()
|
||||
internal final fun bar(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
kotlin.platform.platformName(name = "bar": kotlin.String) internal open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal final class B2 : A2 {
|
||||
public constructor B2()
|
||||
internal final fun bar(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
internal open override /*1*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal open class B3 : A3 {
|
||||
public constructor B3()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
kotlin.platform.platformName(name = "bar": kotlin.String) internal open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal final class C {
|
||||
public constructor C()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
kotlin.platform.platformName(name = "foo1": kotlin.String) internal final fun foo(/*0*/ list: kotlin.List<kotlin.Int>): kotlin.Unit
|
||||
kotlin.platform.platformName(name = "foo1": kotlin.String) internal final fun foo(/*0*/ list: kotlin.List<kotlin.String>): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
internal final class C3 : B3 {
|
||||
public constructor C3()
|
||||
internal final fun bar(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
kotlin.platform.platformName(name = "bar": kotlin.String) internal open override /*1*/ /*fake_override*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user