Fixed KT-5276 J2K: Convert calls to getClass() to javaClass property access

#KT-5276 Fixed
This commit is contained in:
Valentin Kipyatkov
2014-07-11 13:57:59 +04:00
parent ecb984352e
commit 3527b186bf
4 changed files with 27 additions and 0 deletions
@@ -24,6 +24,9 @@ import org.jetbrains.jet.j2k.ast.Expression
import org.jetbrains.jet.j2k.ast.MethodCallExpression
import com.intellij.psi.CommonClassNames.JAVA_LANG_OBJECT
import com.intellij.psi.PsiSuperExpression
import org.jetbrains.jet.j2k.ast.QualifiedExpression
import org.jetbrains.jet.j2k.ast.Identifier
import org.jetbrains.jet.j2k.ast.assignNoPrototype
enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String, val parameterCount: Int) {
OBJECT_EQUALS: SpecialMethod(null, "equals", 1) {
@@ -36,6 +39,13 @@ enum class SpecialMethod(val qualifiedClassName: String?, val methodName: String
}
}
OBJECT_GET_CLASS: SpecialMethod("java.lang.Object", "getClass", 0) {
override fun convertCall(qualifier: PsiExpression?, arguments: Array<PsiExpression>, converter: Converter): Expression {
val identifier = Identifier("javaClass", false).assignNoPrototype()
return if (qualifier != null) QualifiedExpression(converter.convertExpression(qualifier), identifier) else identifier
}
}
OBJECTS_EQUALS: SpecialMethod("java.util.Objects", "equals", 2) {
override fun convertCall(qualifier: PsiExpression?, arguments: Array<PsiExpression>, converter: Converter)
= BinaryExpression(converter.convertExpression(arguments[0]), converter.convertExpression(arguments[1]), "==")
@@ -2095,6 +2095,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv
doTest("j2k/tests/testData/ast/methodCallExpression/genericMethod.java");
}
@TestMetadata("getClass.java")
public void testGetClass() throws Exception {
doTest("j2k/tests/testData/ast/methodCallExpression/getClass.java");
}
@TestMetadata("simpleCall.java")
public void testSimpleCall() throws Exception {
doTest("j2k/tests/testData/ast/methodCallExpression/simpleCall.java");
@@ -0,0 +1,6 @@
class A {
void foo(Object o) {
System.out.println(o.getClass());
System.out.println(getClass());
}
}
@@ -0,0 +1,6 @@
class A {
fun foo(o: Any) {
System.out.println(o.javaClass)
System.out.println(javaClass)
}
}