From 8ab1190082be18f447ab1c76ee4cfd597fb12cd2 Mon Sep 17 00:00:00 2001 From: Michael Bogdanov Date: Wed, 23 Dec 2015 18:02:04 +0300 Subject: [PATCH] Don't try remap type parameter of inline lambda parent context --- .../jetbrains/kotlin/codegen/inline/InliningContext.java | 9 ++++++++- .../org/jetbrains/kotlin/codegen/inline/TypeRemapper.kt | 9 +++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InliningContext.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InliningContext.java index 8c28c9bd07a..d06db34044e 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InliningContext.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/InliningContext.java @@ -96,8 +96,15 @@ public class InliningContext { boolean isInliningLambda, boolean isRegeneration ) { + //isInliningLambda && !this.isInliningLambda for root inline lambda return new InliningContext(this, expressionMap, state, generator, - TypeRemapper.createFrom(typeRemapper, additionalTypeMappings), reifedTypeInliner, isInliningLambda, isRegeneration); + TypeRemapper.createFrom( + typeRemapper, + additionalTypeMappings, + //root inline lambda + isInliningLambda && !this.isInliningLambda + ), + reifedTypeInliner, isInliningLambda, isRegeneration); } public boolean isRoot() { diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/TypeRemapper.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/TypeRemapper.kt index f4e3b766166..fd4aa467ba5 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/TypeRemapper.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/TypeRemapper.kt @@ -21,7 +21,7 @@ import java.util.HashMap class TypeParameter(val oldName: String, val newName: String?, val isReified: Boolean, val signature: String?) //typeMapping data could be changed outside through method processing -class TypeRemapper private constructor(private val typeMapping: MutableMap, val parent: TypeRemapper?) { +class TypeRemapper private constructor(private val typeMapping: MutableMap, val parent: TypeRemapper?, val isInlineLambda: Boolean = false) { private var additionalMappings: MutableMap = hashMapOf() @@ -56,7 +56,7 @@ class TypeRemapper private constructor(private val typeMapping: MutableMap): TypeRemapper { - return TypeRemapper(createNewAndMerge(remapper, mappings), remapper) + @JvmOverloads + fun createFrom(remapper: TypeRemapper, mappings: MutableMap, isInlineLambda: Boolean = false): TypeRemapper { + return TypeRemapper(createNewAndMerge(remapper, mappings), remapper, isInlineLambda) } private fun createNewAndMerge(remapper: TypeRemapper, additionalTypeMappings: Map): MutableMap {