Condition of 'if' expression is constant: don't report when condition has named reference
#KT-27651 Fixed
This commit is contained in:
committed by
Yan Zhulanow
parent
bfb5efd490
commit
6ee4b5e393
@@ -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") {
|
||||
}
|
||||
}
|
||||
+5
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user