From 87c70aa2aef5403a17a22d6ae4fd9098b0391961 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 10 Jul 2015 21:01:57 +0300 Subject: [PATCH] Make Class<*>.kotlinPackage nullable --- .../reflection/mapping/package.kt | 2 +- .../packageForJavaStaticToString.kt | 8 -------- ...BlackBoxWithStdlibCodegenTestGenerated.java | 6 ------ .../src/kotlin/reflect/jvm/mapping.kt | 18 ++++++++++-------- 4 files changed, 11 insertions(+), 23 deletions(-) delete mode 100644 compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/packageForJavaStaticToString.kt diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/mapping/package.kt b/compiler/testData/codegen/boxWithStdlib/reflection/mapping/package.kt index 07d168a5a55..e2236c6769a 100644 --- a/compiler/testData/codegen/boxWithStdlib/reflection/mapping/package.kt +++ b/compiler/testData/codegen/boxWithStdlib/reflection/mapping/package.kt @@ -6,7 +6,7 @@ import kotlin.test.* fun box(): String { val facadeJClass = Class.forName("test.TestPackage") as Class - assertEquals(facadeJClass, facadeJClass.kotlinPackage.javaFacade) + assertEquals(facadeJClass, facadeJClass.kotlinPackage!!.javaFacade) assertEquals(facadeJClass, facadeJClass.kotlin.java) return "OK" diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/packageForJavaStaticToString.kt b/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/packageForJavaStaticToString.kt deleted file mode 100644 index 2d015d38f17..00000000000 --- a/compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/packageForJavaStaticToString.kt +++ /dev/null @@ -1,8 +0,0 @@ -import kotlin.test.* -import kotlin.reflect.jvm.kotlinPackage - -fun box(): String { - val p = javaClass().kotlinPackage - if ("$p" != "package java.lang.String") return "Fail: $p" - return "OK" -} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index 8db12308154..53462eac3a2 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -3177,12 +3177,6 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode doTestWithStdlib(fileName); } - @TestMetadata("packageForJavaStaticToString.kt") - public void testPackageForJavaStaticToString() throws Exception { - String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/packageForJavaStaticToString.kt"); - doTestWithStdlib(fileName); - } - @TestMetadata("packageToString.kt") public void testPackageToString() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/methodsFromAny/packageToString.kt"); diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/mapping.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/mapping.kt index 9ba00c2bb24..7bb9dd39767 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/mapping.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/mapping.kt @@ -18,10 +18,14 @@ package kotlin.reflect.jvm import java.lang.reflect.Field import java.lang.reflect.Method -import java.lang.reflect.Modifier -import kotlin.jvm.internal.Reflection -import kotlin.reflect.* -import kotlin.reflect.jvm.internal.* +import kotlin.reflect.KClass +import kotlin.reflect.KMutableProperty +import kotlin.reflect.KPackage +import kotlin.reflect.KProperty +import kotlin.reflect.jvm.internal.KClassImpl +import kotlin.reflect.jvm.internal.KMutablePropertyImpl +import kotlin.reflect.jvm.internal.KPackageImpl +import kotlin.reflect.jvm.internal.KPropertyImpl // Kotlin reflection -> Java reflection @@ -74,16 +78,14 @@ public val KMutableProperty<*>.javaSetter: Method? public val Class.kotlin: KClass get() = KClassImpl(this) -// TODO: getstatic $kotlinPackage -// TODO: make nullable or throw exception /** * Returns a [KPackage] instance corresponding to the Java [Class] instance. * The given class is generated from top level functions and properties in the Kotlin package. * See the [Kotlin language documentation](http://kotlinlang.org/docs/reference/java-interop.html#package-level-functions) * for more information. */ -public val Class<*>.kotlinPackage: KPackage - get() = KPackageImpl(this) +public val Class<*>.kotlinPackage: KPackage? + get() = if (getAnnotation(javaClass()) != null) KPackageImpl(this) else null /**