Smart completion for generic class instantiation to not insert explicit type arguments (for they'll probably be inferred from the expected type)
This commit is contained in:
+8
-7
@@ -146,19 +146,20 @@ class TypeInstantiationItems(
|
||||
|
||||
var lookupString = lookupElement.getLookupString()
|
||||
var allLookupStrings = setOf(lookupString)
|
||||
|
||||
// drop "in" and "out" from type arguments - they cannot be used in constructor call
|
||||
val typeArgsToUse = typeArgs.map { TypeProjectionImpl(Variance.INVARIANT, it.getType()) }
|
||||
|
||||
var itemText = lookupString + IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderTypeArguments(typeArgsToUse)
|
||||
var itemText = lookupString
|
||||
var signatureText: String? = null
|
||||
var typeText = IdeDescriptorRenderers.SOURCE_CODE.renderClassifierName(classifier)
|
||||
|
||||
val insertHandler: InsertHandler<LookupElement>
|
||||
val typeText = IdeDescriptorRenderers.SOURCE_CODE.renderClassifierName(classifier) + IdeDescriptorRenderers.SOURCE_CODE.renderTypeArguments(typeArgsToUse)
|
||||
if (isAbstract) {
|
||||
// drop "in" and "out" from type arguments - they cannot be used in constructor call
|
||||
val typeArgsToUse = typeArgs.map { TypeProjectionImpl(Variance.INVARIANT, it.getType()) }
|
||||
itemText += IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.renderTypeArguments(typeArgsToUse)
|
||||
typeText += IdeDescriptorRenderers.SOURCE_CODE.renderTypeArguments(typeArgsToUse)
|
||||
|
||||
val constructorParenthesis = if (classifier.getKind() != ClassKind.INTERFACE) "()" else ""
|
||||
itemText += constructorParenthesis
|
||||
itemText = "object: " + itemText + "{...}"
|
||||
itemText = "object: $itemText{...}"
|
||||
lookupString = "object"
|
||||
allLookupStrings = setOf(lookupString, lookupElement.getLookupString())
|
||||
insertHandler = InsertHandler<LookupElement> { context, item ->
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ import java.util.List
|
||||
fun foo(p: HashMap<String, List<Int>>){}
|
||||
|
||||
fun f(){
|
||||
foo(HashMap<String, List<Int>>())
|
||||
foo(HashMap(<caret>))
|
||||
}
|
||||
|
||||
// ELEMENT: HashMap
|
||||
|
||||
+1
-2
@@ -1,11 +1,10 @@
|
||||
import java.io.File
|
||||
import java.util.HashMap
|
||||
|
||||
class X<T> {
|
||||
fun foo(p: java.util.HashMap<java.io.File, T>){}
|
||||
|
||||
fun f(){
|
||||
foo(HashMap<File, T>(<caret>))
|
||||
foo(HashMap(<caret>))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-3
@@ -1,12 +1,10 @@
|
||||
import java.io.File
|
||||
import java.util.AbstractMap
|
||||
import java.util.HashMap
|
||||
|
||||
class X<T> {
|
||||
fun foo(p: java.util.HashMap<T, java.util.AbstractMap<T, java.io.File>>){}
|
||||
|
||||
fun f(){
|
||||
foo(HashMap<T, AbstractMap<T, File>>(<caret>))
|
||||
foo(HashMap(<caret>))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -5,5 +5,5 @@ trait `trait`
|
||||
fun foo(p: `class`<`trait`>){}
|
||||
|
||||
fun f(){
|
||||
foo(`class`<`trait`>())<caret>
|
||||
foo(`class`())<caret>
|
||||
}
|
||||
|
||||
@@ -2,4 +2,4 @@ import java.util.ArrayList
|
||||
|
||||
var a : ArrayList<String> = <caret>
|
||||
|
||||
// EXIST: { lookupString: "ArrayList", itemText: "ArrayList<String>", tailText: "(...) (java.util)" }
|
||||
// EXIST: { lookupString: "ArrayList", itemText: "ArrayList", tailText: "(...) (java.util)" }
|
||||
|
||||
@@ -4,4 +4,4 @@ fun foo(p : Any){
|
||||
var a : Foo<String> = <caret>
|
||||
}
|
||||
|
||||
// EXIST: { lookupString:"Foo", itemText:"Foo<String>", tailText:"() (<root>)" }
|
||||
// EXIST: { lookupString:"Foo", itemText:"Foo", tailText:"() (<root>)" }
|
||||
|
||||
+1
-1
@@ -2,4 +2,4 @@ fun foo(): List<String> {
|
||||
return <caret>
|
||||
}
|
||||
|
||||
// EXIST: { lookupString: "ArrayList", itemText: "ArrayList<String>", tailText: "(...) (java.util)" }
|
||||
// EXIST: { lookupString: "ArrayList", itemText: "ArrayList", tailText: "(...) (java.util)" }
|
||||
|
||||
+2
-2
@@ -5,11 +5,11 @@ fun foo(): KotlinTrait<I1, I2> {
|
||||
}
|
||||
|
||||
// EXIST: { lookupString: "object", itemText: "object: KotlinTrait<I1, I2>{...}" }
|
||||
// EXIST: { lookupString: "KotlinInheritor1", itemText: "KotlinInheritor1<I1>", tailText: "() (p)" }
|
||||
// EXIST: { lookupString: "KotlinInheritor1", itemText: "KotlinInheritor1", tailText: "() (p)" }
|
||||
// EXIST: { lookupString: "KotlinInheritor2", itemText: "KotlinInheritor2", tailText: "() (p)" }
|
||||
// ABSENT: KotlinInheritor3
|
||||
// EXIST: { lookupString: "object", itemText: "object: KotlinInheritor4<I1, I2>(){...}" }
|
||||
// ABSENT: KotlinInheritor5
|
||||
// EXIST: { lookupString: "KotlinInheritor6", itemText: "KotlinInheritor6<I1, Any?, I3>", tailText: "() (p)" }
|
||||
// EXIST: { lookupString: "KotlinInheritor6", itemText: "KotlinInheritor6", tailText: "() (p)" }
|
||||
// EXIST: { lookupString: "JavaInheritor1", itemText: "JavaInheritor1", tailText: "() (<root>)" }
|
||||
// ABSENT: JavaInheritor2
|
||||
|
||||
+1
-1
@@ -5,4 +5,4 @@ fun foo(): KotlinTrait<I1, I1> {
|
||||
}
|
||||
|
||||
// EXIST: { lookupString: "object", itemText: "object: KotlinTrait<I1, I1>{...}" }
|
||||
// EXIST: { lookupString: "KotlinInheritor", itemText: "KotlinInheritor<I1>", tailText: "() (p)" }
|
||||
// EXIST: { lookupString: "KotlinInheritor", itemText: "KotlinInheritor", tailText: "() (p)" }
|
||||
|
||||
+1
-1
@@ -5,4 +5,4 @@ fun foo(): KotlinTrait<I1<I2>> {
|
||||
}
|
||||
|
||||
// EXIST: { lookupString: "object", itemText: "object: KotlinTrait<I1<I2>>{...}" }
|
||||
// EXIST: { lookupString: "KotlinInheritor", itemText: "KotlinInheritor<I2>", tailText: "() (p)" }
|
||||
// EXIST: { lookupString: "KotlinInheritor", itemText: "KotlinInheritor", tailText: "() (p)" }
|
||||
|
||||
+1
-2
@@ -6,7 +6,6 @@ fun bar() {
|
||||
// EXIST: { lookupString: "object", itemText: "object: T2<X>{...}" }
|
||||
// EXIST: { lookupString: "object", itemText: "object: T3<Y>{...}" }
|
||||
// EXIST: { lookupString: "C1", itemText: "C1" }
|
||||
// EXIST: { lookupString: "C2", itemText: "C2<X>" }
|
||||
// EXIST: { lookupString: "C2", itemText: "C2<Y>" }
|
||||
// EXIST: { lookupString: "C2", itemText: "C2" }
|
||||
// EXIST: { lookupString: "C3", itemText: "C3" }
|
||||
// NOTHING_ELSE
|
||||
|
||||
Reference in New Issue
Block a user