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 7fd9199591a..551ffb8b22e 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 @@ -147,6 +147,8 @@ class ReturnValueAdditionalData(val callable: CallableDescriptor) : ExpectedInfo class WhenEntryAdditionalData(val whenWithSubject: Boolean) : ExpectedInfo.AdditionalData +object IfConditionAdditionalData : ExpectedInfo.AdditionalData + class ExpectedInfos( val bindingContext: BindingContext, val resolutionFacade: ResolutionFacade, @@ -423,7 +425,7 @@ class ExpectedInfos( private fun calculateForIf(expressionWithType: JetExpression): Collection? { val ifExpression = (expressionWithType.getParent() as? JetContainerNode)?.getParent() as? JetIfExpression ?: return null return when (expressionWithType) { - ifExpression.getCondition() -> listOf(ExpectedInfo(resolutionFacade.moduleDescriptor.builtIns.booleanType, null, Tail.RPARENTH)) + ifExpression.getCondition() -> listOf(ExpectedInfo(resolutionFacade.moduleDescriptor.builtIns.booleanType, null, Tail.RPARENTH, additionalData = IfConditionAdditionalData)) ifExpression.getThen() -> calculate(ifExpression).map { ExpectedInfo(it.filter, it.expectedName, Tail.ELSE) } 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 a2bde5fc65f..eb9bd1e91f6 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,13 @@ object KeywordValues { ) { if (callTypeAndReceiver is CallTypeAndReceiver.DEFAULT) { val booleanInfoMatcher = matcher@ { info: ExpectedInfo -> - // no sense in true or false as when entry for when with no subject - if (info.additionalData is WhenEntryAdditionalData && !info.additionalData.whenWithSubject) { + // no sense in true or false as if-condition or when entry for when with no subject + val skipTrueFalse = when (info.additionalData) { + is IfConditionAdditionalData -> true + is WhenEntryAdditionalData -> !info.additionalData.whenWithSubject + else -> false + } + if (skipTrueFalse) { return@matcher ExpectedInfoMatch.noMatch } diff --git a/idea/idea-completion/testData/smart/IfCondition.kt b/idea/idea-completion/testData/smart/IfCondition.kt index c8540debc69..f5e2e929795 100644 --- a/idea/idea-completion/testData/smart/IfCondition.kt +++ b/idea/idea-completion/testData/smart/IfCondition.kt @@ -4,3 +4,5 @@ fun bar(b: Boolean, c: Char){ // EXIST: b // ABSENT: c +// ABSENT: true +// ABSENT: false