Handle unsafe implicit invoke on array access expression (#1151)

This commit is contained in:
nd
2017-07-07 16:29:11 +02:00
committed by Dmitry Jemerov
parent 8cc9195fae
commit fae8efdc7f
4 changed files with 20 additions and 1 deletions
@@ -21,6 +21,7 @@ import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention
import org.jetbrains.kotlin.lexer.KtTokens
@@ -92,7 +93,7 @@ class ReplaceInfixOrOperatorCallFix(
companion object : KotlinSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
val expression = diagnostic.psiElement
if (expression is KtArrayAccessExpression) {
if (expression is KtArrayAccessExpression && diagnostic.factory != Errors.UNSAFE_IMPLICIT_INVOKE_CALL) {
if (expression.arrayExpression == null) return null
return ReplaceInfixOrOperatorCallFix(expression, expression.shouldHaveNotNullType())
}
@@ -0,0 +1,6 @@
// "Replace with safe (?.) call" "true"
// WITH_RUNTIME
val functions: Map<String, () -> Any> = TODO()
fun run(name: String) = functions[name]<caret>()
@@ -0,0 +1,6 @@
// "Replace with safe (?.) call" "true"
// WITH_RUNTIME
val functions: Map<String, () -> Any> = TODO()
fun run(name: String) = functions[name]?.invoke()
@@ -8837,6 +8837,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
doTest(fileName);
}
@TestMetadata("invokeOperator.kt")
public void testInvokeOperator() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/replaceWithSafeCall/invokeOperator.kt");
doTest(fileName);
}
@TestMetadata("let.kt")
public void testLet() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/replaceWithSafeCall/let.kt");