diff --git a/detekt-core/src/main/resources/default-detekt-config.yml b/detekt-core/src/main/resources/default-detekt-config.yml index 9f414ae5fe05..026999474bb8 100644 --- a/detekt-core/src/main/resources/default-detekt-config.yml +++ b/detekt-core/src/main/resources/default-detekt-config.yml @@ -502,7 +502,8 @@ style: active: false DataClassContainsFunctions: active: false - conversionFunctionPrefix: 'to' + conversionFunctionPrefix: + - 'to' DataClassShouldBeImmutable: active: false DestructuringDeclarationWithTooManyEntries: diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/DataClassContainsFunctions.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/DataClassContainsFunctions.kt index 925365b21548..499f86a54643 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/DataClassContainsFunctions.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/DataClassContainsFunctions.kt @@ -7,7 +7,6 @@ import io.gitlab.arturbosch.detekt.api.Entity 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.SplitPattern import io.gitlab.arturbosch.detekt.api.config import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.rules.isOverride @@ -38,7 +37,7 @@ class DataClassContainsFunctions(config: Config = Config.empty) : Rule(config) { ) @Configuration("allowed conversion function names") - private val conversionFunctionPrefix: SplitPattern by config("to") { SplitPattern(it) } + private val conversionFunctionPrefix: List by config(listOf("to")) override fun visitClass(klass: KtClass) { if (klass.isData()) { @@ -50,15 +49,18 @@ class DataClassContainsFunctions(config: Config = Config.empty) : Rule(config) { } private fun checkFunction(klass: KtClass, function: KtNamedFunction) { - if (!function.isOverride() && !conversionFunctionPrefix.startWith(function.name)) { - report( - CodeSmell( - issue, - Entity.atName(function), - "The data class ${klass.name} contains functions which are not registered " + - "conversion functions. The offending method is called ${function.name}" - ) + if (function.isOverride()) return + + val functionName = function.name + if (functionName != null && conversionFunctionPrefix.any { functionName.startsWith(it) }) return + + report( + CodeSmell( + issue, + Entity.atName(function), + "The data class ${klass.name} contains functions which are not registered " + + "conversion functions. The offending method is called $functionName" ) - } + ) } } diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/DataClassContainsFunctionsSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/DataClassContainsFunctionsSpec.kt index d78b0e82f742..427d5e6c8282 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/DataClassContainsFunctionsSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/DataClassContainsFunctionsSpec.kt @@ -29,11 +29,18 @@ class DataClassContainsFunctionsSpec { } @Test - fun `reports valid data class without conversion function`() { + fun `reports valid data class without conversion function string`() { val config = TestConfig(mapOf(CONVERSION_FUNCTION_PREFIX to "")) val rule = DataClassContainsFunctions(config) assertThat(rule.compileAndLint(code)).hasSize(2) } + + @Test + fun `reports valid data class without conversion function list`() { + val config = TestConfig(mapOf(CONVERSION_FUNCTION_PREFIX to listOf())) + val rule = DataClassContainsFunctions(config) + assertThat(rule.compileAndLint(code)).hasSize(2) + } } @Test