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.codeInspection.*
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import com.intellij.psi.PsiElementVisitor
|
import com.intellij.psi.PsiElementVisitor
|
||||||
|
import com.intellij.psi.PsiWhiteSpace
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
import org.jetbrains.kotlin.idea.caches.resolve.analyze
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType
|
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.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall
|
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 val incrementAndDecrementOperators = listOf(KtTokens.PLUSPLUS, KtTokens.MINUSMINUS)
|
||||||
|
|
||||||
private class AssignBackingFieldFix : LocalQuickFix {
|
private class AssignBackingFieldFix : LocalQuickFix {
|
||||||
override fun getName() = "Assign backing filed"
|
override fun getName() = "Assign backing field"
|
||||||
|
|
||||||
override fun getFamilyName() = name
|
override fun getFamilyName() = name
|
||||||
|
|
||||||
@@ -77,10 +79,11 @@ private class AssignBackingFieldFix : LocalQuickFix {
|
|||||||
val setter = descriptor.psiElement as? KtPropertyAccessor ?: return
|
val setter = descriptor.psiElement as? KtPropertyAccessor ?: return
|
||||||
val parameter = setter.valueParameters.firstOrNull() ?: return
|
val parameter = setter.valueParameters.firstOrNull() ?: return
|
||||||
val bodyExpression = setter.bodyBlockExpression ?: return
|
val bodyExpression = setter.bodyBlockExpression ?: return
|
||||||
setter.hasBlockBody()
|
bodyExpression.lBrace
|
||||||
bodyExpression.addBefore(
|
?.siblings(withItself = false)
|
||||||
KtPsiFactory(setter).createExpression("field = ${parameter.text}"),
|
?.takeWhile { it != bodyExpression.rBrace }
|
||||||
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 {
|
class Test {
|
||||||
var foo: Int = 1
|
var foo: Int = 1
|
||||||
<caret>set(value) {
|
<caret>set(value) {
|
||||||
|
|||||||
+1
@@ -1,3 +1,4 @@
|
|||||||
|
// FIX: Assign backing field
|
||||||
class Test {
|
class Test {
|
||||||
var foo: Int = 1
|
var foo: Int = 1
|
||||||
set(value) {
|
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");
|
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")
|
@TestMetadata("noBackingField.kt")
|
||||||
public void testNoBackingField() throws Exception {
|
public void testNoBackingField() throws Exception {
|
||||||
runTest("idea/testData/inspectionsLocal/setterBackingFieldAssignment/noBackingField.kt");
|
runTest("idea/testData/inspectionsLocal/setterBackingFieldAssignment/noBackingField.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user