diff --git a/j2k/src/org/jetbrains/jet/j2k/visitors/SpecialMethod.kt b/j2k/src/org/jetbrains/jet/j2k/visitors/SpecialMethod.kt index ee20fadf886..a206d66562e 100644 --- a/j2k/src/org/jetbrains/jet/j2k/visitors/SpecialMethod.kt +++ b/j2k/src/org/jetbrains/jet/j2k/visitors/SpecialMethod.kt @@ -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, 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, converter: Converter) = BinaryExpression(converter.convertExpression(arguments[0]), converter.convertExpression(arguments[1]), "==") diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java index 638620c05f4..c8752b50cb7 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java @@ -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"); diff --git a/j2k/tests/testData/ast/methodCallExpression/getClass.java b/j2k/tests/testData/ast/methodCallExpression/getClass.java new file mode 100644 index 00000000000..dbc9d3274d4 --- /dev/null +++ b/j2k/tests/testData/ast/methodCallExpression/getClass.java @@ -0,0 +1,6 @@ +class A { + void foo(Object o) { + System.out.println(o.getClass()); + System.out.println(getClass()); + } +} \ No newline at end of file diff --git a/j2k/tests/testData/ast/methodCallExpression/getClass.kt b/j2k/tests/testData/ast/methodCallExpression/getClass.kt new file mode 100644 index 00000000000..41f3407a21e --- /dev/null +++ b/j2k/tests/testData/ast/methodCallExpression/getClass.kt @@ -0,0 +1,6 @@ +class A { + fun foo(o: Any) { + System.out.println(o.javaClass) + System.out.println(javaClass) + } +} \ No newline at end of file