Support equals, hashCode, toString for ::-references without reflection
This commit is contained in:
+31
@@ -0,0 +1,31 @@
|
||||
// NO_KOTLIN_REFLECT
|
||||
|
||||
import kotlin.reflect.KCallable
|
||||
import kotlin.test.*
|
||||
|
||||
class M {
|
||||
fun foo() {}
|
||||
val bar = 1
|
||||
}
|
||||
|
||||
fun checkEquals(x: KCallable<*>, y: KCallable<*>) {
|
||||
assertEquals(x, y)
|
||||
assertEquals(y, x)
|
||||
assertEquals(x.hashCode(), y.hashCode())
|
||||
}
|
||||
|
||||
fun checkToString(x: KCallable<*>, expected: String) {
|
||||
assertEquals(expected + " (Kotlin reflection is not available)", x.toString())
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
checkEquals(M::foo, M::foo)
|
||||
checkEquals(M::bar, M::bar)
|
||||
checkEquals(::M, ::M)
|
||||
|
||||
checkToString(M::foo, "function foo")
|
||||
checkToString(M::bar, "property bar")
|
||||
checkToString(::M, "constructor")
|
||||
|
||||
return "OK"
|
||||
}
|
||||
Vendored
+24
@@ -0,0 +1,24 @@
|
||||
// NO_KOTLIN_REFLECT
|
||||
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.test.*
|
||||
|
||||
class M
|
||||
|
||||
fun check(x: KClass<*>) {
|
||||
assertEquals(x, x.java.kotlin)
|
||||
assertEquals(x.hashCode(), x.java.kotlin.hashCode())
|
||||
assertEquals(x.java.toString() + " (Kotlin reflection is not available)", x.toString())
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
check(M::class)
|
||||
check(String::class)
|
||||
check(Error::class)
|
||||
check(Int::class)
|
||||
check(java.lang.Integer::class)
|
||||
check(MutableList::class)
|
||||
check(Array<String>::class)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+21
@@ -4022,6 +4022,27 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/noKotlinReflect/simpleClassLiterals.kt");
|
||||
doTestWithStdlib(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/codegen/boxWithStdlib/reflection/noKotlinReflect/methodsFromAny")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class MethodsFromAny extends AbstractBlackBoxCodegenTest {
|
||||
public void testAllFilesPresentInMethodsFromAny() throws Exception {
|
||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxWithStdlib/reflection/noKotlinReflect/methodsFromAny"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("callableReferences.kt")
|
||||
public void testCallableReferences() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/noKotlinReflect/methodsFromAny/callableReferences.kt");
|
||||
doTestWithStdlib(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("classReference.kt")
|
||||
public void testClassReference() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/noKotlinReflect/methodsFromAny/classReference.kt");
|
||||
doTestWithStdlib(fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("compiler/testData/codegen/boxWithStdlib/reflection/parameters")
|
||||
|
||||
Reference in New Issue
Block a user