From 2ce9783214d07981c53b33a6d4d21d52cce44163 Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Tue, 29 Mar 2016 12:37:06 +0300 Subject: [PATCH] Debugger: remove useless casts from expressions converted from java --- .../evaluate/KotlinCodeFragmentFactory.kt | 27 ++++++++++++------- .../tinyApp/outs/createExpressionSimple.out | 8 +++--- .../frame/createExpressionSimple.kt | 2 +- 3 files changed, 23 insertions(+), 14 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinCodeFragmentFactory.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinCodeFragmentFactory.kt index cbb4da9dfec..acd33a48ef6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinCodeFragmentFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinCodeFragmentFactory.kt @@ -42,9 +42,12 @@ import org.jetbrains.kotlin.asJava.KtLightClass import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.idea.debugger.KotlinEditorTextProvider +import org.jetbrains.kotlin.idea.j2k.J2kPostProcessor import org.jetbrains.kotlin.idea.refactoring.j2kText import org.jetbrains.kotlin.idea.refactoring.quoteIfNeeded import org.jetbrains.kotlin.idea.util.IdeDescriptorRenderers +import org.jetbrains.kotlin.idea.util.application.executeWriteCommand +import org.jetbrains.kotlin.j2k.AfterConversionPass import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getElementTextWithContext @@ -128,18 +131,22 @@ class KotlinCodeFragmentFactory: CodeFragmentFactory() { } if (javaExpression != null) { - val newText = javaExpression.j2kText() - if (newText != null) { - val convertedFragment = KtExpressionCodeFragment( - project, - kotlinCodeFragment.name, - newText, - kotlinCodeFragment.importsToString(), - kotlinCodeFragment.context - ) + var convertedFragment: KtExpressionCodeFragment? = null + project.executeWriteCommand("Convert java expression to kotlin in Evaluate Expression") { + val newText = javaExpression.j2kText() + if (newText != null) { + convertedFragment = KtExpressionCodeFragment( + project, + kotlinCodeFragment.name, + newText, + kotlinCodeFragment.importsToString(), + kotlinCodeFragment.context + ) - return convertedFragment + AfterConversionPass(project, J2kPostProcessor(formatCode = false)).run(convertedFragment!!, range = null) + } } + return convertedFragment ?: kotlinCodeFragment } } return kotlinCodeFragment diff --git a/idea/testData/debugger/tinyApp/outs/createExpressionSimple.out b/idea/testData/debugger/tinyApp/outs/createExpressionSimple.out index bfaf72d4984..636ca7b3c0e 100644 --- a/idea/testData/debugger/tinyApp/outs/createExpressionSimple.out +++ b/idea/testData/debugger/tinyApp/outs/createExpressionSimple.out @@ -1,7 +1,7 @@ -LineBreakpoint created at createExpressionSimple.kt:14 +LineBreakpoint created at createExpressionSimple.kt:15 !JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !OUTPUT_PATH!;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! createExpressionSimple.CreateExpressionSimpleKt Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' -createExpressionSimple.kt:14 +createExpressionSimple.kt:15 package createExpressionSimple class MyClass: Base() { @@ -14,6 +14,7 @@ open class Base { fun main(args: Array) { val myClass: Base = MyClass() + val myBase = Base() //Breakpoint! val a = 1 } @@ -21,12 +22,13 @@ fun main(args: Array) { // PRINT_FRAME // DESCRIPTOR_VIEW_OPTIONS: NAME_AND_EXPRESSION - frame = main local = args (expression = args) local = myClass (expression = myClass) field = i (expression = (myClass as MyClass).i) field = baseI (expression = (myClass as MyClass).baseI) + local = myBase (expression = myBase) + field = baseI (expression = myBase.baseI) Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' Process finished with exit code 0 diff --git a/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/frame/createExpressionSimple.kt b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/frame/createExpressionSimple.kt index 5f4cdb93fda..577ee8b7e7a 100644 --- a/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/frame/createExpressionSimple.kt +++ b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/frame/createExpressionSimple.kt @@ -10,10 +10,10 @@ open class Base { fun main(args: Array) { val myClass: Base = MyClass() + val myBase = Base() //Breakpoint! val a = 1 } // PRINT_FRAME // DESCRIPTOR_VIEW_OPTIONS: NAME_AND_EXPRESSION -