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.idea.util.hasNoSideEffects
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.containingClass
|
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||||
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.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.isUsedAsExpression
|
||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getType
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getType
|
||||||
@@ -133,6 +130,7 @@ private fun KtExpression.constantBooleanValue(context: BindingContext): Boolean?
|
|||||||
if (enumEntriesComparison != null) {
|
if (enumEntriesComparison != null) {
|
||||||
return enumEntriesComparison
|
return enumEntriesComparison
|
||||||
}
|
}
|
||||||
|
if (anyDescendantOfType<KtNameReferenceExpression> { true }) return null
|
||||||
val type = getType(context) ?: return null
|
val type = getType(context) ?: return null
|
||||||
val constantValue = ConstantExpressionEvaluator.getConstant(this, context)?.toConstantValue(type)
|
val constantValue = ConstantExpressionEvaluator.getConstant(this, context)?.toConstantValue(type)
|
||||||
return constantValue?.value as? Boolean
|
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);
|
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")
|
@TestMetadata("delete.kt")
|
||||||
public void testDelete() throws Exception {
|
public void testDelete() throws Exception {
|
||||||
runTest("idea/testData/inspectionsLocal/constantConditionIf/delete.kt");
|
runTest("idea/testData/inspectionsLocal/constantConditionIf/delete.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user