Fix KClassOrigin for non-Kotlin classes

Check against presence of KotlinClass annotation
This commit is contained in:
Alexander Udalov
2014-06-25 04:02:03 +04:00
parent 8b619eceed
commit 1ad037f621
6 changed files with 19 additions and 1 deletions
@@ -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
@@ -0,0 +1,3 @@
public class J extends K {
public final int value = 42;
}
@@ -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]}"
}
@@ -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/");
}
}
@@ -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<out T>(
val jClass: Class<T>
) : KClass<T> {
val origin: KClassOrigin =
if (K_OBJECT_CLASS.isAssignableFrom(jClass)) {
if (K_OBJECT_CLASS.isAssignableFrom(jClass) && jClass.isAnnotationPresent(KOTLIN_CLASS_ANNOTATION_CLASS)) {
KClassOrigin.KOTLIN
}
else {