diff --git a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/MultiRule.kt b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/MultiRule.kt index a9034a82b7a..8e9a3a46e0f 100644 --- a/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/MultiRule.kt +++ b/detekt-api/src/main/kotlin/io/gitlab/arturbosch/detekt/api/MultiRule.kt @@ -7,6 +7,7 @@ import org.jetbrains.kotlin.psi.KtFile * Can be used to combine different rules which do similar work like * scanning the source code line by line to increase performance. */ +@Deprecated("multi rules are much more difficult to maintain and support will be removed in the future") abstract class MultiRule : BaseRule() { abstract val rules: List diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt index b5de3d7b35e..00bb5a66d6f 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/Analyzer.kt @@ -6,7 +6,6 @@ import io.gitlab.arturbosch.detekt.api.BaseRule import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.api.FileProcessListener import io.gitlab.arturbosch.detekt.api.Finding -import io.gitlab.arturbosch.detekt.api.MultiRule import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.RuleSetId import io.gitlab.arturbosch.detekt.api.RuleSetProvider @@ -95,9 +94,10 @@ internal class Analyzer( bindingContext: BindingContext, compilerResources: CompilerResources ): Map> { + @Suppress("DEPRECATION") fun isCorrectable(rule: BaseRule): Boolean = when (rule) { is Rule -> rule.autoCorrect - is MultiRule -> rule.rules.any { it.autoCorrect } + is io.gitlab.arturbosch.detekt.api.MultiRule -> rule.rules.any { it.autoCorrect } else -> error("No other rule type expected.") } diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/rules/RuleSets.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/rules/RuleSets.kt index 01471f93be1..5f15b05d304 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/rules/RuleSets.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/rules/RuleSets.kt @@ -5,7 +5,6 @@ import io.github.detekt.tooling.api.spec.RulesSpec import io.gitlab.arturbosch.detekt.api.BaseRule import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.api.Finding -import io.gitlab.arturbosch.detekt.api.MultiRule import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.RuleId import io.gitlab.arturbosch.detekt.api.RuleSet @@ -35,7 +34,8 @@ fun RuleSet.visitFile( fun associateRuleIdsToRuleSetIds(ruleSets: Sequence): Map { fun extractIds(rule: BaseRule) = - if (rule is MultiRule) { + @Suppress("DEPRECATION") + if (rule is io.gitlab.arturbosch.detekt.api.MultiRule) { rule.rules.asSequence().map(Rule::ruleId) } else { sequenceOf(rule.ruleId) diff --git a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/suppressors/Suppressor.kt b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/suppressors/Suppressor.kt index 08aa49696da..de90162281c 100644 --- a/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/suppressors/Suppressor.kt +++ b/detekt-core/src/main/kotlin/io/gitlab/arturbosch/detekt/core/suppressors/Suppressor.kt @@ -3,7 +3,6 @@ package io.gitlab.arturbosch.detekt.core.suppressors import io.gitlab.arturbosch.detekt.api.BaseRule import io.gitlab.arturbosch.detekt.api.ConfigAware import io.gitlab.arturbosch.detekt.api.Finding -import io.gitlab.arturbosch.detekt.api.MultiRule import io.gitlab.arturbosch.detekt.api.Rule import org.jetbrains.kotlin.resolve.BindingContext @@ -22,8 +21,9 @@ private fun buildSuppressors(rule: ConfigAware, bindingContext: BindingContext): } internal fun getSuppressors(rule: BaseRule, bindingContext: BindingContext): List { + @Suppress("DEPRECATION") return when (rule) { - is MultiRule -> rule.rules.flatMap { innerRule -> + is io.gitlab.arturbosch.detekt.api.MultiRule -> rule.rules.flatMap { innerRule -> buildSuppressors(innerRule, bindingContext).map { suppressor -> InnerSuppressor(innerRule, suppressor) } } is ConfigAware -> buildSuppressors(rule, bindingContext) diff --git a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/SuppressionSpec.kt b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/SuppressionSpec.kt index 577d73740df..56ff05e4fb7 100644 --- a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/SuppressionSpec.kt +++ b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/SuppressionSpec.kt @@ -9,7 +9,6 @@ import io.gitlab.arturbosch.detekt.api.Debt import io.gitlab.arturbosch.detekt.api.Entity import io.gitlab.arturbosch.detekt.api.Issue import io.gitlab.arturbosch.detekt.api.Location -import io.gitlab.arturbosch.detekt.api.MultiRule import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.RuleSet import io.gitlab.arturbosch.detekt.api.Severity @@ -283,6 +282,7 @@ class SuppressionSpec { @Nested inner class `MultiRule` { + @Suppress("DEPRECATION") private lateinit var subject: io.gitlab.arturbosch.detekt.api.MultiRule @BeforeEach @@ -320,7 +320,9 @@ private fun isSuppressedBy(annotation: String, argument: String): Boolean { return annotatedClass.isSuppressedBy("Test", setOf("alias")) } -private class AMultiRule(config: Config) : MultiRule() { +private class AMultiRule(config: Config) : + @Suppress("DEPRECATION") + io.gitlab.arturbosch.detekt.api.MultiRule() { override val rules: List = listOf(TestLPL(config)) } diff --git a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/rules/MultiRuleSpec.kt b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/rules/MultiRuleSpec.kt index 978cd9245ea..1af6399e837 100644 --- a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/rules/MultiRuleSpec.kt +++ b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/rules/MultiRuleSpec.kt @@ -7,7 +7,6 @@ import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.api.Debt import io.gitlab.arturbosch.detekt.api.Entity import io.gitlab.arturbosch.detekt.api.Issue -import io.gitlab.arturbosch.detekt.api.MultiRule import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.RuleSet import io.gitlab.arturbosch.detekt.api.RuleSetProvider @@ -70,7 +69,9 @@ private class MultiRuleProvider : RuleSetProvider { override fun instance(config: Config): RuleSet = RuleSet(ruleSetId, listOf(TestMultiRule(config))) } -private class TestMultiRule(config: Config) : MultiRule() { +private class TestMultiRule(config: Config) : + @Suppress("DEPRECATION") + io.gitlab.arturbosch.detekt.api.MultiRule() { private val one = TestRuleOne(config) private val two = TestRuleTwo(config) diff --git a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/suppressors/SuppressorsSpec.kt b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/suppressors/SuppressorsSpec.kt index c7a4cf1a956..05522c39d3f 100644 --- a/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/suppressors/SuppressorsSpec.kt +++ b/detekt-core/src/test/kotlin/io/gitlab/arturbosch/detekt/core/suppressors/SuppressorsSpec.kt @@ -6,7 +6,6 @@ import io.gitlab.arturbosch.detekt.api.Config import io.gitlab.arturbosch.detekt.api.Debt import io.gitlab.arturbosch.detekt.api.Entity import io.gitlab.arturbosch.detekt.api.Issue -import io.gitlab.arturbosch.detekt.api.MultiRule import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.Severity import io.gitlab.arturbosch.detekt.test.TestConfig @@ -79,7 +78,9 @@ class SuppressorsSpec { } } -private class AMultiRule(config: Config) : MultiRule() { +private class AMultiRule(config: Config) : + @Suppress("DEPRECATION") + io.gitlab.arturbosch.detekt.api.MultiRule() { override val rules: List = listOf(ARule(config)) } diff --git a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/KtLintMultiRule.kt b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/KtLintMultiRule.kt index 0fa570cc4d3..c9dbcaebd32 100644 --- a/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/KtLintMultiRule.kt +++ b/detekt-formatting/src/main/kotlin/io/gitlab/arturbosch/detekt/formatting/KtLintMultiRule.kt @@ -1,7 +1,6 @@ package io.gitlab.arturbosch.detekt.formatting import io.gitlab.arturbosch.detekt.api.Config -import io.gitlab.arturbosch.detekt.api.MultiRule import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.formatting.wrappers.AnnotationOnSeparateLine import io.gitlab.arturbosch.detekt.formatting.wrappers.AnnotationSpacing @@ -65,7 +64,9 @@ import java.util.LinkedList /** * Runs all KtLint rules. */ -class KtLintMultiRule(config: Config = Config.empty) : MultiRule() { +class KtLintMultiRule(config: Config = Config.empty) : + @Suppress("DEPRECATION") + io.gitlab.arturbosch.detekt.api.MultiRule() { override val rules: List = listOf( // Wrappers for ktlint-ruleset-standard rules. Enabled by default. diff --git a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/MultiRuleCollector.kt b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/MultiRuleCollector.kt index 6c7c4d9e6d0..8eecd0ee88f 100644 --- a/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/MultiRuleCollector.kt +++ b/detekt-generator/src/main/kotlin/io/gitlab/arturbosch/detekt/generator/collection/MultiRuleCollector.kt @@ -21,6 +21,7 @@ data class MultiRule( operator fun contains(ruleName: String) = ruleName in this.rules } +@Suppress("DEPRECATION") private val multiRule = io.gitlab.arturbosch.detekt.api.MultiRule::class.simpleName.orEmpty() class MultiRuleCollector : Collector { diff --git a/detekt-report-sarif/src/main/kotlin/io/github/detekt/report/sarif/RuleDescriptors.kt b/detekt-report-sarif/src/main/kotlin/io/github/detekt/report/sarif/RuleDescriptors.kt index 8cb40605522..05fb037f8a4 100644 --- a/detekt-report-sarif/src/main/kotlin/io/github/detekt/report/sarif/RuleDescriptors.kt +++ b/detekt-report-sarif/src/main/kotlin/io/github/detekt/report/sarif/RuleDescriptors.kt @@ -3,7 +3,6 @@ package io.github.detekt.report.sarif import io.github.detekt.sarif4k.MultiformatMessageString import io.github.detekt.sarif4k.ReportingDescriptor import io.gitlab.arturbosch.detekt.api.Config -import io.gitlab.arturbosch.detekt.api.MultiRule import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.RuleSetId import io.gitlab.arturbosch.detekt.api.RuleSetProvider @@ -24,15 +23,21 @@ internal fun toReportingDescriptors(config: Config): List { } val descriptors = mutableListOf() ruleSetIdAndRules.forEach { (ruleSetId, rule) -> + @Suppress("DEPRECATION") when (rule) { - is MultiRule -> descriptors.addAll(rule.toDescriptors(ruleSetId)) + is io.gitlab.arturbosch.detekt.api.MultiRule -> descriptors.addAll( + rule.toDescriptors( + ruleSetId + ) + ) is Rule -> descriptors.add(rule.toDescriptor(ruleSetId)) } } return descriptors } -private fun MultiRule.toDescriptors(ruleSetId: RuleSetId): List = +@Suppress("DEPRECATION") +private fun io.gitlab.arturbosch.detekt.api.MultiRule.toDescriptors(ruleSetId: RuleSetId): List = this.rules.map { it.toDescriptor(ruleSetId) } private fun Rule.toDescriptor(ruleSetId: RuleSetId): ReportingDescriptor { diff --git a/detekt-rules-documentation/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/documentation/KDocStyle.kt b/detekt-rules-documentation/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/documentation/KDocStyle.kt index 84d4b7c3233..81d32f57d09 100644 --- a/detekt-rules-documentation/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/documentation/KDocStyle.kt +++ b/detekt-rules-documentation/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/documentation/KDocStyle.kt @@ -1,10 +1,11 @@ package io.gitlab.arturbosch.detekt.rules.documentation import io.gitlab.arturbosch.detekt.api.Config -import io.gitlab.arturbosch.detekt.api.MultiRule import org.jetbrains.kotlin.psi.KtDeclaration -class KDocStyle(config: Config = Config.empty) : MultiRule() { +class KDocStyle(config: Config = Config.empty) : + @Suppress("DEPRECATION") + io.gitlab.arturbosch.detekt.api.MultiRule() { private val deprecatedBlockTag = DeprecatedBlockTag(config) private val endOfSentenceFormat = EndOfSentenceFormat(config) diff --git a/detekt-rules-empty/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/empty/EmptyBlocks.kt b/detekt-rules-empty/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/empty/EmptyBlocks.kt index 626807bb9f4..76eff32f101 100644 --- a/detekt-rules-empty/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/empty/EmptyBlocks.kt +++ b/detekt-rules-empty/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/empty/EmptyBlocks.kt @@ -1,7 +1,6 @@ package io.gitlab.arturbosch.detekt.rules.empty import io.gitlab.arturbosch.detekt.api.Config -import io.gitlab.arturbosch.detekt.api.MultiRule import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault import org.jetbrains.kotlin.psi.KtCatchClause @@ -29,7 +28,9 @@ import org.jetbrains.kotlin.psi.KtWhileExpression */ @Suppress("TooManyFunctions") @ActiveByDefault(since = "1.0.0") -class EmptyBlocks(val config: Config = Config.empty) : MultiRule() { +class EmptyBlocks(val config: Config = Config.empty) : + @Suppress("DEPRECATION") + io.gitlab.arturbosch.detekt.api.MultiRule() { private val emptyCatchBlock = EmptyCatchBlock(config) private val emptyClassBlock = EmptyClassBlock(config) diff --git a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NamingRules.kt b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NamingRules.kt index 8d731d81dba..cc675cb5260 100644 --- a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NamingRules.kt +++ b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/NamingRules.kt @@ -1,7 +1,6 @@ package io.gitlab.arturbosch.detekt.rules.naming import io.gitlab.arturbosch.detekt.api.Config -import io.gitlab.arturbosch.detekt.api.MultiRule import io.gitlab.arturbosch.detekt.api.Rule import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtConstructor @@ -16,7 +15,9 @@ import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.KtVariableDeclaration import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType -class NamingRules(config: Config = Config.empty) : MultiRule() { +class NamingRules(config: Config = Config.empty) : + @Suppress("DEPRECATION") + io.gitlab.arturbosch.detekt.api.MultiRule() { private val variableNamingRule = VariableNaming(config) private val variableMinNameLengthRule = VariableMinLength(config) diff --git a/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/RuleProviderSpec.kt b/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/RuleProviderSpec.kt index 51ee19e6bb5..519919f77d9 100644 --- a/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/RuleProviderSpec.kt +++ b/detekt-rules/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/RuleProviderSpec.kt @@ -2,7 +2,6 @@ package io.gitlab.arturbosch.detekt.rules import io.gitlab.arturbosch.detekt.api.BaseRule import io.gitlab.arturbosch.detekt.api.Config -import io.gitlab.arturbosch.detekt.api.MultiRule import io.gitlab.arturbosch.detekt.api.Rule import io.gitlab.arturbosch.detekt.api.RuleSetProvider import io.gitlab.arturbosch.detekt.api.internal.DefaultRuleSetProvider @@ -63,7 +62,9 @@ private fun getRulesPackageNameForProvider(providerType: Class { val ruleSet = provider.instance(Config.empty) - val rules = ruleSet.rules.flatMap { (it as? MultiRule)?.rules ?: listOf(it) } + + @Suppress("DEPRECATION") + val rules = ruleSet.rules.flatMap { (it as? io.gitlab.arturbosch.detekt.api.MultiRule)?.rules ?: listOf(it) } assertThat(rules).isNotEmpty return rules }