Condition of 'if' expression is constant: don't report when condition has named reference

#KT-27651 Fixed
This commit is contained in:
Toshiaki Kameyama
2020-01-27 17:06:45 +09:00
committed by Yan Zhulanow
parent bfb5efd490
commit 6ee4b5e393
3 changed files with 14 additions and 4 deletions
@@ -22,10 +22,7 @@ import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.util.hasNoSideEffects
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.containingClass
import org.jetbrains.kotlin.psi.psiUtil.getChildrenOfType
import org.jetbrains.kotlin.psi.psiUtil.getParentOfType
import org.jetbrains.kotlin.psi.psiUtil.startOffset
import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
import org.jetbrains.kotlin.resolve.calls.callUtil.getType
@@ -133,6 +130,7 @@ private fun KtExpression.constantBooleanValue(context: BindingContext): Boolean?
if (enumEntriesComparison != null) {
return enumEntriesComparison
}
if (anyDescendantOfType<KtNameReferenceExpression> { true }) return null
val type = getType(context) ?: return null
val constantValue = ConstantExpressionEvaluator.getConstant(this, context)?.toConstantValue(type)
return constantValue?.value as? Boolean
@@ -0,0 +1,7 @@
// PROBLEM: none
const val s = "debug"
fun main() {
if (<caret>s == "debug") {
}
}
@@ -2480,6 +2480,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("idea/testData/inspectionsLocal/constantConditionIf"), Pattern.compile("^([\\w\\-_]+)\\.(kt|kts)$"), null, true);
}
@TestMetadata("constant.kt")
public void testConstant() throws Exception {
runTest("idea/testData/inspectionsLocal/constantConditionIf/constant.kt");
}
@TestMetadata("delete.kt")
public void testDelete() throws Exception {
runTest("idea/testData/inspectionsLocal/constantConditionIf/delete.kt");