Fix KClassOrigin for non-Kotlin classes
Check against presence of KotlinClass annotation
This commit is contained in:
@@ -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]}"
|
||||
}
|
||||
+5
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user