"Add not-null asserted (!!) call": do not add this when implicit receiver is not extension receiver

#KT-34894 Fixed
This commit is contained in:
Toshiaki Kameyama
2019-11-16 10:31:31 +09:00
committed by Mikhail Glukhikh
parent f1c605d0f7
commit 8857827dce
6 changed files with 50 additions and 1 deletions
@@ -44,6 +44,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
import org.jetbrains.kotlin.resolve.calls.resolvedCallUtil.getImplicitReceiverValue
import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
import org.jetbrains.kotlin.resolve.scopes.receivers.ExtensionReceiver
import org.jetbrains.kotlin.types.TypeUtils
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
import org.jetbrains.kotlin.util.OperatorNameConventions
@@ -130,7 +131,7 @@ class AddExclExclCallFix(psiElement: PsiElement, val checkImplicitReceivers: Boo
}
is KtExpression -> {
val context = psiElement.analyze()
if (checkImplicitReceivers && psiElement.getResolvedCall(context)?.getImplicitReceiverValue() != null) {
if (checkImplicitReceivers && psiElement.getResolvedCall(context)?.getImplicitReceiverValue() is ExtensionReceiver) {
val expressionToReplace = psiElement.parent as? KtCallExpression ?: psiElement
expressionToReplace.expressionForCall(implicitReceiver = true)
} else {
+7
View File
@@ -0,0 +1,7 @@
// "Add non-null asserted (!!) call" "true"
// WITH_RUNTIME
fun test(s: String?) {
s.run {
<caret>length
}
}
@@ -0,0 +1,7 @@
// "Add non-null asserted (!!) call" "true"
// WITH_RUNTIME
fun test(s: String?) {
s.run {
this!!.length
}
}
+12
View File
@@ -0,0 +1,12 @@
// "Add non-null asserted (!!) call" "true"
class Foo {
val project: Project? = null
fun quux() {
baz(<caret>project)
}
fun baz(project: Project) {}
class Project
}
@@ -0,0 +1,12 @@
// "Add non-null asserted (!!) call" "true"
class Foo {
val project: Project? = null
fun quux() {
baz(project!!)
}
fun baz(project: Project) {}
class Project
}
@@ -598,6 +598,16 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
runTest("idea/testData/quickfix/addExclExclCall/implicit.kt");
}
@TestMetadata("implicit2.kt")
public void testImplicit2() throws Exception {
runTest("idea/testData/quickfix/addExclExclCall/implicit2.kt");
}
@TestMetadata("implicit3.kt")
public void testImplicit3() throws Exception {
runTest("idea/testData/quickfix/addExclExclCall/implicit3.kt");
}
@TestMetadata("implicitFunctionCall.kt")
public void testImplicitFunctionCall() throws Exception {
runTest("idea/testData/quickfix/addExclExclCall/implicitFunctionCall.kt");