J2K: processing usages of get/set methods in the code being converted when converting them into property

This commit is contained in:
Valentin Kipyatkov
2014-10-20 21:03:11 +04:00
committed by valentin
parent 3b51858ed9
commit 41c7ec8285
5 changed files with 36 additions and 11 deletions
@@ -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))
}
}
}
@@ -44,14 +44,20 @@ class UsageProcessingExpressionConverter(processings: Collection<UsageProcessing
override fun convertExpression(expression: PsiExpression, codeConverter: CodeConverter): Expression? {
if (targetToProcessing.isEmpty()) return null
//TODO: method usages
when (expression) {
is PsiReferenceExpression -> {
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
}
}
@@ -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)
}
}
}
@@ -17,3 +17,9 @@ public class AAA {
other.setX(other.getX() + 1);
}
}
class B {
void foo(AAA a) {
a.setX(a.getX() + 1);
}
}
@@ -9,3 +9,9 @@ public class AAA {
other.x = other.x + 1
}
}
class B {
fun foo(a: AAA) {
a.x = a.x + 1
}
}