diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/IfNullToElvisIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/IfNullToElvisIntention.kt index 6d09d27b562..02daae7d62b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/IfNullToElvisIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/IfNullToElvisIntention.kt @@ -41,6 +41,11 @@ public class IfNullToElvisIntention : JetSelfTargetingOffsetIndependentIntention } override fun applyTo(element: JetIfExpression, editor: Editor) { + val newElvis = applyTo(element) + editor.getCaretModel().moveToOffset(newElvis.getRight()!!.getTextOffset()) + } + + public fun applyTo(element: JetIfExpression): JetBinaryExpression { val (initializer, declaration, ifNullExpr) = calcData(element)!! val factory = JetPsiFactory(element) @@ -67,7 +72,7 @@ public class IfNullToElvisIntention : JetSelfTargetingOffsetIndependentIntention declaration.setType(explicitTypeToAdd) } - editor.getCaretModel().moveToOffset(newElvis.getRight()!!.getTextOffset()) + return newElvis } private data class Data( diff --git a/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt index 8707746b56a..b5b07349524 100644 --- a/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt @@ -18,16 +18,14 @@ package org.jetbrains.kotlin.idea.j2k import com.intellij.openapi.editor.RangeMarker import com.intellij.openapi.util.TextRange -import com.intellij.psi.PsiComment import com.intellij.psi.PsiElement -import com.intellij.psi.PsiWhiteSpace import com.intellij.psi.codeStyle.CodeStyleManager import com.intellij.psi.search.LocalSearchScope import com.intellij.psi.search.searches.ReferencesSearch -import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade +import org.jetbrains.kotlin.idea.intentions.IfNullToElvisIntention import org.jetbrains.kotlin.idea.intentions.RemoveExplicitTypeArguments import org.jetbrains.kotlin.idea.intentions.SimplifyNegatedBinaryExpressionIntention import org.jetbrains.kotlin.idea.intentions.branchedTransformations.intentions.IfThenToElvisIntention @@ -141,6 +139,15 @@ public class J2kPostProcessor(private val formatCode: Boolean) : PostProcessor { return } } + + run { + val intention = IfNullToElvisIntention() + if (intention.isApplicableTo(expression)) { + intention.applyTo(expression) + return + } + } + } } }) diff --git a/j2k/testData/fileOrElement/codeSimplifications/IfNullReturnToElvis.java b/j2k/testData/fileOrElement/codeSimplifications/IfNullReturnToElvis.java new file mode 100644 index 00000000000..8f94c33a3d9 --- /dev/null +++ b/j2k/testData/fileOrElement/codeSimplifications/IfNullReturnToElvis.java @@ -0,0 +1,9 @@ +import java.io.File; + +class C { + String foo(File file) { + File parent = file.getParentFile(); + if (parent == null) return ""; + return parent.getName(); + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/codeSimplifications/IfNullReturnToElvis.kt b/j2k/testData/fileOrElement/codeSimplifications/IfNullReturnToElvis.kt new file mode 100644 index 00000000000..f5c66c3c793 --- /dev/null +++ b/j2k/testData/fileOrElement/codeSimplifications/IfNullReturnToElvis.kt @@ -0,0 +1,8 @@ +import java.io.File + +class C { + fun foo(file: File): String { + val parent = file.getParentFile() ?: return "" + return parent.getName() + } +} diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java index e3b9138a9ac..9e225d783f8 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -937,6 +937,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/codeSimplifications"), Pattern.compile("^(.+)\\.java$"), true); } + @TestMetadata("IfNullReturnToElvis.java") + public void testIfNullReturnToElvis() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/IfNullReturnToElvis.java"); + doTest(fileName); + } + @TestMetadata("IfToElvis.java") public void testIfToElvis() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/IfToElvis.java"); diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index 1b71969fc85..dcdaaf34129 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -937,6 +937,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/codeSimplifications"), Pattern.compile("^(.+)\\.java$"), true); } + @TestMetadata("IfNullReturnToElvis.java") + public void testIfNullReturnToElvis() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/IfNullReturnToElvis.java"); + doTest(fileName); + } + @TestMetadata("IfToElvis.java") public void testIfToElvis() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/IfToElvis.java");