From 5c04959871c044cc45b19bf04768b39c3f2b31cb Mon Sep 17 00:00:00 2001 From: Natalia Ukhorskaya Date: Thu, 24 Sep 2015 18:16:25 +0300 Subject: [PATCH] Debugger: fix evaluation for local classes #KT-5104 Fixed --- .../introduce/extractionEngine/extractorUtil.kt | 5 ++++- .../debugger/tinyApp/outs/localClass.out | 9 +++++++++ .../src/evaluate/singleBreakpoint/localClass.kt | 17 +++++++++++++++++ .../KotlinEvaluateExpressionTestGenerated.java | 6 ++++++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 idea/testData/debugger/tinyApp/outs/localClass.out create mode 100644 idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/localClass.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt index 17ac0c836d5..f5219fa97b5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/extractorUtil.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.idea.core.* import org.jetbrains.kotlin.idea.core.refactoring.isMultiLine import org.jetbrains.kotlin.idea.intentions.ConvertToExpressionBodyIntention @@ -44,6 +45,7 @@ import org.jetbrains.kotlin.psi.codeFragmentUtil.debugTypeInfo import org.jetbrains.kotlin.psi.codeFragmentUtil.suppressDiagnosticsInDebugMode import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.renderer.DescriptorRenderer +import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.isFlexible @@ -122,7 +124,8 @@ fun ExtractionGeneratorConfiguration.getDeclarationText( } fun JetType.isSpecial(): Boolean { - return this.getConstructor().getDeclarationDescriptor()?.getName()?.isSpecial() ?: false + val classDescriptor = this.constructor.declarationDescriptor as? ClassDescriptor ?: return false + return classDescriptor.name.isSpecial || DescriptorUtils.isLocal(classDescriptor) } fun createNameCounterpartMap(from: JetElement, to: JetElement): Map { diff --git a/idea/testData/debugger/tinyApp/outs/localClass.out b/idea/testData/debugger/tinyApp/outs/localClass.out new file mode 100644 index 00000000000..0f491981ee2 --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/localClass.out @@ -0,0 +1,9 @@ +LineBreakpoint created at localClass.kt:10 +!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! localClass.LocalClassPackage +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +localClass.kt:10 +Compile bytecode for local +Compile bytecode for local.test() +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/localClass.kt b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/localClass.kt new file mode 100644 index 00000000000..227585e2861 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/localClass.kt @@ -0,0 +1,17 @@ +package localClass + +fun main(args: Array) { + class LocalClass { + fun test() = 1 + } + + val local = LocalClass() + //Breakpoint! + val a = 1 +} + +// EXPRESSION: local +// RESULT: instance of localClass.LocalClassKt$main$LocalClass(id=ID): LlocalClass/LocalClassKt$main$LocalClass; + +// EXPRESSION: local.test() +// RESULT: 1: I \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java index 4072e2dae1f..0597b321d0c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java @@ -181,6 +181,12 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat doSingleBreakpointTest(fileName); } + @TestMetadata("localClass.kt") + public void testLocalClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/localClass.kt"); + doSingleBreakpointTest(fileName); + } + @TestMetadata("localVariables.kt") public void testLocalVariables() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/localVariables.kt");