J2K: generating "!is" instead of !(.. is ..)
This commit is contained in:
+5
-1
@@ -69,6 +69,10 @@ public class SimplifyNegatedBinaryExpressionIntention : JetSelfTargetingIntentio
|
||||
}
|
||||
|
||||
override fun applyTo(element: JetPrefixExpression, editor: Editor) {
|
||||
applyTo(element)
|
||||
}
|
||||
|
||||
public fun applyTo(element: JetPrefixExpression) {
|
||||
// Guaranteed to succeed (by isApplicableTo)
|
||||
val expression = element.unparenthesize()!!
|
||||
val invertedOperation = JetPsiUtil.getOperationToken(expression as JetOperationExpression)!!.negate()!!
|
||||
@@ -87,7 +91,7 @@ public class SimplifyNegatedBinaryExpressionIntention : JetSelfTargetingIntentio
|
||||
expression.getRight()
|
||||
)
|
||||
else -> throw IllegalStateException(
|
||||
"Expression is neither a JetIsExpression or JetBinaryExpression (checked by isApplicableTo): ${expression.getText()}"
|
||||
"Expression is neither a JetIsExpression or JetBinaryExpression (checked by isApplicableTo): ${expression.getText()}"
|
||||
)
|
||||
}
|
||||
)
|
||||
|
||||
@@ -16,13 +16,17 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.j2k
|
||||
|
||||
import org.jetbrains.kotlin.j2k.PostProcessor
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.idea.intentions.RemoveExplicitTypeArguments
|
||||
import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult
|
||||
import java.util.ArrayList
|
||||
import com.intellij.psi.PsiElement
|
||||
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.j2k.PostProcessor
|
||||
import org.jetbrains.kotlin.psi.JetFile
|
||||
import org.jetbrains.kotlin.psi.JetPrefixExpression
|
||||
import org.jetbrains.kotlin.psi.JetTreeVisitorVoid
|
||||
import org.jetbrains.kotlin.psi.JetTypeArgumentList
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import java.util.ArrayList
|
||||
|
||||
public class J2kPostProcessor(override val contextToAnalyzeIn: PsiElement) : PostProcessor {
|
||||
override fun analyzeFile(file: JetFile): BindingContext {
|
||||
@@ -40,6 +44,15 @@ public class J2kPostProcessor(override val contextToAnalyzeIn: PsiElement) : Pos
|
||||
|
||||
super.visitTypeArgumentList(typeArgumentList)
|
||||
}
|
||||
|
||||
override fun visitPrefixExpression(expression: JetPrefixExpression) {
|
||||
super.visitPrefixExpression(expression)
|
||||
|
||||
val intention = SimplifyNegatedBinaryExpressionIntention()
|
||||
if (intention.isApplicableTo(expression)) {
|
||||
intention.applyTo(expression)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
for (typeArgs in redundantTypeArgs) {
|
||||
|
||||
@@ -50,13 +50,13 @@ class AfterConversionPass(val project: Project, val postProcessor: PostProcessor
|
||||
private fun fixForProblem(problem: Diagnostic): (() -> Unit)? {
|
||||
val psiElement = problem.getPsiElement()
|
||||
return when (problem.getFactory()) {
|
||||
Errors.UNNECESSARY_NOT_NULL_ASSERTION -> { () ->
|
||||
Errors.UNNECESSARY_NOT_NULL_ASSERTION -> { ->
|
||||
val exclExclOp = psiElement as JetSimpleNameExpression
|
||||
val exclExclExpr = exclExclOp.getParent() as JetUnaryExpression
|
||||
exclExclExpr.replace(exclExclExpr.getBaseExpression()!!)
|
||||
}
|
||||
|
||||
Errors.VAL_REASSIGNMENT -> { () ->
|
||||
Errors.VAL_REASSIGNMENT -> { ->
|
||||
val property = (psiElement as? JetSimpleNameExpression)?.getReference()?.resolve() as? JetProperty
|
||||
if (property != null && !property.isVar()) {
|
||||
property.getValOrVarNode().getPsi()!!.replace(JetPsiFactory(project).createVarNode().getPsi()!!)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class C {
|
||||
void foo(Object o) {
|
||||
if (!(o instanceof String)) return;
|
||||
System.out.println("String");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
class C {
|
||||
fun foo(o: Any) {
|
||||
if (o !is String) return
|
||||
System.out.println("String")
|
||||
}
|
||||
}
|
||||
@@ -45,6 +45,7 @@ import java.util.regex.Pattern;
|
||||
JavaToKotlinConverterForWebDemoTestGenerated.CallChainExpression.class,
|
||||
JavaToKotlinConverterForWebDemoTestGenerated.Class.class,
|
||||
JavaToKotlinConverterForWebDemoTestGenerated.ClassExpression.class,
|
||||
JavaToKotlinConverterForWebDemoTestGenerated.CodeSimplifications.class,
|
||||
JavaToKotlinConverterForWebDemoTestGenerated.Comments.class,
|
||||
JavaToKotlinConverterForWebDemoTestGenerated.ConditionalExpression.class,
|
||||
JavaToKotlinConverterForWebDemoTestGenerated.Constructors.class,
|
||||
@@ -973,6 +974,21 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("j2k/testData/fileOrElement/codeSimplifications")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class CodeSimplifications extends AbstractJavaToKotlinConverterForWebDemoTest {
|
||||
public void testAllFilesPresentInCodeSimplifications() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/codeSimplifications"), Pattern.compile("^(.+)\\.java$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("NotIs.java")
|
||||
public void testNotIs() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/NotIs.java");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("j2k/testData/fileOrElement/comments")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
@@ -45,6 +45,7 @@ import java.util.regex.Pattern;
|
||||
JavaToKotlinConverterSingleFileTestGenerated.CallChainExpression.class,
|
||||
JavaToKotlinConverterSingleFileTestGenerated.Class.class,
|
||||
JavaToKotlinConverterSingleFileTestGenerated.ClassExpression.class,
|
||||
JavaToKotlinConverterSingleFileTestGenerated.CodeSimplifications.class,
|
||||
JavaToKotlinConverterSingleFileTestGenerated.Comments.class,
|
||||
JavaToKotlinConverterSingleFileTestGenerated.ConditionalExpression.class,
|
||||
JavaToKotlinConverterSingleFileTestGenerated.Constructors.class,
|
||||
@@ -973,6 +974,21 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("j2k/testData/fileOrElement/codeSimplifications")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
public static class CodeSimplifications extends AbstractJavaToKotlinConverterSingleFileTest {
|
||||
public void testAllFilesPresentInCodeSimplifications() throws Exception {
|
||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/codeSimplifications"), Pattern.compile("^(.+)\\.java$"), true);
|
||||
}
|
||||
|
||||
@TestMetadata("NotIs.java")
|
||||
public void testNotIs() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/codeSimplifications/NotIs.java");
|
||||
doTest(fileName);
|
||||
}
|
||||
}
|
||||
|
||||
@TestMetadata("j2k/testData/fileOrElement/comments")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
@RunWith(JUnit3RunnerWithInners.class)
|
||||
|
||||
Reference in New Issue
Block a user