diff --git a/compiler/android-tests/tests/org/jetbrains/jet/compiler/android/SpecialFiles.java b/compiler/android-tests/tests/org/jetbrains/jet/compiler/android/SpecialFiles.java index 4056960242a..d162776ed5a 100644 --- a/compiler/android-tests/tests/org/jetbrains/jet/compiler/android/SpecialFiles.java +++ b/compiler/android-tests/tests/org/jetbrains/jet/compiler/android/SpecialFiles.java @@ -57,6 +57,7 @@ public class SpecialFiles { private static void fillExcludedFiles() { excludedFiles.add("boxAgainstJava"); // Must compile Java files before + excludedFiles.add("boxWithJava"); // Must compile Java files before excludedFiles.add("boxMultiFile"); // MultiFileTest not supported yet excludedFiles.add("boxInline"); // MultiFileTest not supported yet diff --git a/compiler/testData/codegen/boxWithJava/.empty b/compiler/testData/codegen/boxWithJava/.empty deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/compiler/testData/codegen/boxWithJava/referenceToJavaFieldOfKotlinSubclass/J.java b/compiler/testData/codegen/boxWithJava/referenceToJavaFieldOfKotlinSubclass/J.java new file mode 100644 index 00000000000..9e92f8601ef --- /dev/null +++ b/compiler/testData/codegen/boxWithJava/referenceToJavaFieldOfKotlinSubclass/J.java @@ -0,0 +1,3 @@ +public class J extends K { + public final int value = 42; +} diff --git a/compiler/testData/codegen/boxWithJava/referenceToJavaFieldOfKotlinSubclass/K.kt b/compiler/testData/codegen/boxWithJava/referenceToJavaFieldOfKotlinSubclass/K.kt new file mode 100644 index 00000000000..79a425eb69b --- /dev/null +++ b/compiler/testData/codegen/boxWithJava/referenceToJavaFieldOfKotlinSubclass/K.kt @@ -0,0 +1,7 @@ +open class K + +fun box(): String { + val f = J::value + val a = J() + return if (f.get(a) == 42) "OK" else "Fail: ${f[a]}" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java index 612db880d58..525144c9800 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java @@ -36,4 +36,9 @@ public class BlackBoxWithJavaCodegenTestGenerated extends AbstractBlackBoxCodege JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/codegen/boxWithJava"), Pattern.compile("^([^\\.]+)$"), false); } + @TestMetadata("referenceToJavaFieldOfKotlinSubclass") + public void testReferenceToJavaFieldOfKotlinSubclass() throws Exception { + doTestWithJava("compiler/testData/codegen/boxWithJava/referenceToJavaFieldOfKotlinSubclass/"); + } + } diff --git a/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt b/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt index e191d9878b6..cb8d2f337b4 100644 --- a/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt +++ b/core/runtime.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt @@ -16,6 +16,8 @@ package kotlin.reflect.jvm.internal +import kotlin.reflect.jvm.KOTLIN_CLASS_ANNOTATION_CLASS + enum class KClassOrigin { BUILT_IN KOTLIN @@ -26,7 +28,7 @@ class KClassImpl( val jClass: Class ) : KClass { val origin: KClassOrigin = - if (K_OBJECT_CLASS.isAssignableFrom(jClass)) { + if (K_OBJECT_CLASS.isAssignableFrom(jClass) && jClass.isAnnotationPresent(KOTLIN_CLASS_ANNOTATION_CLASS)) { KClassOrigin.KOTLIN } else {