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:
Vendored
+39
-15
@@ -8,10 +8,10 @@ fun foo() {}
|
||||
@platformName("b")
|
||||
fun Any.foo() {}
|
||||
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("c")<!>
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("c")<!>
|
||||
val px = 1
|
||||
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("d")<!>
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("d")<!>
|
||||
val Any.px : Int
|
||||
get() = 1
|
||||
|
||||
@@ -31,37 +31,61 @@ var vardef: Int = 1
|
||||
@platformName("i")
|
||||
set
|
||||
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("C")<!>
|
||||
class C <!INAPPLICABLE_ANNOTATION!>platformName("primary")<!> constructor() {
|
||||
<!INAPPLICABLE_ANNOTATION!>platformName("ctr")<!> constructor(x: Int): this() {}
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("a")<!>
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("C")<!>
|
||||
class C <!INAPPLICABLE_PLATFORM_NAME!>platformName("primary")<!> constructor() {
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>platformName("ctr")<!> constructor(x: Int): this() {}
|
||||
|
||||
@platformName("a")
|
||||
fun foo() {}
|
||||
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("b")<!>
|
||||
@platformName("b")
|
||||
fun Any.foo() {}
|
||||
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("c")<!>
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("c")<!>
|
||||
val px = 1
|
||||
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("d")<!>
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("d")<!>
|
||||
val Any.px : Int
|
||||
get() = 1
|
||||
|
||||
val valx: Int
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("e")<!>
|
||||
@platformName("e")
|
||||
get() = 1
|
||||
|
||||
var varx: Int
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("f")<!>
|
||||
@platformName("f")
|
||||
get() = 1
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("g")<!>
|
||||
@platformName("g")
|
||||
set(v) {}
|
||||
}
|
||||
|
||||
fun foo1() {
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("a")<!>
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("a")<!>
|
||||
fun foo() {}
|
||||
|
||||
<!INAPPLICABLE_ANNOTATION!>@platformName("a")<!>
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("a")<!>
|
||||
val x = 1
|
||||
}
|
||||
}
|
||||
|
||||
abstract class AB {
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("AB_absFun1")<!>
|
||||
abstract fun absFun1()
|
||||
|
||||
abstract fun absFun2()
|
||||
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("AB_openFun")<!>
|
||||
open fun openFun() {}
|
||||
}
|
||||
|
||||
class D: AB() {
|
||||
override fun absFun1() {}
|
||||
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("D_absFun2")<!>
|
||||
override fun absFun2() {}
|
||||
|
||||
<!INAPPLICABLE_PLATFORM_NAME!>@platformName("D_openFun")<!>
|
||||
final override fun openFun() {}
|
||||
|
||||
@platformName("D_finalFun")
|
||||
fun finalFun() {}
|
||||
}
|
||||
|
||||
Vendored
+22
-1
@@ -1,4 +1,4 @@
|
||||
package
|
||||
package
|
||||
|
||||
kotlin.platform.platformName(name = "c": kotlin.String) internal val px: kotlin.Int = 1
|
||||
internal val valx: kotlin.Int
|
||||
@@ -9,6 +9,16 @@ kotlin.platform.platformName(name = "a": kotlin.String) internal fun foo(): kotl
|
||||
internal fun foo1(): kotlin.Unit
|
||||
kotlin.platform.platformName(name = "b": kotlin.String) internal fun kotlin.Any.foo(): kotlin.Unit
|
||||
|
||||
internal abstract class AB {
|
||||
public constructor AB()
|
||||
kotlin.platform.platformName(name = "AB_absFun1": kotlin.String) internal abstract fun absFun1(): kotlin.Unit
|
||||
internal abstract fun absFun2(): 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
|
||||
kotlin.platform.platformName(name = "AB_openFun": kotlin.String) internal open fun openFun(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
kotlin.platform.platformName(name = "C": kotlin.String) internal final class C {
|
||||
kotlin.platform.platformName(name = "primary": kotlin.String) public constructor C()
|
||||
kotlin.platform.platformName(name = "ctr": kotlin.String) public constructor C(/*0*/ x: kotlin.Int)
|
||||
@@ -22,3 +32,14 @@ kotlin.platform.platformName(name = "C": kotlin.String) internal final class C {
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
kotlin.platform.platformName(name = "b": kotlin.String) internal final fun kotlin.Any.foo(): kotlin.Unit
|
||||
}
|
||||
|
||||
internal final class D : AB {
|
||||
public constructor D()
|
||||
internal open override /*1*/ fun absFun1(): kotlin.Unit
|
||||
kotlin.platform.platformName(name = "D_absFun2": kotlin.String) internal open override /*1*/ fun absFun2(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
kotlin.platform.platformName(name = "D_finalFun": kotlin.String) internal final fun finalFun(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
kotlin.platform.platformName(name = "D_openFun": kotlin.String) internal final override /*1*/ fun openFun(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user