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 551ffb8b22e..3297e7204f6 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 @@ -432,10 +432,11 @@ class ExpectedInfos( ifExpression.getElse() -> { val ifExpectedInfo = calculate(ifExpression) val thenType = ifExpression.getThen()?.let { bindingContext.getType(it) } - if (thenType != null && !thenType.isError()) + val filteredInfo = if (thenType != null && !thenType.isError()) ifExpectedInfo.filter { it.matchingSubstitutor(thenType) != null } else ifExpectedInfo + return filteredInfo.copyWithNoAdditionalData() } else -> return null @@ -452,10 +453,11 @@ class ExpectedInfos( val leftTypeNotNullable = leftType?.makeNotNullable() val expectedInfos = calculate(binaryExpression) if (expectedInfos.isNotEmpty()) { - return if (leftTypeNotNullable != null) + val filteredInfo = if (leftTypeNotNullable != null) expectedInfos.filter { it.matchingSubstitutor(leftTypeNotNullable) != null } else expectedInfos + return filteredInfo.copyWithNoAdditionalData() } else if (leftTypeNotNullable != null) { return listOf(ExpectedInfo(leftTypeNotNullable, null, null)) @@ -605,6 +607,8 @@ class ExpectedInfos( private fun String.unpluralize() = StringUtil.unpluralize(this) + + private fun Collection.copyWithNoAdditionalData() = map { it.copy(additionalData = null, itemOptions = ItemOptions.DEFAULT) } } val COMPARISON_TOKENS = setOf(JetTokens.EQEQ, JetTokens.EXCLEQ, JetTokens.EQEQEQ, JetTokens.EXCLEQEQEQ) diff --git a/idea/idea-completion/testData/basic/common/namedArguments/NotInElse.kt b/idea/idea-completion/testData/basic/common/namedArguments/NotInElse.kt new file mode 100644 index 00000000000..f83cdb88d76 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/namedArguments/NotInElse.kt @@ -0,0 +1,9 @@ +fun foo(p1: Int, p2: Int) { +} + +fun bar(b: Boolean) { + foo(if (b) 1 else ) +} + +// ABSENT: p1 +// ABSENT: p2 diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index f31f9142932..2cf8819dd04 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -1497,6 +1497,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("NotInElse.kt") + public void testNotInElse() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/namedArguments/NotInElse.kt"); + doTest(fileName); + } + @TestMetadata("NotOnlyNamedArguments.kt") public void testNotOnlyNamedArguments() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/namedArguments/NotOnlyNamedArguments.kt"); diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index ac7319cc813..bb6961542d2 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -1497,6 +1497,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("NotInElse.kt") + public void testNotInElse() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/namedArguments/NotInElse.kt"); + doTest(fileName); + } + @TestMetadata("NotOnlyNamedArguments.kt") public void testNotOnlyNamedArguments() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/namedArguments/NotOnlyNamedArguments.kt");