From 5c0cdac69fb66a617daab61904a2c51d509fe4b3 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Wed, 29 Aug 2018 14:38:00 +0200 Subject: [PATCH] JVM_IR. Support generic constructors after "Roll back constructor type parameters" --- .../kotlin/backend/jvm/codegen/ExpressionCodegen.kt | 8 +++++++- compiler/testData/codegen/box/innerNested/innerGeneric.kt | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt index ead6a3bc7d9..dac8dba3c86 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ExpressionCodegen.kt @@ -1149,7 +1149,13 @@ class ExpressionCodegen( memberAccessExpression: IrMemberAccessExpression, descriptor: CallableDescriptor ): IrCallGenerator { - val typeArguments = descriptor.original.typeParameters.keysToMap { memberAccessExpression.getTypeArgumentOrDefault(it) } + val typeArguments = + if (memberAccessExpression.typeArgumentsCount == 0) { + //avoid ambiguity with type constructor type parameters + emptyMap() + } else descriptor.original.typeParameters.keysToMap { + memberAccessExpression.getTypeArgumentOrDefault(it) + } val mappings = TypeParameterMappings() for (entry in typeArguments.entries) { diff --git a/compiler/testData/codegen/box/innerNested/innerGeneric.kt b/compiler/testData/codegen/box/innerNested/innerGeneric.kt index 3e778b5d162..36a6bda1e99 100644 --- a/compiler/testData/codegen/box/innerNested/innerGeneric.kt +++ b/compiler/testData/codegen/box/innerNested/innerGeneric.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND: JVM_IR class Outer { inner class Inner(val t: T) { fun box() = t