From 69f3f04fe4f4747b2d2981a941ab2d4e3008e23d Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Mon, 29 Jan 2018 12:42:49 +0300 Subject: [PATCH] Correct report of "redundant setter" for override & empty block cases So #KT-22364 Fixed --- .../inspections/RedundantSetterInspection.kt | 2 -- .../redundantSetter/blankBody.kt | 2 ++ ...yReturnField.kt => notOnlyFieldSetBody.kt} | 0 ...ReturnFieldBody.kt => onlyFieldSetBody.kt} | 0 ...ody.kt.after => onlyFieldSetBody.kt.after} | 0 .../onlyReturnFieldBody.kt.after | 3 -- .../{override.kt => overrideBlankBody.kt} | 2 +- .../redundantSetter/overrideDefault.kt | 8 +++++ .../redundantSetter/overrideDefault.kt.after | 7 ++++ .../overrideNotOnlyFieldSetBody.kt | 13 +++++++ .../overrideOnlyFieldSetBody.kt | 10 ++++++ .../overrideOnlyFieldSetBody.kt.after | 7 ++++ .../LocalInspectionTestGenerated.java | 36 ++++++++++++++----- 13 files changed, 75 insertions(+), 15 deletions(-) rename idea/testData/inspectionsLocal/redundantSetter/{notOnlyReturnField.kt => notOnlyFieldSetBody.kt} (100%) rename idea/testData/inspectionsLocal/redundantSetter/{onlyReturnFieldBody.kt => onlyFieldSetBody.kt} (100%) rename idea/testData/inspectionsLocal/redundantSetter/{blankBody.kt.after => onlyFieldSetBody.kt.after} (100%) delete mode 100644 idea/testData/inspectionsLocal/redundantSetter/onlyReturnFieldBody.kt.after rename idea/testData/inspectionsLocal/redundantSetter/{override.kt => overrideBlankBody.kt} (79%) create mode 100644 idea/testData/inspectionsLocal/redundantSetter/overrideDefault.kt create mode 100644 idea/testData/inspectionsLocal/redundantSetter/overrideDefault.kt.after create mode 100644 idea/testData/inspectionsLocal/redundantSetter/overrideNotOnlyFieldSetBody.kt create mode 100644 idea/testData/inspectionsLocal/redundantSetter/overrideOnlyFieldSetBody.kt create mode 100644 idea/testData/inspectionsLocal/redundantSetter/overrideOnlyFieldSetBody.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantSetterInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantSetterInspection.kt index f06c4553d7e..a7ac339a9f6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantSetterInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/RedundantSetterInspection.kt @@ -28,11 +28,9 @@ class RedundantSetterInspection : AbstractKotlinInspection(), CleanupLocalInspec private fun KtPropertyAccessor.isRedundantSetter(): Boolean { if (!isSetter) return false if (annotationEntries.isNotEmpty()) return false - if (property.hasModifier(KtTokens.OVERRIDE_KEYWORD)) return false if (hasLowerVisibilityThanProperty()) return false val expression = bodyExpression ?: return true if (expression is KtBlockExpression) { - if (expression.statements.isEmpty()) return true val statement = expression.statements.takeIf { it.size == 1 }?.firstOrNull() ?: return false val parameter = valueParameters.takeIf { it.size == 1 }?.firstOrNull() ?: return false val binaryExpression = statement as? KtBinaryExpression ?: return false diff --git a/idea/testData/inspectionsLocal/redundantSetter/blankBody.kt b/idea/testData/inspectionsLocal/redundantSetter/blankBody.kt index 0a947d01f0d..8ef12486124 100644 --- a/idea/testData/inspectionsLocal/redundantSetter/blankBody.kt +++ b/idea/testData/inspectionsLocal/redundantSetter/blankBody.kt @@ -1,3 +1,5 @@ +// PROBLEM: none + class Test { var x = 1 set(value) { diff --git a/idea/testData/inspectionsLocal/redundantSetter/notOnlyReturnField.kt b/idea/testData/inspectionsLocal/redundantSetter/notOnlyFieldSetBody.kt similarity index 100% rename from idea/testData/inspectionsLocal/redundantSetter/notOnlyReturnField.kt rename to idea/testData/inspectionsLocal/redundantSetter/notOnlyFieldSetBody.kt diff --git a/idea/testData/inspectionsLocal/redundantSetter/onlyReturnFieldBody.kt b/idea/testData/inspectionsLocal/redundantSetter/onlyFieldSetBody.kt similarity index 100% rename from idea/testData/inspectionsLocal/redundantSetter/onlyReturnFieldBody.kt rename to idea/testData/inspectionsLocal/redundantSetter/onlyFieldSetBody.kt diff --git a/idea/testData/inspectionsLocal/redundantSetter/blankBody.kt.after b/idea/testData/inspectionsLocal/redundantSetter/onlyFieldSetBody.kt.after similarity index 100% rename from idea/testData/inspectionsLocal/redundantSetter/blankBody.kt.after rename to idea/testData/inspectionsLocal/redundantSetter/onlyFieldSetBody.kt.after diff --git a/idea/testData/inspectionsLocal/redundantSetter/onlyReturnFieldBody.kt.after b/idea/testData/inspectionsLocal/redundantSetter/onlyReturnFieldBody.kt.after deleted file mode 100644 index 53018233b00..00000000000 --- a/idea/testData/inspectionsLocal/redundantSetter/onlyReturnFieldBody.kt.after +++ /dev/null @@ -1,3 +0,0 @@ -class Test { - var x = 1 -} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/redundantSetter/override.kt b/idea/testData/inspectionsLocal/redundantSetter/overrideBlankBody.kt similarity index 79% rename from idea/testData/inspectionsLocal/redundantSetter/override.kt rename to idea/testData/inspectionsLocal/redundantSetter/overrideBlankBody.kt index a3279967c12..0692f60b3cb 100644 --- a/idea/testData/inspectionsLocal/redundantSetter/override.kt +++ b/idea/testData/inspectionsLocal/redundantSetter/overrideBlankBody.kt @@ -5,5 +5,5 @@ interface A { class X : A { override var myVar: Boolean = false - set(value) {} + set(value) {} } \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/redundantSetter/overrideDefault.kt b/idea/testData/inspectionsLocal/redundantSetter/overrideDefault.kt new file mode 100644 index 00000000000..6155a9d9df6 --- /dev/null +++ b/idea/testData/inspectionsLocal/redundantSetter/overrideDefault.kt @@ -0,0 +1,8 @@ +interface A { + var myVar: Boolean +} + +class X : A { + override var myVar: Boolean = false + set +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/redundantSetter/overrideDefault.kt.after b/idea/testData/inspectionsLocal/redundantSetter/overrideDefault.kt.after new file mode 100644 index 00000000000..d5b3d1e5e4b --- /dev/null +++ b/idea/testData/inspectionsLocal/redundantSetter/overrideDefault.kt.after @@ -0,0 +1,7 @@ +interface A { + var myVar: Boolean +} + +class X : A { + override var myVar: Boolean = false +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/redundantSetter/overrideNotOnlyFieldSetBody.kt b/idea/testData/inspectionsLocal/redundantSetter/overrideNotOnlyFieldSetBody.kt new file mode 100644 index 00000000000..dea6e9293a0 --- /dev/null +++ b/idea/testData/inspectionsLocal/redundantSetter/overrideNotOnlyFieldSetBody.kt @@ -0,0 +1,13 @@ +// PROBLEM: none +interface A { + var myVar: Boolean +} + +class X : A { + override var myVar: Boolean = false + set(value) { + foo() + field = value + } + fun foo() {} +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/redundantSetter/overrideOnlyFieldSetBody.kt b/idea/testData/inspectionsLocal/redundantSetter/overrideOnlyFieldSetBody.kt new file mode 100644 index 00000000000..23e43a89bd6 --- /dev/null +++ b/idea/testData/inspectionsLocal/redundantSetter/overrideOnlyFieldSetBody.kt @@ -0,0 +1,10 @@ +interface A { + var myVar: Boolean +} + +class X : A { + override var myVar: Boolean = false + set(value) { + field = value + } +} \ No newline at end of file diff --git a/idea/testData/inspectionsLocal/redundantSetter/overrideOnlyFieldSetBody.kt.after b/idea/testData/inspectionsLocal/redundantSetter/overrideOnlyFieldSetBody.kt.after new file mode 100644 index 00000000000..d5b3d1e5e4b --- /dev/null +++ b/idea/testData/inspectionsLocal/redundantSetter/overrideOnlyFieldSetBody.kt.after @@ -0,0 +1,7 @@ +interface A { + var myVar: Boolean +} + +class X : A { + override var myVar: Boolean = false +} \ 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 7c3be5c1574..d1488fe94be 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -2898,21 +2898,39 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { doTest(fileName); } - @TestMetadata("notOnlyReturnField.kt") - public void testNotOnlyReturnField() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/redundantSetter/notOnlyReturnField.kt"); + @TestMetadata("notOnlyFieldSetBody.kt") + public void testNotOnlyFieldSetBody() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/redundantSetter/notOnlyFieldSetBody.kt"); doTest(fileName); } - @TestMetadata("onlyReturnFieldBody.kt") - public void testOnlyReturnFieldBody() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/redundantSetter/onlyReturnFieldBody.kt"); + @TestMetadata("onlyFieldSetBody.kt") + public void testOnlyFieldSetBody() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/redundantSetter/onlyFieldSetBody.kt"); doTest(fileName); } - @TestMetadata("override.kt") - public void testOverride() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/redundantSetter/override.kt"); + @TestMetadata("overrideBlankBody.kt") + public void testOverrideBlankBody() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/redundantSetter/overrideBlankBody.kt"); + doTest(fileName); + } + + @TestMetadata("overrideDefault.kt") + public void testOverrideDefault() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/redundantSetter/overrideDefault.kt"); + doTest(fileName); + } + + @TestMetadata("overrideNotOnlyFieldSetBody.kt") + public void testOverrideNotOnlyFieldSetBody() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/redundantSetter/overrideNotOnlyFieldSetBody.kt"); + doTest(fileName); + } + + @TestMetadata("overrideOnlyFieldSetBody.kt") + public void testOverrideOnlyFieldSetBody() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/redundantSetter/overrideOnlyFieldSetBody.kt"); doTest(fileName); }