diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt index b110bc28e45..b290d4bfc53 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt @@ -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) } } \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment.kt b/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment.kt index ba9e0ee8805..a6275cca7c7 100644 --- a/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment.kt +++ b/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment.kt @@ -1,3 +1,4 @@ +// FIX: Assign backing field class Test { var foo: Int = 1 set(value) { diff --git a/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment.kt.after b/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment.kt.after index edde0232452..2aedc6d6a3c 100644 --- a/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment.kt.after +++ b/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment.kt.after @@ -1,3 +1,4 @@ +// FIX: Assign backing field class Test { var foo: Int = 1 set(value) { diff --git a/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment3.kt b/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment3.kt new file mode 100644 index 00000000000..54d8786ca48 --- /dev/null +++ b/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment3.kt @@ -0,0 +1,6 @@ +class Test { + var foo: Int = 1 + set(value) { + + } +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment3.kt.after b/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment3.kt.after new file mode 100644 index 00000000000..edde0232452 --- /dev/null +++ b/idea/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment3.kt.after @@ -0,0 +1,6 @@ +class Test { + var foo: Int = 1 + set(value) { + field = value + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index 68fa009ae81..7f7a95f0773 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -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");