From d6d843aaed6e230b9644785074a19f32abd908b4 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 27 Mar 2020 17:34:43 +0300 Subject: [PATCH] New J2K: fix assignment target in ConvertGettersAndSettersToPropertyProcessing #KT-36190 fixed --- .../ConvertGettersAndSettersToPropertyProcessing.kt | 5 +++-- .../newJ2k/detectProperties/IsPrefixSetterCall.java | 10 ++++++++++ .../newJ2k/detectProperties/IsPrefixSetterCall.kt | 11 +++++++++++ ...wJavaToKotlinConverterSingleFileTestGenerated.java | 5 +++++ 4 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 nj2k/testData/newJ2k/detectProperties/IsPrefixSetterCall.java create mode 100644 nj2k/testData/newJ2k/detectProperties/IsPrefixSetterCall.kt diff --git a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt index b55cdb33498..170b5a25489 100644 --- a/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt +++ b/nj2k/nj2k-services/src/org/jetbrains/kotlin/nj2k/postProcessing/processings/ConvertGettersAndSettersToPropertyProcessing.kt @@ -238,6 +238,7 @@ private class ConvertGettersAndSettersToPropertyStatefulProcessing( modifiers ) ktSetter.filterModifiers() + val propertyName = property.name if (setter is RealSetter) { setter.function.forAllUsages { usage -> val callExpression = usage.getStrictParentOfType() ?: return@forAllUsages @@ -245,10 +246,10 @@ private class ConvertGettersAndSettersToPropertyStatefulProcessing( val newValue = callExpression.valueArguments.single() if (qualifier != null) { qualifier.replace( - factory.createExpression("${qualifier.receiverExpression.text}.${setter.name} = ${newValue.text}") + factory.createExpression("${qualifier.receiverExpression.text}.$propertyName = ${newValue.text}") ) } else { - callExpression.replace(factory.createExpression("${setter.name} = ${newValue.text}")) + callExpression.replace(factory.createExpression("$propertyName = ${newValue.text}")) } } } diff --git a/nj2k/testData/newJ2k/detectProperties/IsPrefixSetterCall.java b/nj2k/testData/newJ2k/detectProperties/IsPrefixSetterCall.java new file mode 100644 index 00000000000..dd457b2ac33 --- /dev/null +++ b/nj2k/testData/newJ2k/detectProperties/IsPrefixSetterCall.java @@ -0,0 +1,10 @@ +public class TestSetter { + private static void setThing(int thing) { } + + private static int isThing() { return 42; } + + public static void main(String[] args) { + setThing(42); + System.out.println(isThing()); + } +} \ No newline at end of file diff --git a/nj2k/testData/newJ2k/detectProperties/IsPrefixSetterCall.kt b/nj2k/testData/newJ2k/detectProperties/IsPrefixSetterCall.kt new file mode 100644 index 00000000000..b0c811b3e14 --- /dev/null +++ b/nj2k/testData/newJ2k/detectProperties/IsPrefixSetterCall.kt @@ -0,0 +1,11 @@ +object TestSetter { + private var isThing: Int + private get() = 42 + private set(thing) {} + + @JvmStatic + fun main(args: Array) { + isThing = 42 + println(isThing) + } +} diff --git a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java index cb1c23a445e..ef0bda7c8cd 100644 --- a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java @@ -1585,6 +1585,11 @@ public class NewJavaToKotlinConverterSingleFileTestGenerated extends AbstractNew runTest("nj2k/testData/newJ2k/detectProperties/IsPrefix.java"); } + @TestMetadata("IsPrefixSetterCall.java") + public void testIsPrefixSetterCall() throws Exception { + runTest("nj2k/testData/newJ2k/detectProperties/IsPrefixSetterCall.java"); + } + @TestMetadata("JavaKeywordPropertyName.java") public void testJavaKeywordPropertyName() throws Exception { runTest("nj2k/testData/newJ2k/detectProperties/JavaKeywordPropertyName.java");