Fixed KT-5339 J2K: convert Objects.equals to == and !=

Mock JDK regenerated to add java.util.Objects

 #KT-5339 Fixed
This commit is contained in:
Valentin Kipyatkov
2014-07-09 16:14:30 +04:00
parent 514f11695f
commit 9bd742472d
7 changed files with 45 additions and 0 deletions
Binary file not shown.
Binary file not shown.
@@ -252,6 +252,7 @@ public class GenerateMockJdk {
"java/util/Properties.class",
"java/util/Random.class",
"java/util/RandomAccess.class",
"java/util/Objects.class",
"java/util/Set.class",
"java/util/SortedMap.class",
"java/util/SortedSet.class",
@@ -235,6 +235,11 @@ open class ExpressionVisitor(private val converter: Converter) : JavaElementVisi
}
}
if (target is PsiMethod && isObjectsEquals(target) && arguments.size == 2) {
result = BinaryExpression(converter.convertExpression(arguments[0]), converter.convertExpression(arguments[1]), "==")
return
}
result = MethodCallExpression(converter.convertExpression(methodExpr),
convertArguments(expression),
typeArguments,
@@ -247,6 +252,12 @@ open class ExpressionVisitor(private val converter: Converter) : JavaElementVisi
method.getParameterList().getParameters().single().getType().getCanonicalText() == JAVA_LANG_OBJECT
}
private fun isObjectsEquals(method: PsiMethod): Boolean {
return method.getName() == "equals" &&
method.getParameterList().getParameters().size == 2 &&
method.getContainingClass()?.getQualifiedName() == "java.util.Objects"
}
override fun visitNewExpression(expression: PsiNewExpression) {
if (expression.getArrayInitializer() != null) {
result = converter.convertExpression(expression.getArrayInitializer())
@@ -1146,6 +1146,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv
doTest("j2k/tests/testData/ast/equals/Equals4.java");
}
@TestMetadata("ObjectsEquals.java")
public void testObjectsEquals() throws Exception {
doTest("j2k/tests/testData/ast/equals/ObjectsEquals.java");
}
}
@TestMetadata("j2k/tests/testData/ast/field")
@@ -0,0 +1,15 @@
//file
import java.util.Objects;
interface I {
}
class C{
boolean foo1(I i1, I i2) {
return Objects.equals(i1, i2))
}
boolean foo2(I i1, I i2) {
return !java.util.Objects.equals(i1, i2)
}
}
@@ -0,0 +1,13 @@
import java.util.Objects
trait I
class C {
fun foo1(i1: I, i2: I): Boolean {
return i1 == i2
}
fun foo2(i1: I, i2: I): Boolean {
return i1 != i2
}
}