diff --git a/compiler/testData/codegen/regressions/kt715.kt b/compiler/testData/codegen/regressions/kt715.kt new file mode 100644 index 00000000000..f4128cdd526 --- /dev/null +++ b/compiler/testData/codegen/regressions/kt715.kt @@ -0,0 +1,11 @@ + +val test = "lala".javaClass + +val test2 = typeinfo().javaClassForType + +fun box(): String { + if(test.getCanonicalName() != "java.lang.String") return "fail" + System.out?.println(test2.getCanonicalName()) + if(test2.getCanonicalName() != "java.lang.Integer") return "fail" + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java b/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java index 434aa5106ca..5fe45a47098 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java @@ -72,4 +72,8 @@ public class StdlibTest extends CodegenTestCase { public void testKt828 () { blackBoxFile("regressions/kt828.kt"); } + + public void testKt715 () { + blackBoxFile("regressions/kt715.kt"); + } } diff --git a/stdlib/ktSrc/JavaLang.kt b/stdlib/ktSrc/JavaLang.kt new file mode 100644 index 00000000000..99da9daef6d --- /dev/null +++ b/stdlib/ktSrc/JavaLang.kt @@ -0,0 +1,10 @@ +package std + +import java.lang.Class +import java.lang.Object + +val T.javaClass : Class + get() = jet.runtime.Intrinsics.getJavaClass(this) as Class + +val TypeInfo.javaClassForType : Class + get() = (this as org.jetbrains.jet.rt.TypeInfoImpl).getJavaClass().sure() diff --git a/stdlib/src/jet/runtime/Intrinsics.java b/stdlib/src/jet/runtime/Intrinsics.java index d9a8f68ef7b..d1e0a6bf978 100644 --- a/stdlib/src/jet/runtime/Intrinsics.java +++ b/stdlib/src/jet/runtime/Intrinsics.java @@ -1,6 +1,7 @@ package jet.runtime; import jet.Function0; +import jet.TypeInfo; import java.util.ArrayList; @@ -18,6 +19,10 @@ public class Intrinsics { public static void throwNpe() { throw new JetNullPointerException(); } + + public static Class getJavaClass(T self) { + return (Class) self.getClass(); + } public static int compare(long thisVal, long anotherVal) { return (thisVal