Fixed KT-5211 Code completion in IntelliJ for generating anonymous class creates code with compile error "Projections are not allowed for immediate arguments of a super type"
#KT-5211 Fixed
This commit is contained in:
@@ -55,9 +55,10 @@ import org.jetbrains.jet.lang.types.JetTypeImpl
|
|||||||
import org.jetbrains.jet.lang.descriptors.annotations.Annotations
|
import org.jetbrains.jet.lang.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
||||||
import org.jetbrains.jet.lang.resolve.java.mapping.KotlinToJavaTypesMap
|
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.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.jet.lang.resolve.resolveTopLevelClass
|
import org.jetbrains.jet.lang.resolve.resolveTopLevelClass
|
||||||
|
import org.jetbrains.jet.lang.types.TypeProjectionImpl
|
||||||
|
import org.jetbrains.jet.lang.types.Variance
|
||||||
|
|
||||||
class TypeInstantiationItems(
|
class TypeInstantiationItems(
|
||||||
val resolutionFacade: ResolutionFacade,
|
val resolutionFacade: ResolutionFacade,
|
||||||
@@ -142,11 +143,14 @@ class TypeInstantiationItems(
|
|||||||
var lookupString = lookupElement.getLookupString()
|
var lookupString = lookupElement.getLookupString()
|
||||||
var allLookupStrings = setOf(lookupString)
|
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
|
var signatureText: String? = null
|
||||||
|
|
||||||
val insertHandler: InsertHandler<LookupElement>
|
val insertHandler: InsertHandler<LookupElement>
|
||||||
val typeText = qualifiedNameForSourceCode(classifier) + IdeDescriptorRenderers.SOURCE_CODE.renderTypeArguments(typeArgs)
|
val typeText = qualifiedNameForSourceCode(classifier) + IdeDescriptorRenderers.SOURCE_CODE.renderTypeArguments(typeArgsToUse)
|
||||||
if (isAbstract) {
|
if (isAbstract) {
|
||||||
val constructorParenthesis = if (classifier.getKind() != ClassKind.TRAIT) "()" else ""
|
val constructorParenthesis = if (classifier.getKind() != ClassKind.TRAIT) "()" else ""
|
||||||
itemText += constructorParenthesis
|
itemText += constructorParenthesis
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
fun registerHandler(handler: Handler<out Message>) {}
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
registerHandler(<caret>)
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Message
|
||||||
|
|
||||||
|
trait Handler<E> {
|
||||||
|
fun handle(e: E)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ELEMENT: object
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
fun registerHandler(handler: Handler<out Message>) {}
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
registerHandler(object: Handler<Message> {
|
||||||
|
override fun handle(e: Message) {
|
||||||
|
<caret><selection>throw UnsupportedOperationException()</selection>
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
trait Message
|
||||||
|
|
||||||
|
trait Handler<E> {
|
||||||
|
fun handle(e: E)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ELEMENT: object
|
||||||
@@ -10,6 +10,6 @@ fun foo(): KotlinTrait<I1, I2> {
|
|||||||
// ABSENT: KotlinInheritor3
|
// ABSENT: KotlinInheritor3
|
||||||
// EXIST: { lookupString: "object", itemText: "object: KotlinInheritor4<I1, I2>(){...}" }
|
// EXIST: { lookupString: "object", itemText: "object: KotlinInheritor4<I1, I2>(){...}" }
|
||||||
// ABSENT: KotlinInheritor5
|
// ABSENT: KotlinInheritor5
|
||||||
// EXIST: { lookupString: "KotlinInheritor6", itemText: "KotlinInheritor6<I1, out Any?, out I3>", tailText: "() (p)" }
|
// EXIST: { lookupString: "KotlinInheritor6", itemText: "KotlinInheritor6<I1, Any?, I3>", tailText: "() (p)" }
|
||||||
// EXIST: { lookupString: "JavaInheritor1", itemText: "JavaInheritor1", tailText: "() (<root>)" }
|
// EXIST: { lookupString: "JavaInheritor1", itemText: "JavaInheritor1", tailText: "() (<root>)" }
|
||||||
// ABSENT: JavaInheritor2
|
// ABSENT: JavaInheritor2
|
||||||
|
|||||||
+6
-1
@@ -19,7 +19,6 @@ package org.jetbrains.jet.completion.handlers;
|
|||||||
import com.intellij.testFramework.TestDataPath;
|
import com.intellij.testFramework.TestDataPath;
|
||||||
import org.jetbrains.jet.JUnit3RunnerWithInners;
|
import org.jetbrains.jet.JUnit3RunnerWithInners;
|
||||||
import org.jetbrains.jet.JetTestUtils;
|
import org.jetbrains.jet.JetTestUtils;
|
||||||
import org.jetbrains.jet.test.InnerTestClasses;
|
|
||||||
import org.jetbrains.jet.test.TestMetadata;
|
import org.jetbrains.jet.test.TestMetadata;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
@@ -240,6 +239,12 @@ public class SmartCompletionHandlerTestGenerated extends AbstractSmartCompletion
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("ConstructorForJavaClass.kt")
|
||||||
public void testConstructorForJavaClass() throws Exception {
|
public void testConstructorForJavaClass() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/smart/ConstructorForJavaClass.kt");
|
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/handlers/smart/ConstructorForJavaClass.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user