From 41c7ec8285df70ec5ab861df5941d343e6fd94d7 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Mon, 20 Oct 2014 21:03:11 +0400 Subject: [PATCH] J2K: processing usages of get/set methods in the code being converted when converting them into property --- .../jetbrains/jet/j2k/ClassBodyConverter.kt | 11 ++++++++-- .../j2k/usageProcessing/UsageProcessing.kt | 20 ++++++++++++------- .../ast/constructors/customerBuilder.kt | 4 ++-- ...ages.java.todo => GetterSetterUsages.java} | 6 ++++++ .../ast/dropAccessors/GetterSetterUsages.kt | 6 ++++++ 5 files changed, 36 insertions(+), 11 deletions(-) rename j2k/tests/testData/ast/dropAccessors/{GetterSetterUsages.java.todo => GetterSetterUsages.java} (80%) diff --git a/j2k/src/org/jetbrains/jet/j2k/ClassBodyConverter.kt b/j2k/src/org/jetbrains/jet/j2k/ClassBodyConverter.kt index a63b30acb3d..e744d79bdc2 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ClassBodyConverter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ClassBodyConverter.kt @@ -35,6 +35,7 @@ import com.intellij.psi.PsiExpressionStatement import com.intellij.psi.PsiAssignmentExpression import com.intellij.psi.PsiExpression import com.intellij.psi.JavaTokenType +import org.jetbrains.jet.j2k.usageProcessing.AccessorToPropertyProcessing class FieldCorrectionInfo(val name: String, val access: Modifier?, val setterAccess: Modifier?) { val identifier = Identifier(name).assignNoPrototype() @@ -156,9 +157,10 @@ class ClassBodyConverter(private val psiClass: PsiClass, } for ((field, getterInfo) in fieldToGetterInfo) { + val propertyName = getterInfo.propertyName val setterInfo = run { val info = fieldToSetterInfo[field] - if (info?.propertyName == getterInfo.propertyName) info else null + if (info?.propertyName == propertyName) info else null } membersToRemove.add(getterInfo.method) @@ -172,7 +174,12 @@ class ClassBodyConverter(private val psiClass: PsiClass, else converter.convertModifiers(field).accessModifier() //TODO: check that setter access is not bigger - fieldCorrections[field] = FieldCorrectionInfo(getterInfo.propertyName, getterAccess, setterAccess) + fieldCorrections[field] = FieldCorrectionInfo(propertyName, getterAccess, setterAccess) + + converter.addUsageProcessing(AccessorToPropertyProcessing(getterInfo.method, AccessorKind.GETTER, propertyName)) + if (setterInfo != null) { + converter.addUsageProcessing(AccessorToPropertyProcessing(setterInfo.method, AccessorKind.SETTER, propertyName)) + } } } diff --git a/j2k/src/org/jetbrains/jet/j2k/usageProcessing/UsageProcessing.kt b/j2k/src/org/jetbrains/jet/j2k/usageProcessing/UsageProcessing.kt index 917c3723e99..3882deb9610 100644 --- a/j2k/src/org/jetbrains/jet/j2k/usageProcessing/UsageProcessing.kt +++ b/j2k/src/org/jetbrains/jet/j2k/usageProcessing/UsageProcessing.kt @@ -44,14 +44,20 @@ class UsageProcessingExpressionConverter(processings: Collection { + val target = expression.resolve() as? PsiVariable ?: return null + val processor = targetToProcessing[target]?.convertedCodeProcessor ?: return null + return processor.convertVariableUsage(expression, codeConverter) + } - if (expression is PsiReferenceExpression) { - val target = expression.resolve() ?: return null - val processor = targetToProcessing[target]?.convertedCodeProcessor ?: return null - return processor.convertVariableUsage(expression, codeConverter) + is PsiMethodCallExpression -> { + val target = expression.getMethodExpression().resolve() as? PsiMethod ?: return null + val processor = targetToProcessing[target]?.convertedCodeProcessor ?: return null + return processor.convertMethodUsage(expression, codeConverter) + } + + else -> return null } - - return null } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/constructors/customerBuilder.kt b/j2k/tests/testData/ast/constructors/customerBuilder.kt index 397a0871404..c2ab4703685 100644 --- a/j2k/tests/testData/ast/constructors/customerBuilder.kt +++ b/j2k/tests/testData/ast/constructors/customerBuilder.kt @@ -37,8 +37,8 @@ public class User { class object { public fun main() { val customer = CustomerBuilder().WithFirstName("Homer").WithLastName("Simpson").Build() - System.out.println(customer.getFirstName()) - System.out.println(customer.getLastName()) + System.out.println(customer.firstName) + System.out.println(customer.lastName) } } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/dropAccessors/GetterSetterUsages.java.todo b/j2k/tests/testData/ast/dropAccessors/GetterSetterUsages.java similarity index 80% rename from j2k/tests/testData/ast/dropAccessors/GetterSetterUsages.java.todo rename to j2k/tests/testData/ast/dropAccessors/GetterSetterUsages.java index d196f6614c5..bdf4e369f47 100644 --- a/j2k/tests/testData/ast/dropAccessors/GetterSetterUsages.java.todo +++ b/j2k/tests/testData/ast/dropAccessors/GetterSetterUsages.java @@ -17,3 +17,9 @@ public class AAA { other.setX(other.getX() + 1); } } + +class B { + void foo(AAA a) { + a.setX(a.getX() + 1); + } +} diff --git a/j2k/tests/testData/ast/dropAccessors/GetterSetterUsages.kt b/j2k/tests/testData/ast/dropAccessors/GetterSetterUsages.kt index 87cd25fd2ca..26fcdebb4aa 100644 --- a/j2k/tests/testData/ast/dropAccessors/GetterSetterUsages.kt +++ b/j2k/tests/testData/ast/dropAccessors/GetterSetterUsages.kt @@ -9,3 +9,9 @@ public class AAA { other.x = other.x + 1 } } + +class B { + fun foo(a: AAA) { + a.x = a.x + 1 + } +}