Basic completion prefers right type in lambda value

This commit is contained in:
Valentin Kipyatkov
2015-08-07 17:25:06 +03:00
parent 96109230eb
commit cd6d8ffa98
3 changed files with 27 additions and 7 deletions
@@ -238,12 +238,6 @@ class SmartCompletion(
}
private fun calcExpectedInfos(expression: JetExpression): Collection<ExpectedInfo> {
if (forBasicCompletion) {
return ExpectedInfos(bindingContext, resolutionFacade, moduleDescriptor, useOuterCallsExpectedTypeCount = 0)
.calculate(expression)
.map { it.copy(tail = null) }
}
// if our expression is initializer of implicitly typed variable - take type of variable from original file (+ the same for function)
val declaration = implicitlyTypedDeclarationFromInitializer(expression)
if (declaration != null) {
@@ -262,7 +256,12 @@ class SmartCompletion(
while (true) {
val infos = ExpectedInfos(bindingContext, resolutionFacade, moduleDescriptor, useOuterCallsExpectedTypeCount = count)
.calculate(expression)
if (count == 2 /* use two outer calls maximum */ || infos.none { it.fuzzyType?.isAlmostEverything() ?: false }) return infos
if (count == 2 /* use two outer calls maximum */ || infos.none { it.fuzzyType?.isAlmostEverything() ?: false }) {
return if (forBasicCompletion)
infos.map { it.copy(tail = null) }
else
infos
}
count++
}
//TODO: we could always give higher priority to results with outer call expected type used
@@ -0,0 +1,15 @@
fun <T, R> List<T>.map(transform: (T) -> R): List<R> {}
class X {
val x1: String
val x2: Any
val x3: Int
}
fun foo(list: List<X>): Collection<Int> {
return list.map { it.x<caret> }
}
// ORDER: x3
// ORDER: x1
// ORDER: x2
@@ -181,6 +181,12 @@ public class BasicCompletionWeigherTestGenerated extends AbstractBasicCompletion
doTest(fileName);
}
@TestMetadata("LambdaValue.kt")
public void testLambdaValue() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/weighers/basic/expectedInfo/LambdaValue.kt");
doTest(fileName);
}
@TestMetadata("MultiArgsItem.kt")
public void testMultiArgsItem() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/idea-completion/testData/weighers/basic/expectedInfo/MultiArgsItem.kt");