Handle unsafe implicit invoke on array access expression (#1151)
This commit is contained in:
@@ -21,6 +21,7 @@ import com.intellij.openapi.editor.Editor
|
|||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
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.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention
|
import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
@@ -92,7 +93,7 @@ class ReplaceInfixOrOperatorCallFix(
|
|||||||
companion object : KotlinSingleIntentionActionFactory() {
|
companion object : KotlinSingleIntentionActionFactory() {
|
||||||
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
|
||||||
val expression = diagnostic.psiElement
|
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
|
if (expression.arrayExpression == null) return null
|
||||||
return ReplaceInfixOrOperatorCallFix(expression, expression.shouldHaveNotNullType())
|
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);
|
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")
|
@TestMetadata("let.kt")
|
||||||
public void testLet() throws Exception {
|
public void testLet() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/replaceWithSafeCall/let.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/replaceWithSafeCall/let.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user