diff --git a/compiler/testData/codegen/boxWithJava/reflection/javaClassGetFunctions/J.java b/compiler/testData/codegen/boxWithJava/reflection/javaClassGetFunctions/J.java new file mode 100644 index 00000000000..e825ba543c3 --- /dev/null +++ b/compiler/testData/codegen/boxWithJava/reflection/javaClassGetFunctions/J.java @@ -0,0 +1,10 @@ +public class J { + public J() { + } + + public void member(String s) { + } + + public static void staticMethod(int x) { + } +} diff --git a/compiler/testData/codegen/boxWithJava/reflection/javaClassGetFunctions/K.kt b/compiler/testData/codegen/boxWithJava/reflection/javaClassGetFunctions/K.kt new file mode 100644 index 00000000000..248f0229e0b --- /dev/null +++ b/compiler/testData/codegen/boxWithJava/reflection/javaClassGetFunctions/K.kt @@ -0,0 +1,12 @@ +import kotlin.reflect.* +import kotlin.test.assertEquals + +fun box(): String { + assertEquals(listOf("equals", "hashCode", "member", "staticMethod", "toString"), J::class.members.map { it.name }.toSortedList()) + assertEquals(listOf("equals", "hashCode", "member", "staticMethod", "toString"), J::class.functions.map { it.name }.toSortedList()) + assertEquals(listOf("member", "staticMethod"), J::class.declaredFunctions.map { it.name }.toSortedList()) + + assertEquals(1, J::class.constructors.size()) + + return "OK" +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java index b5b429508fb..3849b652741 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java @@ -273,6 +273,12 @@ public class BlackBoxWithJavaCodegenTestGenerated extends AbstractBlackBoxCodege doTestWithJava(fileName); } + @TestMetadata("javaClassGetFunctions") + public void testJavaClassGetFunctions() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithJava/reflection/javaClassGetFunctions/"); + doTestWithJava(fileName); + } + @TestMetadata("javaMethodsSmokeTest") public void testJavaMethodsSmokeTest() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithJava/reflection/javaMethodsSmokeTest/"); diff --git a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaClass.kt b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaClass.kt index 5c916d36c06..0d21b4287a5 100644 --- a/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaClass.kt +++ b/core/descriptors.runtime/src/org/jetbrains/kotlin/load/java/structure/reflect/ReflectJavaClass.kt @@ -21,8 +21,6 @@ import org.jetbrains.kotlin.load.java.structure.JavaClassifierType import org.jetbrains.kotlin.load.java.structure.JavaType import org.jetbrains.kotlin.load.java.structure.JavaTypeSubstitutor import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.utils.emptyOrSingletonList -import java.lang.reflect.AnnotatedElement import java.lang.reflect.Method import java.util.Arrays @@ -49,12 +47,8 @@ public class ReflectJavaClass( override fun getOuterClass() = klass.getDeclaringClass()?.let(::ReflectJavaClass) override fun getSupertypes(): Collection { - val supertype = klass.getGenericSuperclass() - val superClassName = (supertype as? Class<*>)?.getName() - val supertypes = - (if (superClassName == "java.lang.Object") emptyList() else emptyOrSingletonList(supertype)) + - klass.getGenericInterfaces() - return supertypes.map(::ReflectJavaClassifierType) + if (klass == javaClass()) return emptyList() + return listOf(klass.genericSuperclass ?: javaClass(), *klass.genericInterfaces).map(::ReflectJavaClassifierType) } override fun getMethods() = klass.getDeclaredMethods()