Don't try remap type parameter of inline lambda parent context

This commit is contained in:
Michael Bogdanov
2015-12-23 18:02:04 +03:00
parent fee6d4f282
commit 8ab1190082
2 changed files with 13 additions and 5 deletions
@@ -96,8 +96,15 @@ public class InliningContext {
boolean isInliningLambda, boolean isInliningLambda,
boolean isRegeneration boolean isRegeneration
) { ) {
//isInliningLambda && !this.isInliningLambda for root inline lambda
return new InliningContext(this, expressionMap, state, generator, 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() { public boolean isRoot() {
@@ -21,7 +21,7 @@ import java.util.HashMap
class TypeParameter(val oldName: String, val newName: String?, val isReified: Boolean, val signature: String?) class TypeParameter(val oldName: String, val newName: String?, val isReified: Boolean, val signature: String?)
//typeMapping data could be changed outside through method processing //typeMapping data could be changed outside through method processing
class TypeRemapper private constructor(private val typeMapping: MutableMap<String, String>, val parent: TypeRemapper?) { class TypeRemapper private constructor(private val typeMapping: MutableMap<String, String>, val parent: TypeRemapper?, val isInlineLambda: Boolean = false) {
private var additionalMappings: MutableMap<String, String> = hashMapOf() private var additionalMappings: MutableMap<String, String> = hashMapOf()
@@ -56,7 +56,7 @@ class TypeRemapper private constructor(private val typeMapping: MutableMap<Strin
} }
fun mapTypeParameter(name: String): TypeParameter? { fun mapTypeParameter(name: String): TypeParameter? {
return typeParametersMapping[name] ?: parent?.mapTypeParameter(name) return typeParametersMapping[name] ?: if (!isInlineLambda) parent?.mapTypeParameter(name) else null
} }
companion object { companion object {
@@ -76,8 +76,9 @@ class TypeRemapper private constructor(private val typeMapping: MutableMap<Strin
} }
@JvmStatic @JvmStatic
fun createFrom(remapper: TypeRemapper, mappings: MutableMap<String, String>): TypeRemapper { @JvmOverloads
return TypeRemapper(createNewAndMerge(remapper, mappings), remapper) fun createFrom(remapper: TypeRemapper, mappings: MutableMap<String, String>, isInlineLambda: Boolean = false): TypeRemapper {
return TypeRemapper(createNewAndMerge(remapper, mappings), remapper, isInlineLambda)
} }
private fun createNewAndMerge(remapper: TypeRemapper, additionalTypeMappings: Map<String, String>): MutableMap<String, String> { private fun createNewAndMerge(remapper: TypeRemapper, additionalTypeMappings: Map<String, String>): MutableMap<String, String> {