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 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() {
@@ -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<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()
@@ -56,7 +56,7 @@ class TypeRemapper private constructor(private val typeMapping: MutableMap<Strin
}
fun mapTypeParameter(name: String): TypeParameter? {
return typeParametersMapping[name] ?: parent?.mapTypeParameter(name)
return typeParametersMapping[name] ?: if (!isInlineLambda) parent?.mapTypeParameter(name) else null
}
companion object {
@@ -76,8 +76,9 @@ class TypeRemapper private constructor(private val typeMapping: MutableMap<Strin
}
@JvmStatic
fun createFrom(remapper: TypeRemapper, mappings: MutableMap<String, String>): TypeRemapper {
return TypeRemapper(createNewAndMerge(remapper, mappings), remapper)
@JvmOverloads
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> {