Skip to content

Commit 7d92559

Browse files
committed
J2K: generating "!is" instead of !(.. is ..)
1 parent 108a1f8 commit 7d92559

File tree

7 files changed

+68
-7
lines changed

7 files changed

+68
-7
lines changed

idea/idea-analysis/src/org/jetbrains/kotlin/idea/intentions/SimplifyNegatedBinaryExpressionIntention.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ public class SimplifyNegatedBinaryExpressionIntention : JetSelfTargetingIntentio
6969
}
7070

7171
override fun applyTo(element: JetPrefixExpression, editor: Editor) {
72+
applyTo(element)
73+
}
74+
75+
public fun applyTo(element: JetPrefixExpression) {
7276
// Guaranteed to succeed (by isApplicableTo)
7377
val expression = element.unparenthesize()!!
7478
val invertedOperation = JetPsiUtil.getOperationToken(expression as JetOperationExpression)!!.negate()!!
@@ -87,7 +91,7 @@ public class SimplifyNegatedBinaryExpressionIntention : JetSelfTargetingIntentio
8791
expression.getRight()
8892
)
8993
else -> throw IllegalStateException(
90-
"Expression is neither a JetIsExpression or JetBinaryExpression (checked by isApplicableTo): ${expression.getText()}"
94+
"Expression is neither a JetIsExpression or JetBinaryExpression (checked by isApplicableTo): ${expression.getText()}"
9195
)
9296
}
9397
)

idea/src/org/jetbrains/kotlin/idea/j2k/J2kPostProcessor.kt

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,17 @@
1616

1717
package org.jetbrains.kotlin.idea.j2k
1818

19+
import com.intellij.psi.PsiElement
20+
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult
21+
import org.jetbrains.kotlin.idea.intentions.RemoveExplicitTypeArguments
22+
import org.jetbrains.kotlin.idea.intentions.SimplifyNegatedBinaryExpressionIntention
1923
import org.jetbrains.kotlin.j2k.PostProcessor
20-
import org.jetbrains.kotlin.psi.*
24+
import org.jetbrains.kotlin.psi.JetFile
25+
import org.jetbrains.kotlin.psi.JetPrefixExpression
26+
import org.jetbrains.kotlin.psi.JetTreeVisitorVoid
27+
import org.jetbrains.kotlin.psi.JetTypeArgumentList
2128
import org.jetbrains.kotlin.resolve.BindingContext
22-
import org.jetbrains.kotlin.idea.intentions.RemoveExplicitTypeArguments
23-
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult
2429
import java.util.ArrayList
25-
import com.intellij.psi.PsiElement
2630

2731
public class J2kPostProcessor(override val contextToAnalyzeIn: PsiElement) : PostProcessor {
2832
override fun analyzeFile(file: JetFile): BindingContext {
@@ -40,6 +44,15 @@ public class J2kPostProcessor(override val contextToAnalyzeIn: PsiElement) : Pos
4044

4145
super.visitTypeArgumentList(typeArgumentList)
4246
}
47+
48+
override fun visitPrefixExpression(expression: JetPrefixExpression) {
49+
super.visitPrefixExpression(expression)
50+
51+
val intention = SimplifyNegatedBinaryExpressionIntention()
52+
if (intention.isApplicableTo(expression)) {
53+
intention.applyTo(expression)
54+
}
55+
}
4356
})
4457

4558
for (typeArgs in redundantTypeArgs) {

j2k/src/org/jetbrains/kotlin/j2k/AfterConversionPass.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@ class AfterConversionPass(val project: Project, val postProcessor: PostProcessor
5050
private fun fixForProblem(problem: Diagnostic): (() -> Unit)? {
5151
val psiElement = problem.getPsiElement()
5252
return when (problem.getFactory()) {
53-
Errors.UNNECESSARY_NOT_NULL_ASSERTION -> { () ->
53+
Errors.UNNECESSARY_NOT_NULL_ASSERTION -> { ->
5454
val exclExclOp = psiElement as JetSimpleNameExpression
5555
val exclExclExpr = exclExclOp.getParent() as JetUnaryExpression
5656
exclExclExpr.replace(exclExclExpr.getBaseExpression()!!)
5757
}
5858

59-
Errors.VAL_REASSIGNMENT -> { () ->
59+
Errors.VAL_REASSIGNMENT -> { ->
6060
val property = (psiElement as? JetSimpleNameExpression)?.getReference()?.resolve() as? JetProperty
6161
if (property != null && !property.isVar()) {
6262
property.getValOrVarNode().getPsi()!!.replace(JetPsiFactory(project).createVarNode().getPsi()!!)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class C {
2+
void foo(Object o) {
3+
if (!(o instanceof String)) return;
4+
System.out.println("String");
5+
}
6+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class C {
2+
fun foo(o: Any) {
3+
if (o !is String) return
4+
System.out.println("String")
5+
}
6+
}

j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
JavaToKotlinConverterForWebDemoTestGenerated.CallChainExpression.class,
4646
JavaToKotlinConverterForWebDemoTestGenerated.Class.class,
4747
JavaToKotlinConverterForWebDemoTestGenerated.ClassExpression.class,
48+
JavaToKotlinConverterForWebDemoTestGenerated.CodeSimplifications.class,
4849
JavaToKotlinConverterForWebDemoTestGenerated.Comments.class,
4950
JavaToKotlinConverterForWebDemoTestGenerated.ConditionalExpression.class,
5051
JavaToKotlinConverterForWebDemoTestGenerated.Constructors.class,
@@ -973,6 +974,21 @@ public void testStringClass() throws Exception {
973974
}
974975
}
975976

977+
@TestMetadata("j2k/testData/fileOrElement/codeSimplifications")
978+
@TestDataPath("$PROJECT_ROOT")
979+
@RunWith(JUnit3RunnerWithInners.class)
980+
public static class CodeSimplifications extends AbstractJavaToKotlinConverterForWebDemoTest {
981+
public void testAllFilesPresentInCodeSimplifications() throws Exception {
982+
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/codeSimplifications"), Pattern.compile("^(.+)\\.java$"), true);
983+
}
984+
985+
@TestMetadata("NotIs.java")
986+
public void testNotIs() throws Exception {
987+
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/NotIs.java");
988+
doTest(fileName);
989+
}
990+
}
991+
976992
@TestMetadata("j2k/testData/fileOrElement/comments")
977993
@TestDataPath("$PROJECT_ROOT")
978994
@RunWith(JUnit3RunnerWithInners.class)

j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
JavaToKotlinConverterSingleFileTestGenerated.CallChainExpression.class,
4646
JavaToKotlinConverterSingleFileTestGenerated.Class.class,
4747
JavaToKotlinConverterSingleFileTestGenerated.ClassExpression.class,
48+
JavaToKotlinConverterSingleFileTestGenerated.CodeSimplifications.class,
4849
JavaToKotlinConverterSingleFileTestGenerated.Comments.class,
4950
JavaToKotlinConverterSingleFileTestGenerated.ConditionalExpression.class,
5051
JavaToKotlinConverterSingleFileTestGenerated.Constructors.class,
@@ -973,6 +974,21 @@ public void testStringClass() throws Exception {
973974
}
974975
}
975976

977+
@TestMetadata("j2k/testData/fileOrElement/codeSimplifications")
978+
@TestDataPath("$PROJECT_ROOT")
979+
@RunWith(JUnit3RunnerWithInners.class)
980+
public static class CodeSimplifications extends AbstractJavaToKotlinConverterSingleFileTest {
981+
public void testAllFilesPresentInCodeSimplifications() throws Exception {
982+
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/codeSimplifications"), Pattern.compile("^(.+)\\.java$"), true);
983+
}
984+
985+
@TestMetadata("NotIs.java")
986+
public void testNotIs() throws Exception {
987+
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/NotIs.java");
988+
doTest(fileName);
989+
}
990+
}
991+
976992
@TestMetadata("j2k/testData/fileOrElement/comments")
977993
@TestDataPath("$PROJECT_ROOT")
978994
@RunWith(JUnit3RunnerWithInners.class)

0 commit comments

Comments
 (0)