diff --git a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt index b1cf371c5d8..e850a1fea4c 100644 --- a/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt +++ b/detekt-rules-style/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClass.kt @@ -78,7 +78,7 @@ class UnnecessaryAbstractClass(config: Config = Config.empty) : Rule(config) { val namedMembers = body.children.filterIsInstance() val namedClassMembers = NamedClassMembers(klass, namedMembers) namedClassMembers.detectAbstractAndConcreteType() - } else if (klass.superTypeListEntries.isEmpty() && klass.hasConstructorParameter()) { + } else if (klass.superTypeListEntries.isEmpty()) { report(CodeSmell(issue, Entity.from(klass), noAbstractMember), klass) } } diff --git a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClassSpec.kt b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClassSpec.kt index 25dcc6db2fa..b0623dfe71f 100644 --- a/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClassSpec.kt +++ b/detekt-rules-style/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/style/UnnecessaryAbstractClassSpec.kt @@ -44,6 +44,24 @@ class UnnecessaryAbstractClassSpec : Spek({ ) } + it("reports completely-empty abstract classes") { + val code = """ + abstract class A + abstract class B() + """ + assertThat(subject.compileAndLintWithContext(env, code)).hasSize(2) + } + + it("does not report a completely-empty abstract class that inherits from an interface") { + val code = """ + interface A { + val i: Int + } + abstract class B : A + """.trimIndent() + assertThat(subject.compileAndLintWithContext(env, code)).isEmpty() + } + it("does not report an abstract class with concrete members derived from a base class") { val code = """ abstract class A { @@ -191,14 +209,6 @@ class UnnecessaryAbstractClassSpec : Spek({ assertThat(subject.compileAndLintWithContext(env, code)).isEmpty() } - it("does not report empty abstract classes") { - val code = """ - abstract class A - abstract class B() - """ - assertThat(subject.compileAndLintWithContext(env, code)).isEmpty() - } - it("does not report abstract classes with module annotation") { val code = """ @Deprecated("test")