From cff066f702cfabea28a7886d69f70f99d36fe7cd Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Tue, 24 Jul 2018 15:03:09 +0300 Subject: [PATCH] Use consistent descriptors as keys This commit fixes exception during IR generation with enabled new inferece, but the problem also can affect old inference. We were using originalTypeArguments (`resolvedCall.typeArguments`) that uses type parameters from *candidate* descriptor and were trying to get value by key from `resolvedCall.resultingDescriptor.original`, assuming that resolvedCall.resultingDescriptor.original equals to resolvedCall.candidateDescriptor, which can be wrong --- .../kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt index 52edfd35208..f4bddecc45c 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ArgumentsGenerationUtils.kt @@ -381,6 +381,7 @@ fun StatementGenerator.pregenerateCallReceivers(resolvedCall: ResolvedCall<*>): fun unwrapCallableDescriptorAndTypeArguments(resolvedCall: ResolvedCall<*>): CallBuilder { val originalDescriptor = resolvedCall.resultingDescriptor + val candidateDescriptor = resolvedCall.candidateDescriptor val unwrappedDescriptor = when (originalDescriptor) { is ImportedFromObjectCallableDescriptor<*> -> originalDescriptor.callableFromObject @@ -404,7 +405,7 @@ fun unwrapCallableDescriptorAndTypeArguments(resolvedCall: ResolvedCall<*>): Cal null else unsubstitutedUnwrappedTypeParameters.associate { - val originalTypeParameter = originalDescriptor.original.typeParameters[it.index] + val originalTypeParameter = candidateDescriptor.typeParameters[it.index] val originalTypeArgument = originalTypeArguments[originalTypeParameter] ?: throw AssertionError("No type argument for $originalTypeParameter") it to originalTypeArgument