From ea8548c55bf3a9f437e134eeed886a5128ee566a Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Fri, 2 Dec 2016 14:02:42 +0300 Subject: [PATCH] Simplify boolean == true / false is no longer applicable on flexible boolean #KT-15087 Fixed --- .../intentions/SimplifyBooleanWithConstantsIntention.kt | 3 ++- .../simplifyBooleanWithConstants/flexibleBoolean.1.java | 5 +++++ .../simplifyBooleanWithConstants/flexibleBoolean.kt | 4 ++++ .../kotlin/idea/intentions/IntentionTestGenerated.java | 6 ++++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 idea/testData/intentions/simplifyBooleanWithConstants/flexibleBoolean.1.java create mode 100644 idea/testData/intentions/simplifyBooleanWithConstants/flexibleBoolean.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/SimplifyBooleanWithConstantsIntention.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/SimplifyBooleanWithConstantsIntention.kt index 08ba2d45358..5b83f92b08f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/SimplifyBooleanWithConstantsIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/SimplifyBooleanWithConstantsIntention.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.CompileTimeConstantUtils import org.jetbrains.kotlin.resolve.calls.callUtil.getType +import org.jetbrains.kotlin.types.isFlexible class SimplifyBooleanWithConstantsInspection : IntentionBasedInspection(SimplifyBooleanWithConstantsIntention::class) @@ -136,7 +137,7 @@ class SimplifyBooleanWithConstantsIntention : SelfTargetingOffsetIndependentInte private fun KtExpression?.hasBooleanType(): Boolean { val type = this?.getType(this.analyze()) ?: return false - return KotlinBuiltIns.isBoolean(type) + return KotlinBuiltIns.isBoolean(type) && !type.isFlexible() } private fun KtExpression.canBeReducedToBooleanConstant(constant: Boolean? = null): Boolean { diff --git a/idea/testData/intentions/simplifyBooleanWithConstants/flexibleBoolean.1.java b/idea/testData/intentions/simplifyBooleanWithConstants/flexibleBoolean.1.java new file mode 100644 index 00000000000..b6b044cd900 --- /dev/null +++ b/idea/testData/intentions/simplifyBooleanWithConstants/flexibleBoolean.1.java @@ -0,0 +1,5 @@ +class FromJava { + static Boolean foo() { + return Boolean.TRUE; + } +} \ No newline at end of file diff --git a/idea/testData/intentions/simplifyBooleanWithConstants/flexibleBoolean.kt b/idea/testData/intentions/simplifyBooleanWithConstants/flexibleBoolean.kt new file mode 100644 index 00000000000..9f0757ba55e --- /dev/null +++ b/idea/testData/intentions/simplifyBooleanWithConstants/flexibleBoolean.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +// WITH_RUNTIME + +fun bar() = FromJava.foo() == true \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java index 3b9ae49b651..38ab0d75767 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/IntentionTestGenerated.java @@ -12939,6 +12939,12 @@ public class IntentionTestGenerated extends AbstractIntentionTest { doTest(fileName); } + @TestMetadata("flexibleBoolean.kt") + public void testFlexibleBoolean() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/simplifyBooleanWithConstants/flexibleBoolean.kt"); + doTest(fileName); + } + @TestMetadata("inapplicableNoConstants.kt") public void testInapplicableNoConstants() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/intentions/simplifyBooleanWithConstants/inapplicableNoConstants.kt");