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:
dnpetrov
2015-06-04 15:48:10 +03:00
parent 0bf249d6ae
commit 50ea67ba13
16 changed files with 392 additions and 30 deletions
@@ -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
}