diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinEditorTextProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinEditorTextProvider.kt index f381549ab40..0c9cdca28f2 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinEditorTextProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/KotlinEditorTextProvider.kt @@ -70,42 +70,20 @@ class KotlinEditorTextProvider : EditorTextProvider { } } + fun KtExpression.qualifiedParentOrSelf(isSelector: Boolean = true): KtExpression { + val parent = parent + return if (parent is KtQualifiedExpression && (!isSelector || parent.selectorExpression == this)) parent else this + } + val parent = ktElement.parent val newExpression = when (parent) { is KtThisExpression -> parent - is KtSuperExpression -> { - val pparent = parent.parent - when (pparent) { - is KtQualifiedExpression -> pparent - else -> parent - } - } - is KtReferenceExpression -> { - val pparent = parent.parent - if (pparent is KtQualifiedExpression && pparent.selectorExpression == parent) { - pparent - } - else { - parent - } - } - is KtQualifiedExpression -> { - if (parent.receiverExpression != ktElement) { - parent - } - else { - null - } - } - is KtOperationExpression -> { - if (parent.operationReference == ktElement) { - parent - } - else { - null - } - } + is KtSuperExpression -> parent.qualifiedParentOrSelf(isSelector = false) + is KtArrayAccessExpression -> if (parent.arrayExpression == ktElement) ktElement else parent.qualifiedParentOrSelf() + is KtReferenceExpression -> parent.qualifiedParentOrSelf() + is KtQualifiedExpression -> if (parent.receiverExpression != ktElement) parent else null + is KtOperationExpression -> if (parent.operationReference == ktElement) parent else null else -> null } diff --git a/idea/testData/debugger/selectExpression/arrayExpression.kt b/idea/testData/debugger/selectExpression/arrayExpression.kt new file mode 100644 index 00000000000..c0217e4aab7 --- /dev/null +++ b/idea/testData/debugger/selectExpression/arrayExpression.kt @@ -0,0 +1,5 @@ +fun foo(arr: Array) { + arr[0] +} + +// EXPECTED: arr \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/SelectExpressionForDebuggerTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/SelectExpressionForDebuggerTestGenerated.java index b620f5be8ec..3727338dc7e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/SelectExpressionForDebuggerTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/debugger/evaluate/SelectExpressionForDebuggerTestGenerated.java @@ -36,6 +36,11 @@ public class SelectExpressionForDebuggerTestGenerated extends AbstractSelectExpr runTest("idea/testData/debugger/selectExpression/annotation.kt"); } + @TestMetadata("arrayExpression.kt") + public void testArrayExpression() throws Exception { + runTest("idea/testData/debugger/selectExpression/arrayExpression.kt"); + } + @TestMetadata("binaryExpression.kt") public void testBinaryExpression() throws Exception { runTest("idea/testData/debugger/selectExpression/binaryExpression.kt");