diff --git a/compiler/testData/diagnostics/testsWithStdLib/javaForKClass.kt b/compiler/testData/diagnostics/testsWithStdLib/javaForKClass.kt new file mode 100644 index 00000000000..3a711f417bd --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/javaForKClass.kt @@ -0,0 +1,28 @@ +// !CHECK_TYPE + +// FILE: A.java +import kotlin.reflect.KClass; + +public class A { + public static A getA() { + return null; + } + + public static KClass getKClass() { + return null; + } +} + + +// types checked by txt file + +// FILE: 1.kt +inline fun test1() = X::class.java +inline fun test2() = X::class.java +inline fun test3() = X::class.java +inline fun test4() = X::class.java +inline fun test5() = X::class.java + +fun test6() = A.getA()::class.java +fun test7() = A.getKClass().java + diff --git a/compiler/testData/diagnostics/testsWithStdLib/javaForKClass.txt b/compiler/testData/diagnostics/testsWithStdLib/javaForKClass.txt new file mode 100644 index 00000000000..ce4c376df21 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/javaForKClass.txt @@ -0,0 +1,20 @@ +package + +public inline fun test1(): java.lang.Class +public inline fun test2(): java.lang.Class +public inline fun test3(): java.lang.Class +public inline fun test4(): java.lang.Class +public inline fun test5(): java.lang.Class +public fun test6(): java.lang.Class +public fun test7(): java.lang.Class + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + // Static members + public open fun getA(): A! + public open fun getKClass(): kotlin.reflect.KClass! +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java index a8f2e3167b8..31d4234a037 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java @@ -108,6 +108,12 @@ public class DiagnosticsTestWithStdLibGenerated extends AbstractDiagnosticsTestW doTest(fileName); } + @TestMetadata("javaForKClass.kt") + public void testJavaForKClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/javaForKClass.kt"); + doTest(fileName); + } + @TestMetadata("kt9078.kt") public void testKt9078() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/kt9078.kt"); diff --git a/core/runtime.jvm/src/kotlin/jvm/JvmClassMapping.kt b/core/runtime.jvm/src/kotlin/jvm/JvmClassMapping.kt index 2a6a7e10b83..b098885542e 100644 --- a/core/runtime.jvm/src/kotlin/jvm/JvmClassMapping.kt +++ b/core/runtime.jvm/src/kotlin/jvm/JvmClassMapping.kt @@ -33,7 +33,8 @@ import java.lang.Short as JavaLangShort /** * Returns a Java [Class] instance corresponding to the given [KClass] instance. */ -public val KClass.java: Class +@Suppress("UPPER_BOUND_VIOLATED") +public val KClass.java: Class @JvmName("getJavaClass") get() = (this as ClassBasedDeclarationContainer).jClass as Class diff --git a/idea/testData/quickfix/addGenericUpperBound/kClassRuntime.kt b/idea/testData/quickfix/addGenericUpperBound/kClassRuntime.kt index 16fcc9096f3..b5e3acdbf80 100644 --- a/idea/testData/quickfix/addGenericUpperBound/kClassRuntime.kt +++ b/idea/testData/quickfix/addGenericUpperBound/kClassRuntime.kt @@ -1,3 +1,7 @@ // "Add 'kotlin.Any' as upper bound for E" "true" +import kotlin.reflect.KClass -inline fun bar() = E::class.java + +inline fun bar() = E::class.oldJava + +val KClass.oldJava get() = java diff --git a/idea/testData/quickfix/addGenericUpperBound/kClassRuntime.kt.after b/idea/testData/quickfix/addGenericUpperBound/kClassRuntime.kt.after index 8de47854070..60835471d0c 100644 --- a/idea/testData/quickfix/addGenericUpperBound/kClassRuntime.kt.after +++ b/idea/testData/quickfix/addGenericUpperBound/kClassRuntime.kt.after @@ -1,3 +1,7 @@ // "Add 'kotlin.Any' as upper bound for E" "true" +import kotlin.reflect.KClass -inline fun bar() = E::class.java + +inline fun bar() = E::class.oldJava + +val KClass.oldJava get() = java