diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt index df9952e67bb..e5dee4592bb 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt @@ -204,7 +204,8 @@ class TypeInstantiationItems( lookupElement = lookupElement.assignSmartCompletionPriority(SmartCompletionItemPriority.INSTANTIATION) } - lookupElement = object: LookupElementDecorator(lookupElement) { + //TODO: cannot use lookupElement from context due to KT-6344 + class InstantiationLookupElement(lookupElement: LookupElement) : LookupElementDecorator(lookupElement) { override fun getLookupString() = lookupString override fun getAllLookupStrings() = allLookupStrings @@ -223,9 +224,20 @@ class TypeInstantiationItems( override fun handleInsert(context: InsertionContext) { insertHandler.handleInsert(context, getDelegate()) } + + override fun equals(other: Any?): Boolean { + if (other === this) return true + if (other !is InstantiationLookupElement) return false + if (getLookupString() != other.getLookupString()) return false + val presentation1 = LookupElementPresentation() + val presentation2 = LookupElementPresentation() + renderElement(presentation1) + other.renderElement(presentation2) + return presentation1.getItemText() == presentation2.getItemText() && presentation1.getTailText() == presentation2.getTailText() + } } - return lookupElement.addTail(tail) + return InstantiationLookupElement(lookupElement).addTail(tail) } private fun addSamConstructorItem(collection: MutableCollection, `class`: ClassDescriptor, tail: Tail?) { diff --git a/idea/testData/completion/smartMultiFile/InheritorsAndMultipleExpectedTypes/Declarations.kt b/idea/testData/completion/smartMultiFile/InheritorsAndMultipleExpectedTypes/Declarations.kt new file mode 100644 index 00000000000..31cd7708387 --- /dev/null +++ b/idea/testData/completion/smartMultiFile/InheritorsAndMultipleExpectedTypes/Declarations.kt @@ -0,0 +1,16 @@ +class X +class Y + +trait T1 +trait T2 +trait T3 + +class C1 : T1 +class C2 : T2, T3 +class C3 : T1, T2 + +fun foo(p: T1){} +fun foo(p: T2){} +fun foo(p: T3){} + +// ALLOW_AST_ACCESS diff --git a/idea/testData/completion/smartMultiFile/InheritorsAndMultipleExpectedTypes/InheritorsAndMultipleExpectedTypes.kt b/idea/testData/completion/smartMultiFile/InheritorsAndMultipleExpectedTypes/InheritorsAndMultipleExpectedTypes.kt new file mode 100644 index 00000000000..96d44066f11 --- /dev/null +++ b/idea/testData/completion/smartMultiFile/InheritorsAndMultipleExpectedTypes/InheritorsAndMultipleExpectedTypes.kt @@ -0,0 +1,12 @@ +fun bar() { + foo() +} + +// EXIST: { lookupString: "object", itemText: "object: T1{...}" } +// EXIST: { lookupString: "object", itemText: "object: T2{...}" } +// EXIST: { lookupString: "object", itemText: "object: T3{...}" } +// EXIST: { lookupString: "C1", itemText: "C1" } +// EXIST: { lookupString: "C2", itemText: "C2" } +// EXIST: { lookupString: "C2", itemText: "C2" } +// EXIST: { lookupString: "C3", itemText: "C3" } +// NUMBER: 7 diff --git a/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java index d733b94dfd3..3811d6046d2 100644 --- a/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/JvmSmartCompletionTestGenerated.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.completion; import com.intellij.testFramework.TestDataPath; import org.jetbrains.jet.JUnit3RunnerWithInners; import org.jetbrains.jet.JetTestUtils; +import org.jetbrains.jet.test.InnerTestClasses; import org.jetbrains.jet.test.TestMetadata; import org.junit.runner.RunWith; diff --git a/idea/tests/org/jetbrains/jet/completion/MultiFileSmartCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/MultiFileSmartCompletionTestGenerated.java index 1c7594976d4..c8fbed4eb87 100644 --- a/idea/tests/org/jetbrains/jet/completion/MultiFileSmartCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/MultiFileSmartCompletionTestGenerated.java @@ -72,6 +72,12 @@ public class MultiFileSmartCompletionTestGenerated extends AbstractMultiFileSmar doTest(fileName); } + @TestMetadata("InheritorsAndMultipleExpectedTypes") + public void testInheritorsAndMultipleExpectedTypes() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smartMultiFile/InheritorsAndMultipleExpectedTypes/"); + doTest(fileName); + } + @TestMetadata("JavaStaticMethodArgument") public void testJavaStaticMethodArgument() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/smartMultiFile/JavaStaticMethodArgument/");