J2K: auto-replacing of if's with safe access
This commit is contained in:
+6
-2
@@ -58,6 +58,11 @@ public class IfThenToSafeAccessIntention : JetSelfTargetingIntention<JetIfExpres
|
||||
}
|
||||
|
||||
override fun applyTo(element: JetIfExpression, editor: Editor) {
|
||||
val safeAccessExpr = applyTo(element)
|
||||
safeAccessExpr.inlineReceiverIfApplicableWithPrompt(editor)
|
||||
}
|
||||
|
||||
public fun applyTo(element: JetIfExpression): JetSafeQualifiedExpression {
|
||||
val condition = element.getCondition() as JetBinaryExpression
|
||||
val receiverExpression = checkNotNull(condition.getNonNullExpression(), "The receiver expression cannot be null")
|
||||
|
||||
@@ -79,8 +84,7 @@ public class IfThenToSafeAccessIntention : JetSelfTargetingIntention<JetIfExpres
|
||||
}
|
||||
|
||||
val resultingExprString = "${receiverExpression.getText()}?.${selectorExpression?.getText()}"
|
||||
val safeAccessExpr = element.replace(resultingExprString) as JetSafeQualifiedExpression
|
||||
safeAccessExpr.inlineReceiverIfApplicableWithPrompt(editor)
|
||||
return element.replace(resultingExprString) as JetSafeQualifiedExpression
|
||||
}
|
||||
|
||||
fun clauseContainsAppropriateDotQualifiedExpression(clause: JetExpression, receiverExpression: JetExpression): Boolean =
|
||||
|
||||
@@ -22,11 +22,11 @@ import org.jetbrains.kotlin.diagnostics.Errors
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult
|
||||
import org.jetbrains.kotlin.idea.intentions.RemoveExplicitTypeArguments
|
||||
import org.jetbrains.kotlin.idea.intentions.SimplifyNegatedBinaryExpressionIntention
|
||||
import org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions.IfThenToSafeAccessIntention
|
||||
import org.jetbrains.kotlin.idea.quickfix.RemoveRightPartOfBinaryExpressionFix
|
||||
import org.jetbrains.kotlin.j2k.PostProcessor
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.utils.printAndReturn
|
||||
import java.util.ArrayList
|
||||
|
||||
public class J2kPostProcessor(override val contextToAnalyzeIn: PsiElement) : PostProcessor {
|
||||
@@ -65,6 +65,15 @@ public class J2kPostProcessor(override val contextToAnalyzeIn: PsiElement) : Pos
|
||||
intention.applyTo(expression)
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitIfExpression(expression: JetIfExpression) {
|
||||
super.visitIfExpression(expression)
|
||||
|
||||
val intention = IfThenToSafeAccessIntention()
|
||||
if (intention.isApplicableTo(expression)) {
|
||||
intention.applyTo(expression)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
for (typeArgs in redundantTypeArgs) {
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
import java.io.File;
|
||||
|
||||
class C {
|
||||
void foo(File file) {
|
||||
if (file != null) {
|
||||
file.delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
import java.io.File
|
||||
|
||||
class C {
|
||||
fun foo(file: File?) {
|
||||
file?.delete()
|
||||
}
|
||||
}
|
||||
@@ -982,6 +982,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/codeSimplifications"), Pattern.compile("^(.+)\\.java$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("IfToSafeCall.java")
|
||||
public void testIfToSafeCall() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/IfToSafeCall.java");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("NotIs.java")
|
||||
public void testNotIs() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/NotIs.java");
|
||||
|
||||
@@ -982,6 +982,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/codeSimplifications"), Pattern.compile("^(.+)\\.java$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("IfToSafeCall.java")
|
||||
public void testIfToSafeCall() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/IfToSafeCall.java");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("NotIs.java")
|
||||
public void testNotIs() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/NotIs.java");
|
||||
|
||||
Reference in New Issue
Block a user