[NI] Postprocess lambda result expressions on call completion
Should update type to denotable, e.g., IntegerValueType(x) to proper numeric type. TODO extract common code into some ValueArgumentPostprocessor
This commit is contained in:
committed by
Stanislav Erokhin
parent
1d6ed4ef8e
commit
2bdeef7970
+1
-1
@@ -26,7 +26,7 @@ interface IsDescriptorFromSourcePredicate: (CallableDescriptor) -> Boolean
|
||||
interface CommonSupertypeCalculator: (Collection<UnwrappedType>) -> UnwrappedType
|
||||
|
||||
interface LambdaAnalyzer {
|
||||
fun analyzeAndGetRelatedCalls(
|
||||
fun analyzeAndGetLambdaResultArguments(
|
||||
topLevelCall: KotlinCall,
|
||||
lambdaArgument: LambdaKotlinCallArgument,
|
||||
receiverType: UnwrappedType?,
|
||||
|
||||
+2
-2
@@ -245,10 +245,10 @@ class KotlinCallCompleter(
|
||||
val receiver = lambda.receiver?.let(::substitute)
|
||||
val parameters = lambda.parameters.map(::substitute)
|
||||
val expectedType = lambda.returnType.takeIf { c.canBeProper(it) }?.let(::substitute)
|
||||
val callsFromLambda = lambdaAnalyzer.analyzeAndGetRelatedCalls(topLevelCall, lambda.argument, receiver, parameters, expectedType)
|
||||
lambda.analyzed = true
|
||||
lambda.resultArguments = lambdaAnalyzer.analyzeAndGetLambdaResultArguments(topLevelCall, lambda.argument, receiver, parameters, expectedType)
|
||||
|
||||
for (innerCall in callsFromLambda) {
|
||||
for (innerCall in lambda.resultArguments) {
|
||||
// todo strange code -- why top-level kotlinCall? may be it isn't right outer call
|
||||
CheckArguments.checkArgument(topLevelCallContext, topLevelCall, c.getBuilder(), innerCall, lambda.returnType)
|
||||
}
|
||||
|
||||
+2
@@ -51,6 +51,8 @@ class ResolvedLambdaArgument(
|
||||
|
||||
override val inputType: Collection<UnwrappedType> get() = receiver?.let { parameters + it } ?: parameters
|
||||
override val outputType: UnwrappedType get() = returnType
|
||||
|
||||
lateinit var resultArguments: List<KotlinCallArgument>
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user