@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.psi.KtNamedFunction
28
28
import org.jetbrains.kotlin.psi.KtParameter
29
29
import org.jetbrains.kotlin.psi.KtReturnExpression
30
30
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
31
- import org.jetbrains.kotlin.resolve.BindingContext
32
31
import org.sonar.check.Rule
33
32
import org.sonarsource.kotlin.api.checks.ANY_TYPE
34
33
import org.sonarsource.kotlin.api.checks.AbstractCheck
@@ -52,7 +51,6 @@ private val HASHCODE_MATCHER = FunMatcher {
52
51
private val OBJECTS_HASH_MATCHER = FunMatcher (qualifier = " java.util.Objects" , name = " hash" )
53
52
private val ARRAYS_HASHCODE_MATCHER = FunMatcher (qualifier = " java.util.Arrays" , name = " hashCode" )
54
53
55
- @org.sonarsource.kotlin.api.frontend.K1only
56
54
@Rule(key = " S6207" )
57
55
class RedundantMethodsInDataClassesCheck : AbstractCheck () {
58
56
@@ -68,8 +66,8 @@ class RedundantMethodsInDataClassesCheck : AbstractCheck() {
68
66
69
67
klass.body?.functions?.forEach {
70
68
when {
71
- EQUALS_MATCHER .matches(it, context.bindingContext ) -> equalsMethod = it
72
- HASHCODE_MATCHER .matches(it, context.bindingContext ) -> hashCodeMethod = it
69
+ EQUALS_MATCHER .matches(it) -> equalsMethod = it
70
+ HASHCODE_MATCHER .matches(it) -> hashCodeMethod = it
73
71
}
74
72
}
75
73
@@ -80,7 +78,7 @@ class RedundantMethodsInDataClassesCheck : AbstractCheck() {
80
78
}
81
79
82
80
hashCodeMethod?.let {
83
- if (it.hashCodeHasDefaultImpl(klassParameters, context.bindingContext )) {
81
+ if (it.hashCodeHasDefaultImpl(klassParameters)) {
84
82
context.reportIssue(it.nameIdentifier!! , issueMessage)
85
83
}
86
84
}
@@ -89,33 +87,31 @@ class RedundantMethodsInDataClassesCheck : AbstractCheck() {
89
87
90
88
private fun KtNamedFunction.hashCodeHasDefaultImpl (
91
89
klassParameters : List <KtParameter >,
92
- bindingContext : BindingContext
93
90
): Boolean {
94
91
return if (hasBlockBody()) {
95
92
val returnExpressions = collectDescendantsOfType<KtReturnExpression >()
96
93
if (returnExpressions.size > 1 ) return false
97
- checkHashExpression(returnExpressions[0 ].returnedExpression, bindingContext, klassParameters)
94
+ checkHashExpression(returnExpressions[0 ].returnedExpression, klassParameters)
98
95
} else {
99
- checkHashExpression(this .bodyExpression, bindingContext, klassParameters)
96
+ checkHashExpression(this .bodyExpression, klassParameters)
100
97
}
101
98
}
102
99
103
100
private fun checkHashExpression (
104
101
expression : KtExpression ? ,
105
- bindingContext : BindingContext ,
106
102
klassParameters : List <KtParameter >
107
103
): Boolean {
108
104
if (expression !is KtDotQualifiedExpression ) return false
109
105
if (expression.selectorExpression !is KtCallExpression ) return false
110
106
111
107
val callExpression = expression.selectorExpression as KtCallExpression
112
- if (OBJECTS_HASH_MATCHER .matches(callExpression, bindingContext )) {
108
+ if (OBJECTS_HASH_MATCHER .matches(callExpression)) {
113
109
if (callExpression.valueArguments.size != klassParameters.size) return false
114
110
return callExpression.valueArguments.all {
115
111
findParameter(it.getArgumentExpression(), klassParameters) != null
116
112
}
117
113
}
118
- if (ARRAYS_HASHCODE_MATCHER .matches(callExpression, bindingContext )) {
114
+ if (ARRAYS_HASHCODE_MATCHER .matches(callExpression)) {
119
115
val argumentExpression = callExpression.valueArguments[0 ].getArgumentExpression()
120
116
if (argumentExpression !is KtCallExpression ) return false
121
117
val arguments = argumentExpression.valueArguments
0 commit comments