From 0631e4fdbe2efbc5845f4ff04c93afa2e06ca3d7 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 5 Jun 2014 20:53:29 +0400 Subject: [PATCH] Java to Kotlin converter: converting usages of Kotlin object members #KT-5172 Fixed --- .../jet/j2k/visitors/ExpressionVisitor.kt | 2 +- .../JavaToKotlinConverterTestGenerated.java | 5 +++++ j2k/tests/testData/KotlinApi.kt | 18 +++++++++++++----- .../ast/kotlinApiAccess/ObjectMembers.java | 12 ++++++++++++ .../ast/kotlinApiAccess/ObjectMembers.kt | 9 +++++++++ 5 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 j2k/tests/testData/ast/kotlinApiAccess/ObjectMembers.java create mode 100644 j2k/tests/testData/ast/kotlinApiAccess/ObjectMembers.kt diff --git a/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt b/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt index 22dc3910907..14acb476896 100644 --- a/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt +++ b/j2k/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt @@ -294,7 +294,7 @@ open class ExpressionVisitor(protected val converter: Converter, identifier = Identifier("size", isNullable) } else if (qualifier != null) { - if (referencedName == "object$") { + if (referencedName == "object$" || referencedName == "instance$") { val target = expression.getReference()?.resolve() if (target is LightField) { //TODO: should be KotlinLightField with check of origin here, see KT-5188 result = converter.convertExpression(qualifier) 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 a27e7406e53..31cd2e40afd 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java @@ -1596,6 +1596,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv doTest("j2k/tests/testData/ast/kotlinApiAccess/InheritedProperty.java"); } + @TestMetadata("ObjectMembers.java") + public void testObjectMembers() throws Exception { + doTest("j2k/tests/testData/ast/kotlinApiAccess/ObjectMembers.java"); + } + @TestMetadata("Property.java") public void testProperty() throws Exception { doTest("j2k/tests/testData/ast/kotlinApiAccess/Property.java"); diff --git a/j2k/tests/testData/KotlinApi.kt b/j2k/tests/testData/KotlinApi.kt index 728b86f8be5..82a38943ed2 100644 --- a/j2k/tests/testData/KotlinApi.kt +++ b/j2k/tests/testData/KotlinApi.kt @@ -7,8 +7,8 @@ public open class KotlinClass { public fun statucFun(p: Int): Int = p public var staticVar: Int = 1 public var staticProperty: Int - get() = 1 - set(value) {} + get() = 1 + set(value) {} } } @@ -19,9 +19,17 @@ public fun Int.extensionFunction(): String = toString() public var globalValue1: Int = 1 public var globalValue2: Int - get() = 0 - set(value) {} + get() = 0 + set(value) {} public var String.extensionProperty: Int get() = 1 - set(value) {} \ No newline at end of file + set(value) {} + +public object KotlinObject { + public fun foo(): Int = 1 + public var property1: Int = 1 + public var property2: Int + get() = 1 + set(value) {} +} \ No newline at end of file diff --git a/j2k/tests/testData/ast/kotlinApiAccess/ObjectMembers.java b/j2k/tests/testData/ast/kotlinApiAccess/ObjectMembers.java new file mode 100644 index 00000000000..459d3229e2e --- /dev/null +++ b/j2k/tests/testData/ast/kotlinApiAccess/ObjectMembers.java @@ -0,0 +1,12 @@ +//file +import kotlinApi.KotlinObject; + +class C { + int foo() { + KotlinObject.instance$.setProperty1(1); + KotlinObject.instance$.setProperty2(2); + return KotlinObject.instance$.foo() + + KotlinObject.instance$.getProperty1() + + KotlinObject.instance$.getProperty2(); + } +} diff --git a/j2k/tests/testData/ast/kotlinApiAccess/ObjectMembers.kt b/j2k/tests/testData/ast/kotlinApiAccess/ObjectMembers.kt new file mode 100644 index 00000000000..afbd052a1e6 --- /dev/null +++ b/j2k/tests/testData/ast/kotlinApiAccess/ObjectMembers.kt @@ -0,0 +1,9 @@ +import kotlinApi.KotlinObject + +class C() { + fun foo(): Int { + KotlinObject.property1 = 1 + KotlinObject.property2 = 2 + return KotlinObject.foo() + KotlinObject.property1 + KotlinObject.property2 + } +} \ No newline at end of file