From 7a44409107ff8a1fb9dbc532b904a2950baa8c73 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 17 Nov 2022 17:25:05 +0900 Subject: [PATCH] [kotlin] Setter backing field should be assigned: fix highlighting range closes https://github.com/JetBrains/intellij-community/pull/2236 GitOrigin-RevId: 9c0ad1119827c31ce0811c2ceceaa477e3e585af --- .../inspections/SetterBackingFieldAssignmentInspection.kt | 6 ++++++ .../idea/inspections/LocalInspectionTestGenerated.java | 5 +++++ .../setterBackingFieldAssignment/noAssignment2.kt | 2 +- .../setterBackingFieldAssignment/noAssignment5.kt | 2 +- .../setterBackingFieldAssignment/onLeftBrace.kt | 6 ++++++ 5 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/onLeftBrace.kt diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt index 9ecafd3e759c..3ad797c9fc3b 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/SetterBackingFieldAssignmentInspection.kt @@ -4,6 +4,7 @@ package org.jetbrains.kotlin.idea.inspections import com.intellij.codeInspection.* import com.intellij.openapi.project.Project +import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElementVisitor import com.intellij.psi.PsiWhiteSpace import org.jetbrains.kotlin.descriptors.PropertyDescriptor @@ -18,6 +19,8 @@ import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.getResolvedCall import org.jetbrains.kotlin.idea.codeinsight.api.classic.inspections.AbstractKotlinInspection +import org.jetbrains.kotlin.psi.psiUtil.endOffset +import org.jetbrains.kotlin.psi.psiUtil.startOffset class SetterBackingFieldAssignmentInspection : AbstractKotlinInspection(), CleanupLocalInspectionTool { override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor = @@ -52,10 +55,13 @@ class SetterBackingFieldAssignmentInspection : AbstractKotlinInspection(), Clean } }) return + val name = accessor.namePlaceholder + val highlightRange = TextRange(name.startOffset, (accessor.rightParenthesis ?: name).endOffset).shiftLeft(accessor.startOffset) holder.registerProblem( accessor, KotlinBundle.message("existing.backing.field.is.not.assigned.by.the.setter"), ProblemHighlightType.GENERIC_ERROR_OR_WARNING, + highlightRange, AssignBackingFieldFix() ) }) diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index b0ac23b6e4b7..c1f6777747f4 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -14306,6 +14306,11 @@ public abstract class LocalInspectionTestGenerated extends AbstractLocalInspecti runTest("testData/inspectionsLocal/setterBackingFieldAssignment/noBackingField.kt"); } + @TestMetadata("onLeftBrace.kt") + public void testOnLeftBrace() throws Exception { + runTest("testData/inspectionsLocal/setterBackingFieldAssignment/onLeftBrace.kt"); + } + @TestMetadata("plusAssign.kt") public void testPlusAssign() throws Exception { runTest("testData/inspectionsLocal/setterBackingFieldAssignment/plusAssign.kt"); diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment2.kt b/plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment2.kt index 9a95f3cd38e9..66a610bc1f5d 100644 --- a/plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment2.kt +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment2.kt @@ -1,6 +1,6 @@ class Test { var foo: Int = 1 - set(value) { + set(value) { bar(field) } diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment5.kt b/plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment5.kt index 6e339cfb3261..b0732585832d 100644 --- a/plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment5.kt +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/noAssignment5.kt @@ -1,5 +1,5 @@ class Test { private var str1: String? = null private var str2: String? = null - set(value) { str1 = value } + set(value) { str1 = value } } \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/onLeftBrace.kt b/plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/onLeftBrace.kt new file mode 100644 index 000000000000..179694d4c980 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/inspectionsLocal/setterBackingFieldAssignment/onLeftBrace.kt @@ -0,0 +1,6 @@ +// PROBLEM: none +class Test { + var foo: Int = 1 + set(value) { + } +} \ No newline at end of file