Assign backing field: don't add empty line
#KT-28694 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
79537a5fdb
commit
07ffac72cf
+9
-6
@@ -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
@@ -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) {
|
||||
|
||||
}
|
||||
}
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
class Test {
|
||||
var foo: Int = 1
|
||||
set(value) {
|
||||
field = value
|
||||
}
|
||||
}
|
||||
+5
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user