@@ -18,13 +18,16 @@ import com.pinterest.ktlint.core.ast.ElementType.FUN
18
18
import com.pinterest.ktlint.core.ast.ElementType.INNER_KEYWORD
19
19
import com.pinterest.ktlint.core.ast.ElementType.MODIFIER_LIST
20
20
import com.pinterest.ktlint.core.ast.ElementType.OPEN_KEYWORD
21
+ import com.pinterest.ktlint.core.ast.ElementType.PRIMARY_CONSTRUCTOR
21
22
import com.pinterest.ktlint.core.ast.ElementType.PROPERTY
22
23
import com.pinterest.ktlint.core.ast.ElementType.PROPERTY_ACCESSOR
23
24
import com.pinterest.ktlint.core.ast.ElementType.SEALED_KEYWORD
24
25
import com.pinterest.ktlint.core.ast.ElementType.SUPER_TYPE_LIST
25
26
import org.jetbrains.kotlin.com.intellij.lang.ASTNode
26
27
import org.jetbrains.kotlin.psi.KtClass
28
+ import org.jetbrains.kotlin.psi.KtClassBody
27
29
import org.jetbrains.kotlin.psi.KtExpression
30
+ import org.jetbrains.kotlin.psi.KtPrimaryConstructor
28
31
29
32
/* *
30
33
* This rule checks if class can be made as data class
@@ -59,8 +62,18 @@ class DataClassesRule(private val configRule: List<RulesConfig>) : Rule("data-cl
59
62
USE_DATA_CLASS .warn(configRule, emitWarn, isFixMode, " ${(node.psi as KtClass ).name} " , node.startOffset, node)
60
63
}
61
64
62
- @Suppress(" UnsafeCallOnNullableType" , " FUNCTION_BOOLEAN_PREFIX" )
65
+ @Suppress(" UnsafeCallOnNullableType" , " FUNCTION_BOOLEAN_PREFIX" , " ComplexMethod " )
63
66
private fun ASTNode.canBeDataClass (): Boolean {
67
+ val isNotPropertyInClassBody = findChildByType(CLASS_BODY )?.let { (it.psi as KtClassBody ).properties.isEmpty() } ? : true
68
+ val hasPropertyInConstructor = findChildByType(PRIMARY_CONSTRUCTOR )
69
+ ?.let { constructor ->
70
+ (constructor .psi as KtPrimaryConstructor )
71
+ .valueParameters
72
+ .run { isNotEmpty() && all { it.hasValOrVar() } }
73
+ } ? : false
74
+ if (isNotPropertyInClassBody && ! hasPropertyInConstructor) {
75
+ return false
76
+ }
64
77
val classBody = getFirstChildWithType(CLASS_BODY )
65
78
if (hasChildOfType(MODIFIER_LIST )) {
66
79
val list = getFirstChildWithType(MODIFIER_LIST )!!
0 commit comments