diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/SmartCastManager.java b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/SmartCastManager.java index 9d328a757e6..057f99b33f7 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/SmartCastManager.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/smartcasts/SmartCastManager.java @@ -73,12 +73,12 @@ public class SmartCastManager { @NotNull DeclarationDescriptor containingDeclarationOrModule, @NotNull DataFlowInfo dataFlowInfo ) { - final List variants = getSmartCastVariants(receiverToCast, bindingContext, - containingDeclarationOrModule, dataFlowInfo); + final List variants = CollectionsKt.distinct( + getSmartCastVariants(receiverToCast, bindingContext, containingDeclarationOrModule, dataFlowInfo)); return CollectionsKt.filter(variants, new Function1() { @Override public Boolean invoke(final KotlinType type) { - return !CollectionsKt.any(variants, new Function1() { + return CollectionsKt.none(variants, new Function1() { @Override public Boolean invoke(KotlinType another) { return another != type && KotlinTypeChecker.DEFAULT.isSubtypeOf(another, type); diff --git a/idea/idea-completion/testData/basic/common/KT10664.kt b/idea/idea-completion/testData/basic/common/KT10664.kt new file mode 100644 index 00000000000..c2280a8c9a5 --- /dev/null +++ b/idea/idea-completion/testData/basic/common/KT10664.kt @@ -0,0 +1,9 @@ +fun foo(): String? = null + +fun bar() { + val f = foo() ?: return + f. +} + +// EXIST: length +// EXIST: hashCode 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 2346ccdde51..f64c12ad222 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 @@ -463,6 +463,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes doTest(fileName); } + @TestMetadata("KT10664.kt") + public void testKT10664() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/KT10664.kt"); + doTest(fileName); + } + @TestMetadata("LocalMultideclarationValues.kt") public void testLocalMultideclarationValues() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/LocalMultideclarationValues.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 5ca852ab0fc..ccf4f62f667 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 @@ -463,6 +463,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT doTest(fileName); } + @TestMetadata("KT10664.kt") + public void testKT10664() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/KT10664.kt"); + doTest(fileName); + } + @TestMetadata("LocalMultideclarationValues.kt") public void testLocalMultideclarationValues() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/idea-completion/testData/basic/common/LocalMultideclarationValues.kt");