From 66e32e53c7cda1bf5e22b716b8e72061017b9b3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Brais=20Gab=C3=ADn?= Date: Tue, 5 Apr 2022 21:21:12 +0200 Subject: [PATCH] CanBeNonNullable shouldn't consider abstract properties (#4686) --- .../detekt/rules/style/CanBeNonNullable.kt | 3 ++- .../detekt/rules/style/CanBeNonNullableSpec.kt | 13 ++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt index ebc8bb2d555..18ca368dae4 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullable.kt @@ -9,6 +9,7 @@ import io.gitlab.arturbosch.detekt.api.Issue import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.Severity import io.gitlab.arturbosch.detekt.api.internal.RequiresTypeResolution +import io.gitlab.arturbosch.detekt.rules.isAbstract import io.gitlab.arturbosch.detekt.rules.isNonNullCheck import io.gitlab.arturbosch.detekt.rules.isNullCheck import io.gitlab.arturbosch.detekt.rules.isOpen @@ -474,7 +475,7 @@ class CanBeNonNullable(config: Config = Config.empty) : Rule(config) { } private fun KtProperty.isCandidate(): Boolean { - if (isOpen()) return false + if (isOpen() || isAbstract()) return false val isSetToNonNullable = initializer?.isNullableType() != true && getter?.isNullableType() != true && delegate?.returnsNullable() != true diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullableSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullableSpec.kt index 68b0faebd70..1224b2a8890 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullableSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/CanBeNonNullableSpec.kt @@ -377,7 +377,7 @@ class CanBeNonNullableSpec(val env: KotlinCoreEnvironment) { @Test fun `does not report open properties`() { val code = """ - abstract class A { + open class A { open val a: Int? = 5 open var b: Int? = 5 } @@ -385,6 +385,17 @@ class CanBeNonNullableSpec(val env: KotlinCoreEnvironment) { assertThat(subject.compileAndLintWithContext(env, code)).isEmpty() } + @Test + fun `does not report abstract properties`() { + val code = """ + abstract class A { + abstract val a: Int? + abstract var b: Int? + } + """ + assertThat(subject.compileAndLintWithContext(env, code)).isEmpty() + } + @Test fun `does not report properties whose initial assignment derives from unsafe non-Java code`() { val code = """