16
16
*/
17
17
package org.sonarsource.kotlin.checks
18
18
19
+ import org.jetbrains.kotlin.analysis.api.resolution.KaFunctionCall
19
20
import org.jetbrains.kotlin.psi.KtCallExpression
20
- import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsStatement
21
- import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
22
21
import org.sonar.check.Rule
23
22
import org.sonarsource.kotlin.api.checks.CallAbstractCheck
24
23
import org.sonarsource.kotlin.api.checks.FunMatcher
25
24
import org.sonarsource.kotlin.api.checks.FunMatcherImpl
26
25
import org.sonarsource.kotlin.api.frontend.KotlinFileContext
26
+ import org.sonarsource.kotlin.api.visiting.withKaSession
27
27
28
28
private const val STREAM_MESSAGE = " Refactor the code so this stream pipeline is used."
29
29
@@ -44,7 +44,6 @@ private val SEQUENCE_MATCHER = FunMatcher(qualifier = "kotlin.sequences") {
44
44
)
45
45
}
46
46
47
- @org.sonarsource.kotlin.api.frontend.K1only
48
47
@Rule(key = " S3958" )
49
48
class StreamNotConsumedCheck : CallAbstractCheck () {
50
49
@@ -73,11 +72,11 @@ class StreamNotConsumedCheck : CallAbstractCheck() {
73
72
74
73
override fun visitFunctionCall (
75
74
callExpression : KtCallExpression ,
76
- resolvedCall : ResolvedCall <* >,
75
+ resolvedCall : KaFunctionCall <* >,
77
76
matchedFun : FunMatcherImpl ,
78
77
kotlinFileContext : KotlinFileContext ,
79
- ) {
80
- if (callExpression.isUsedAsStatement(kotlinFileContext.bindingContext) ) {
78
+ ) = withKaSession {
79
+ if (! callExpression.isUsedAsExpression ) {
81
80
val message = if (matchedFun == SEQUENCE_MATCHER ) SEQUENCE_MESSAGE else STREAM_MESSAGE ;
82
81
kotlinFileContext.reportIssue(callExpression.calleeExpression!! , message)
83
82
}
0 commit comments