Fix quick evaluation for array expressions (KT-13268)

This commit is contained in:
Yan Zhulanow
2018-11-30 21:10:57 +09:00
parent 4b4d8dd660
commit e6643ef2b7
3 changed files with 20 additions and 32 deletions
@@ -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
}
@@ -0,0 +1,5 @@
fun foo(arr: Array<String>) {
a<caret>rr[0]
}
// EXPECTED: arr
@@ -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");