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 d284010e2cc..df9952e67bb 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt @@ -55,9 +55,10 @@ import org.jetbrains.jet.lang.types.JetTypeImpl import org.jetbrains.jet.lang.descriptors.annotations.Annotations import org.jetbrains.jet.lang.resolve.DescriptorUtils import org.jetbrains.jet.lang.resolve.java.mapping.KotlinToJavaTypesMap -import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils import org.jetbrains.jet.lang.descriptors.ModuleDescriptor import org.jetbrains.jet.lang.resolve.resolveTopLevelClass +import org.jetbrains.jet.lang.types.TypeProjectionImpl +import org.jetbrains.jet.lang.types.Variance class TypeInstantiationItems( val resolutionFacade: ResolutionFacade, @@ -142,11 +143,14 @@ class TypeInstantiationItems( var lookupString = lookupElement.getLookupString() var allLookupStrings = setOf(lookupString) - var itemText = lookupString + DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderTypeArguments(typeArgs) + // drop "in" and "out" from type arguments - they cannot be used in constructor call + val typeArgsToUse = typeArgs.map { if (it != null) TypeProjectionImpl(Variance.INVARIANT, it.getType()) else null } + + var itemText = lookupString + DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderTypeArguments(typeArgsToUse) var signatureText: String? = null val insertHandler: InsertHandler - val typeText = qualifiedNameForSourceCode(classifier) + IdeDescriptorRenderers.SOURCE_CODE.renderTypeArguments(typeArgs) + val typeText = qualifiedNameForSourceCode(classifier) + IdeDescriptorRenderers.SOURCE_CODE.renderTypeArguments(typeArgsToUse) if (isAbstract) { val constructorParenthesis = if (classifier.getKind() != ClassKind.TRAIT) "()" else "" itemText += constructorParenthesis diff --git a/idea/testData/completion/handlers/smart/ConstructorForGenericType2.kt b/idea/testData/completion/handlers/smart/ConstructorForGenericType2.kt new file mode 100644 index 00000000000..772a80b6134 --- /dev/null +++ b/idea/testData/completion/handlers/smart/ConstructorForGenericType2.kt @@ -0,0 +1,13 @@ +fun registerHandler(handler: Handler) {} + +fun test() { + registerHandler() +} + +trait Message + +trait Handler { + fun handle(e: E) +} + +// ELEMENT: object \ No newline at end of file diff --git a/idea/testData/completion/handlers/smart/ConstructorForGenericType2.kt.after b/idea/testData/completion/handlers/smart/ConstructorForGenericType2.kt.after new file mode 100644 index 00000000000..572cc56155d --- /dev/null +++ b/idea/testData/completion/handlers/smart/ConstructorForGenericType2.kt.after @@ -0,0 +1,17 @@ +fun registerHandler(handler: Handler) {} + +fun test() { + registerHandler(object: Handler { + override fun handle(e: Message) { + throw UnsupportedOperationException() + } + }) +} + +trait Message + +trait Handler { + fun handle(e: E) +} + +// ELEMENT: object \ No newline at end of file diff --git a/idea/testData/completion/smartMultiFile/GenericInheritors1/GenericInheritors1.kt b/idea/testData/completion/smartMultiFile/GenericInheritors1/GenericInheritors1.kt index 80a4dd91276..7d248e1ce64 100644 --- a/idea/testData/completion/smartMultiFile/GenericInheritors1/GenericInheritors1.kt +++ b/idea/testData/completion/smartMultiFile/GenericInheritors1/GenericInheritors1.kt @@ -10,6 +10,6 @@ fun foo(): KotlinTrait { // ABSENT: KotlinInheritor3 // EXIST: { lookupString: "object", itemText: "object: KotlinInheritor4(){...}" } // ABSENT: KotlinInheritor5 -// EXIST: { lookupString: "KotlinInheritor6", itemText: "KotlinInheritor6", tailText: "() (p)" } +// EXIST: { lookupString: "KotlinInheritor6", itemText: "KotlinInheritor6", tailText: "() (p)" } // EXIST: { lookupString: "JavaInheritor1", itemText: "JavaInheritor1", tailText: "() ()" } // ABSENT: JavaInheritor2 diff --git a/idea/tests/org/jetbrains/jet/completion/handlers/SmartCompletionHandlerTestGenerated.java b/idea/tests/org/jetbrains/jet/completion/handlers/SmartCompletionHandlerTestGenerated.java index 609f9a902e3..1fd6cab621c 100644 --- a/idea/tests/org/jetbrains/jet/completion/handlers/SmartCompletionHandlerTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/completion/handlers/SmartCompletionHandlerTestGenerated.java @@ -19,7 +19,6 @@ package org.jetbrains.jet.completion.handlers; 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; @@ -240,6 +239,12 @@ public class SmartCompletionHandlerTestGenerated extends AbstractSmartCompletion doTest(fileName); } + @TestMetadata("ConstructorForGenericType2.kt") + public void testConstructorForGenericType2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/smart/ConstructorForGenericType2.kt"); + doTest(fileName); + } + @TestMetadata("ConstructorForJavaClass.kt") public void testConstructorForJavaClass() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/smart/ConstructorForJavaClass.kt");