diff --git a/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/variables/EvaluatorValueConverter.kt b/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/variables/EvaluatorValueConverter.kt index 1e9b8cfe365..36dc7f9a652 100644 --- a/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/variables/EvaluatorValueConverter.kt +++ b/idea/jvm-debugger/jvm-debugger-evaluation/src/org/jetbrains/kotlin/idea/debugger/evaluate/variables/EvaluatorValueConverter.kt @@ -50,6 +50,11 @@ class EvaluatorValueConverter(val context: ExecutionContext) { return true } + if (requestedType == AsmTypes.K_CLASS_TYPE && actualType == AsmTypes.JAVA_CLASS_TYPE) { + // KClass can be represented as a Java class for simpler cases. See BoxingInterpreter.isJavaLangClassBoxing(). + return true + } + val unwrappedActualType = unwrap(actualType) val unwrappedRequestedType = unwrap(requestedType) return unwrappedActualType == unwrappedRequestedType diff --git a/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinEvaluateExpressionTestGenerated.java b/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinEvaluateExpressionTestGenerated.java index be354077583..9eccc53170f 100644 --- a/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinEvaluateExpressionTestGenerated.java +++ b/idea/jvm-debugger/jvm-debugger-test/test/org/jetbrains/kotlin/idea/debugger/test/KotlinEvaluateExpressionTestGenerated.java @@ -260,6 +260,11 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/javaStaticMethods.kt"); } + @TestMetadata("kClass.kt") + public void testKClass() throws Exception { + runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kClass.kt"); + } + @TestMetadata("kt12206BasePropertyWithoutBackingField.kt") public void testKt12206BasePropertyWithoutBackingField() throws Exception { runTest("idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kt12206BasePropertyWithoutBackingField.kt"); diff --git a/idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kClass.kt b/idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kClass.kt new file mode 100644 index 00000000000..43a3dfa850d --- /dev/null +++ b/idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kClass.kt @@ -0,0 +1,23 @@ +package test + +class Foo + +fun main() { + val cls = Foo::class + val cls2 = Foo::class + val cls3 = Foo::class.java + + //Breakpoint! + foo(cls2) +} + +private fun foo(a: Any?) {} + +// EXPRESSION: cls +// RESULT: instance of java.lang.Class(reflected class=test.Foo, id=ID): Ljava/lang/Class; + +// EXPRESSION: cls2 +// RESULT: instance of kotlin.jvm.internal.ClassReference(id=ID): Lkotlin/jvm/internal/ClassReference; + +// EXPRESSION: cls3 +// RESULT: instance of java.lang.Class(reflected class=test.Foo, id=ID): Ljava/lang/Class; \ No newline at end of file diff --git a/idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kClass.out b/idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kClass.out new file mode 100644 index 00000000000..413c81f1214 --- /dev/null +++ b/idea/jvm-debugger/jvm-debugger-test/testData/evaluation/singleBreakpoint/kClass.out @@ -0,0 +1,10 @@ +LineBreakpoint created at kClass.kt:11 +Run Java +Connected to the target VM +kClass.kt:11 +Compile bytecode for cls +Compile bytecode for cls2 +Compile bytecode for cls3 +Disconnected from the target VM + +Process finished with exit code 0