1616 */
1717package org.sonarsource.kotlin.checks
1818
19+ import org.jetbrains.kotlin.analysis.api.resolution.KaFunctionCall
1920import org.jetbrains.kotlin.psi.KtExpression
2021import org.jetbrains.kotlin.psi.KtLambdaExpression
2122import org.jetbrains.kotlin.psi.KtNamedFunction
2223import org.jetbrains.kotlin.psi.KtReturnExpression
23- import org.jetbrains.kotlin.resolve.BindingContext
24- import org.jetbrains.kotlin.resolve.calls.util.getParentCall
25- import org.jetbrains.kotlin.resolve.calls.util.getType
2624import org.sonar.check.Rule
2725import org.sonarsource.kotlin.api.checks.AbstractCheck
2826import org.sonarsource.kotlin.api.checks.FunMatcher
27+ import org.sonarsource.kotlin.api.checks.getParentCall
28+ import org.sonarsource.kotlin.api.checks.predictRuntimeBooleanValue
2929import org.sonarsource.kotlin.api.frontend.KotlinFileContext
30+ import org.sonarsource.kotlin.api.visiting.withKaSession
3031
31- @org.sonarsource.kotlin.api.frontend.K1only
3232@Rule(key = " S5527" )
3333class VerifiedServerHostnamesCheck : AbstractCheck () {
3434
@@ -47,21 +47,19 @@ class VerifiedServerHostnamesCheck : AbstractCheck() {
4747 }
4848
4949 override fun visitNamedFunction (function : KtNamedFunction , kotlinFileContext : KotlinFileContext ) {
50- val (_, _, bindingContext) = kotlinFileContext
51- if (VERIFY_MATCHER .matches(function, bindingContext)) {
50+ if (VERIFY_MATCHER .matches(function)) {
5251 val listStatements = function.listStatements()
53- if (listStatements.size == 1 && onlyReturnsTrue(listStatements[0 ], bindingContext )) {
52+ if (listStatements.size == 1 && onlyReturnsTrue(listStatements[0 ])) {
5453 kotlinFileContext.reportIssue(function.nameIdentifier!! , MESSAGE )
5554 }
5655 }
5756 }
5857
5958 override fun visitLambdaExpression (expression : KtLambdaExpression , kotlinFileContext : KotlinFileContext ) {
60- val (_, _, bindingContext) = kotlinFileContext
61- expression.getParentCall(bindingContext)?.let {
62- if (HOSTNAME_VERIFIER_MATCHER .matches(it, bindingContext)) {
59+ (expression.getParentCall() as ? KaFunctionCall <* >)?.let {
60+ if (HOSTNAME_VERIFIER_MATCHER .matches(it)) {
6361 val listStatements = expression.bodyExpression?.statements
64- if (listStatements?.size == 1 && listStatements[0 ].isTrueConstant(bindingContext )) {
62+ if (listStatements?.size == 1 && listStatements[0 ].isTrueConstant()) {
6563 kotlinFileContext.reportIssue(expression, MESSAGE )
6664 }
6765 }
@@ -70,16 +68,13 @@ class VerifiedServerHostnamesCheck : AbstractCheck() {
7068
7169 private fun onlyReturnsTrue (
7270 ktExpression : KtExpression ,
73- bindingContext : BindingContext ,
7471 ): Boolean = when (ktExpression) {
7572 is KtReturnExpression ->
76- ktExpression.returnedExpression?.isTrueConstant(bindingContext ) ? : false
73+ ktExpression.returnedExpression?.isTrueConstant() ? : false
7774 else -> false
7875 }
7976
80- private fun KtExpression.isTrueConstant (
81- bindingContext : BindingContext ,
82- ) = getType(bindingContext)?.let {
83- bindingContext[BindingContext .COMPILE_TIME_VALUE , this ]?.getValue(it) == true
84- } ? : false
77+ private fun KtExpression.isTrueConstant () = withKaSession {
78+ predictRuntimeBooleanValue() ? : false
79+ }
8580}
0 commit comments