Assign backing field: don't add empty line

#KT-28694 Fixed
This commit is contained in:
Toshiaki Kameyama
2018-12-10 14:47:35 +09:00
committed by Mikhail Glukhikh
parent 79537a5fdb
commit 07ffac72cf
6 changed files with 28 additions and 6 deletions
@@ -8,12 +8,14 @@ package org.jetbrains.kotlin.idea.inspections
import com.intellij.codeInspection.*
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElementVisitor
import com.intellij.psi.PsiWhiteSpace
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType
import org.jetbrains.kotlin.psi.psiUtil.siblings
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
@@ -69,7 +71,7 @@ private val assignmentOperators = listOf(KtTokens.EQ, KtTokens.PLUSEQ, KtTokens.
private val incrementAndDecrementOperators = listOf(KtTokens.PLUSPLUS, KtTokens.MINUSMINUS)
private class AssignBackingFieldFix : LocalQuickFix {
override fun getName() = "Assign backing filed"
override fun getName() = "Assign backing field"
override fun getFamilyName() = name
@@ -77,10 +79,11 @@ private class AssignBackingFieldFix : LocalQuickFix {
val setter = descriptor.psiElement as? KtPropertyAccessor ?: return
val parameter = setter.valueParameters.firstOrNull() ?: return
val bodyExpression = setter.bodyBlockExpression ?: return
setter.hasBlockBody()
bodyExpression.addBefore(
KtPsiFactory(setter).createExpression("field = ${parameter.text}"),
bodyExpression.rBrace
)
bodyExpression.lBrace
?.siblings(withItself = false)
?.takeWhile { it != bodyExpression.rBrace }
?.singleOrNull { it is PsiWhiteSpace }
?.also { it.delete() }
bodyExpression.addBefore(KtPsiFactory(setter).createExpression("field = ${parameter.text}"), bodyExpression.rBrace)
}
}
@@ -1,3 +1,4 @@
// FIX: Assign backing field
class Test {
var foo: Int = 1
<caret>set(value) {
@@ -1,3 +1,4 @@
// FIX: Assign backing field
class Test {
var foo: Int = 1
set(value) {
@@ -0,0 +1,6 @@
class Test {
var foo: Int = 1
<caret>set(value) {
}
}
@@ -0,0 +1,6 @@
class Test {
var foo: Int = 1
set(value) {
field = value
}
}
@@ -6354,6 +6354,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
runTest("idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment2.kt");
}
@TestMetadata("noAssignment3.kt")
public void testNoAssignment3() throws Exception {
runTest("idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment3.kt");
}
@TestMetadata("noBackingField.kt")
public void testNoBackingField() throws Exception {
runTest("idea/testData/inspectionsLocal/setterBackingFieldAssignment/noBackingField.kt");