diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ExpectedInfos.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ExpectedInfos.kt index 249928a1bcb..7fd9199591a 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ExpectedInfos.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ExpectedInfos.kt @@ -145,7 +145,7 @@ sealed class ArgumentPositionData(val function: FunctionDescriptor) : ExpectedIn class ReturnValueAdditionalData(val callable: CallableDescriptor) : ExpectedInfo.AdditionalData -object WhenEntryAdditionalData : ExpectedInfo.AdditionalData +class WhenEntryAdditionalData(val whenWithSubject: Boolean) : ExpectedInfo.AdditionalData class ExpectedInfos( val bindingContext: BindingContext, @@ -491,10 +491,10 @@ class ExpectedInfos( val subject = whenExpression.getSubjectExpression() if (subject != null) { val subjectType = bindingContext.getType(subject) ?: return null - return listOf(ExpectedInfo(subjectType, null, null, additionalData = WhenEntryAdditionalData)) + return listOf(ExpectedInfo(subjectType, null, null, additionalData = WhenEntryAdditionalData(whenWithSubject = true))) } else { - return listOf(ExpectedInfo(resolutionFacade.moduleDescriptor.builtIns.booleanType, null, null, additionalData = WhenEntryAdditionalData)) + return listOf(ExpectedInfo(resolutionFacade.moduleDescriptor.builtIns.booleanType, null, null, additionalData = WhenEntryAdditionalData(whenWithSubject = false))) } } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordValues.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordValues.kt index f264bda97a3..a2bde5fc65f 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordValues.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KeywordValues.kt @@ -55,8 +55,10 @@ object KeywordValues { ) { if (callTypeAndReceiver is CallTypeAndReceiver.DEFAULT) { val booleanInfoMatcher = matcher@ { info: ExpectedInfo -> - // no sense in true or false as when entry - if (info.additionalData is WhenEntryAdditionalData) return@matcher ExpectedInfoMatch.noMatch + // no sense in true or false as when entry for when with no subject + if (info.additionalData is WhenEntryAdditionalData && !info.additionalData.whenWithSubject) { + return@matcher ExpectedInfoMatch.noMatch + } if (info.fuzzyType?.type?.isBooleanOrNullableBoolean() ?: false) ExpectedInfoMatch.match(TypeSubstitutor.EMPTY) diff --git a/idea/idea-completion/testData/smart/whenEntry/WhenWithSubjectTrueFalse.kt b/idea/idea-completion/testData/smart/whenEntry/WhenWithSubjectTrueFalse.kt new file mode 100644 index 00000000000..8e358dbba4b --- /dev/null +++ b/idea/idea-completion/testData/smart/whenEntry/WhenWithSubjectTrueFalse.kt @@ -0,0 +1,9 @@ +fun foo(b: Boolean?) { + when (b) { + + } +} + +// EXIST: true +// EXIST: false +// EXIST: null diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmSmartCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmSmartCompletionTestGenerated.java index 9f348df6f75..437341318b2 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmSmartCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmSmartCompletionTestGenerated.java @@ -1602,5 +1602,11 @@ public class JvmSmartCompletionTestGenerated extends AbstractJvmSmartCompletionT String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/smart/whenEntry/WhenWithNoSubject2.kt"); doTest(fileName); } + + @TestMetadata("WhenWithSubjectTrueFalse.kt") + public void testWhenWithSubjectTrueFalse() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/smart/whenEntry/WhenWithSubjectTrueFalse.kt"); + doTest(fileName); + } } }