diff --git a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/TrivialPropertyAccessors.kt b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/TrivialPropertyAccessors.kt index 5676f66e28..473a5ae82a 100644 --- a/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/TrivialPropertyAccessors.kt +++ b/diktat-rules/src/main/kotlin/org/cqfn/diktat/ruleset/rules/TrivialPropertyAccessors.kt @@ -32,6 +32,7 @@ class TrivialPropertyAccessors(private val configRules: List) : Rul companion object { private val EXCESS_CHILDREN_TYPES = listOf(LBRACE, RBRACE, WHITE_SPACE, EOL_COMMENT, BLOCK_COMMENT) + private const val ONE_CHILD_IN_ARRAY = 1 } override fun visit(node: ASTNode, @@ -56,12 +57,12 @@ class TrivialPropertyAccessors(private val configRules: List) : Rul @Suppress("UnsafeCallOnNullableType") private fun handleSetAccessor(node: ASTNode) { val valueParamName = node - .getFirstChildWithType(VALUE_PARAMETER_LIST)!! - .firstChildNode - .getIdentifierName()!! - .text + .getFirstChildWithType(VALUE_PARAMETER_LIST) + ?.firstChildNode + ?.getIdentifierName() + ?.text - if (node.hasChildOfType(BLOCK)) { + if (node.hasChildOfType(BLOCK) && !valueParamName.isNullOrEmpty()) { val block = node.getFirstChildWithType(BLOCK)!! val blockChildren = block.getChildren(null).filter { it.elementType !in EXCESS_CHILDREN_TYPES } @@ -82,6 +83,8 @@ class TrivialPropertyAccessors(private val configRules: List) : Rul val references = node.findAllNodesWithSpecificType(REFERENCE_EXPRESSION) if (references.singleOrNull()?.text == "field") { raiseWarning(node) + } else if (node.getChildren(null).size == ONE_CHILD_IN_ARRAY) { + raiseWarning(node) } } diff --git a/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter6/TrivialPropertyAccessorsFixTest.kt b/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter6/TrivialPropertyAccessorsFixTest.kt index 1af4e8b796..1f3909e803 100644 --- a/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter6/TrivialPropertyAccessorsFixTest.kt +++ b/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter6/TrivialPropertyAccessorsFixTest.kt @@ -1,6 +1,5 @@ package org.cqfn.diktat.ruleset.chapter6 -import generated.WarningNames import generated.WarningNames.TRIVIAL_ACCESSORS_ARE_NOT_RECOMMENDED import org.cqfn.diktat.util.FixTestBase import org.cqfn.diktat.ruleset.rules.TrivialPropertyAccessors diff --git a/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter6/TrivialPropertyAccessorsWarnTest.kt b/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter6/TrivialPropertyAccessorsWarnTest.kt index 9deb70c714..47c3814a10 100644 --- a/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter6/TrivialPropertyAccessorsWarnTest.kt +++ b/diktat-rules/src/test/kotlin/org/cqfn/diktat/ruleset/chapter6/TrivialPropertyAccessorsWarnTest.kt @@ -61,4 +61,31 @@ class TrivialPropertyAccessorsWarnTest : LintTestBase(::TrivialPropertyAccessors """.trimMargin() ) } + + @Test + @Tag(TRIVIAL_ACCESSORS_ARE_NOT_RECOMMENDED) + fun `should not trigger on private setter`() { + lintMethod( + """ + |class Test { + | var testName: String? = null + | private set + |} + """.trimMargin() + ) + } + + @Test + @Tag(TRIVIAL_ACCESSORS_ARE_NOT_RECOMMENDED) + fun `should trigger on getter without braces`() { + lintMethod( + """ + |class Test { + | val testName = 0 + | get + |} + """.trimMargin(), + LintError(3, 8, ruleId, "${Warnings.TRIVIAL_ACCESSORS_ARE_NOT_RECOMMENDED.warnText()} get", true) + ) + } } diff --git a/diktat-rules/src/test/resources/test/chapter6/properties/TrivialPropertyAccessorsExpected.kt b/diktat-rules/src/test/resources/test/chapter6/properties/TrivialPropertyAccessorsExpected.kt index 790e1c84b7..e553ffcc22 100644 --- a/diktat-rules/src/test/resources/test/chapter6/properties/TrivialPropertyAccessorsExpected.kt +++ b/diktat-rules/src/test/resources/test/chapter6/properties/TrivialPropertyAccessorsExpected.kt @@ -8,4 +8,9 @@ class Some { var propNotChange: Int = 7 get() { return someCoolLogic(field) } set(value) { anotherCoolLogic(value) } + + var testName: String? = null + private set + + val x = 0 } \ No newline at end of file diff --git a/diktat-rules/src/test/resources/test/chapter6/properties/TrivialPropertyAccessorsTest.kt b/diktat-rules/src/test/resources/test/chapter6/properties/TrivialPropertyAccessorsTest.kt index 6b2fdff851..6fb60efc96 100644 --- a/diktat-rules/src/test/resources/test/chapter6/properties/TrivialPropertyAccessorsTest.kt +++ b/diktat-rules/src/test/resources/test/chapter6/properties/TrivialPropertyAccessorsTest.kt @@ -11,4 +11,10 @@ class Some { var propNotChange: Int = 7 get() { return someCoolLogic(field) } set(value) { anotherCoolLogic(value) } + + var testName: String? = null + private set + + val x = 0 + get } \ No newline at end of file