diff --git a/ChangeLog.md b/ChangeLog.md index c1613012a67..97a18d4fc76 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -110,6 +110,7 @@ These artifacts include extensions for the types available in the latter JDKs, s - [`KT-13059`](https://youtrack.jetbrains.com/issue/KT-13059) Fix error stepping on *Step Over* action in the end of while block - [`KT-13037`](https://youtrack.jetbrains.com/issue/KT-13037) Fix possible deadlock in debugger in 2016.1 and exception in 2016.2 +- [`KT-12651`](https://youtrack.jetbrains.com/issue/KT-12651) Fix exception in evaluate expression when bad identifier is used for marking object ## 1.0.3 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 1abea0a9dbf..4004f7b6704 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinCodeFragmentFactory.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinCodeFragmentFactory.kt @@ -43,14 +43,13 @@ import org.jetbrains.eval4j.jdi.asValue import org.jetbrains.kotlin.asJava.KtLightClass import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils +import org.jetbrains.kotlin.idea.core.quoteIfNeeded 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.core.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 import org.jetbrains.kotlin.types.KotlinType @@ -245,10 +244,12 @@ class KotlinCodeFragmentFactory: CodeFragmentFactory() { fun createCodeFragmentForLabeledObjects(project: Project, markupMap: Map<*, ValueMarkup>): Pair> { val sb = StringBuilder() val labeledObjects = HashMap() + val psiNameHelper = PsiNameHelper.getInstance(project) + val entrySet: Set> = markupMap.entries for ((value, markup) in entrySet) { val labelName = markup.text - if (!Name.isValidIdentifier(labelName)) continue + if (!psiNameHelper.isIdentifier(labelName)) continue val objectRef = value as? Value ?: continue diff --git a/idea/testData/debugger/tinyApp/outs/lIdentifier.out b/idea/testData/debugger/tinyApp/outs/lIdentifier.out new file mode 100644 index 00000000000..3f6da8f3da8 --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/lIdentifier.out @@ -0,0 +1,8 @@ +LineBreakpoint created at lIdentifier.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! lIdentifier.LIdentifierKt +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +lIdentifier.kt:10 +Compile bytecode for a +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/labels/lIdentifier.kt b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/labels/lIdentifier.kt new file mode 100644 index 00000000000..330d0a6d337 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/labels/lIdentifier.kt @@ -0,0 +1,20 @@ +package lIdentifier + +fun main(args: Array) { + val a = 1 + val b = 1 + val c = 1 + val d = 1 + val e = 1 + //Breakpoint! + val f = 1 +} + +// DEBUG_LABEL: a = 0 +// DEBUG_LABEL: b = +// DEBUG_LABEL: c = for +// DEBUG_LABEL: d = * +// DEBUG_LABEL: e = e-e + +// EXPRESSION: a +// 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 8c068c52eba..e6058533490 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java @@ -711,6 +711,12 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat doSingleBreakpointTest(fileName); } + @TestMetadata("lIdentifier.kt") + public void testLIdentifier() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/labels/lIdentifier.kt"); + doSingleBreakpointTest(fileName); + } + @TestMetadata("lSeveralLabels.kt") public void testLSeveralLabels() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/labels/lSeveralLabels.kt");