diff --git a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/ObjectPropertyNaming.kt b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/ObjectPropertyNaming.kt index 64526b7ebfc..8e51d122317 100644 --- a/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/ObjectPropertyNaming.kt +++ b/detekt-rules-naming/src/main/kotlin/io/gitlab/arturbosch/detekt/rules/naming/ObjectPropertyNaming.kt @@ -12,7 +12,10 @@ import io.gitlab.arturbosch.detekt.api.internal.ActiveByDefault import io.gitlab.arturbosch.detekt.api.internal.Configuration import io.gitlab.arturbosch.detekt.rules.identifierName import io.gitlab.arturbosch.detekt.rules.isConstant +import org.jetbrains.kotlin.psi.KtClassOrObject +import org.jetbrains.kotlin.psi.KtObjectDeclaration import org.jetbrains.kotlin.psi.KtProperty +import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.isPrivate /** @@ -38,7 +41,7 @@ class ObjectPropertyNaming(config: Config = Config.empty) : Rule(config) { private val privatePropertyPattern: Regex by config("(_)?[A-Za-z][_A-Za-z0-9]*") { it.toRegex() } override fun visitProperty(property: KtProperty) { - if (property.isLocal || property.isTopLevel) { + if (property.isPropertyOfObjectDeclaration().not()) { return } @@ -49,6 +52,9 @@ class ObjectPropertyNaming(config: Config = Config.empty) : Rule(config) { } } + private fun KtProperty.isPropertyOfObjectDeclaration(): Boolean = + this.isMember && this.getNonStrictParentOfType() is KtObjectDeclaration + private fun handleConstant(property: KtProperty) { if (!property.identifierName().matches(constantPattern)) { report(property, "Object constant names should match the pattern: $constantPattern") diff --git a/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/ObjectPropertyNamingSpec.kt b/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/ObjectPropertyNamingSpec.kt index d7930bb50bc..cd16af7e6ae 100644 --- a/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/ObjectPropertyNamingSpec.kt +++ b/detekt-rules-naming/src/test/kotlin/io/gitlab/arturbosch/detekt/rules/naming/ObjectPropertyNamingSpec.kt @@ -251,6 +251,30 @@ class ObjectPropertyNamingSpec { assertThat(subject.compileAndLint(code)).isEmpty() } } + + @Test + fun `should not detect class properties`() { + val subject = ObjectPropertyNaming() + val code = """ + class O { + val _invalidNaming = 1 + } + """.trimIndent() + assertThat(subject.compileAndLint(code)).isEmpty() + } + + @Test + fun `should not detect properties of class in object declaration`() { + val subject = ObjectPropertyNaming() + val code = """ + object A { + class O { + val _invalidNaming = 1 + } + } + """.trimIndent() + assertThat(subject.compileAndLint(code)).isEmpty() + } } @Suppress("UnnecessaryAbstractClass")