in src/main/kotlin/com/dd/detektcustomrules/rules/NamingBackingProperties.kt [17:45]
override fun visitClass(klass: KtClass) {
super.visitClass(klass)
val properties = klass.getProperties()
val fields = properties.filterPrivate()
val propsWithGetter = properties.filterPublicWithGetter()
for (prop in propsWithGetter) {
val backingFields = fields.filter {
prop.getter?.text?.contains(it.name ?: "") ?: false
}
for (field in backingFields) {
val fieldName = field.name ?: ""
// Report violation if fieldName isn't prefixed with underscore
// or it doesn't exactly match with the real property name
if (!fieldName.startsWith("_") || fieldName.removePrefix("_") != prop.name) {
report(
CodeSmell(
issue = issue,
entity = Entity.atName(field),
message = issue.description
)
)
}
}
}
}