Fix mapping of jvmStatic functions

#KT-8800 Fixed
This commit is contained in:
Alexander Udalov
2015-08-20 16:10:12 -07:00
parent 9a8cf23ed4
commit fd97383f8a
4 changed files with 94 additions and 6 deletions
@@ -0,0 +1,33 @@
import kotlin.platform.platformStatic as static
import kotlin.reflect.jvm.*
import kotlin.test.assertEquals
import kotlin.test.failsWith
class C {
companion object {
@static fun foo(s: String): Int = s.length()
}
}
fun box(): String {
val foo = C.Companion::foo
val j = foo.javaMethod ?: return "Fail: no Java method found for C::foo"
assertEquals(3, j.invoke(C, "abc"))
val k = j.kotlinFunction ?: return "Fail: no Kotlin function found for Java method C::foo"
assertEquals(3, k.call(C, "def"))
val staticMethod = javaClass<C>().getDeclaredMethod("foo", javaClass<String>())
val k2 = staticMethod.kotlinFunction ?:
return "Fail: no Kotlin function found for static bridge for @jvmStatic method in companion object C::foo"
assertEquals(3, k2.call(C, "ghi"))
failsWith(javaClass<NullPointerException>()) { k2.call(null, "")!! }
val j2 = k2.javaMethod
assertEquals(j, j2)
return "OK"
}
@@ -0,0 +1,19 @@
import kotlin.platform.platformStatic as static
import kotlin.reflect.jvm.*
import kotlin.test.assertEquals
object O {
@static fun foo(s: String): Int = s.length()
}
fun box(): String {
val foo = O::foo
val j = foo.javaMethod ?: return "Fail: no Java method found for O::foo"
assertEquals(3, j.invoke(null, "abc"))
val k = j.kotlinFunction ?: return "Fail: no Kotlin function found for Java method O::foo"
assertEquals(3, k.call(O, "def"))
return "OK"
}
@@ -3396,6 +3396,27 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
doTestWithStdlib(fileName);
}
@TestMetadata("compiler/testData/codegen/boxWithStdlib/reflection/mapping/platformStatic")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)
public static class PlatformStatic extends AbstractBlackBoxCodegenTest {
public void testAllFilesPresentInPlatformStatic() throws Exception {
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxWithStdlib/reflection/mapping/platformStatic"), Pattern.compile("^(.+)\\.kt$"), true);
}
@TestMetadata("companionObjectFunction.kt")
public void testCompanionObjectFunction() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/mapping/platformStatic/companionObjectFunction.kt");
doTestWithStdlib(fileName);
}
@TestMetadata("objectFunction.kt")
public void testObjectFunction() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/mapping/platformStatic/objectFunction.kt");
doTestWithStdlib(fileName);
}
}
@TestMetadata("compiler/testData/codegen/boxWithStdlib/reflection/mapping/types")
@TestDataPath("$PROJECT_ROOT")
@RunWith(JUnit3RunnerWithInners.class)