Delete local variables on default mask expantion

#KT-18792 Fixed
This commit is contained in:
Mikhael Bogdanov
2017-07-03 15:52:59 +02:00
parent 01e2f8e32c
commit 8666b95dd2
7 changed files with 62 additions and 2 deletions
@@ -105,7 +105,7 @@ fun expandMaskConditionsAndUpdateVariableNodes(
else null
}.toList()
val toDelete = arrayListOf<AbstractInsnNode>()
val toDelete = linkedSetOf<AbstractInsnNode>()
val toInsert = arrayListOf<Pair<AbstractInsnNode, AbstractInsnNode>>()
val defaultLambdasInfo = extractDefaultLambdasInfo(conditions, defaultLambdas, toDelete, toInsert)
@@ -127,6 +127,8 @@ fun expandMaskConditionsAndUpdateVariableNodes(
node.instructions.insert(position, newInsn)
}
node.localVariables.removeIf { it.start in toDelete && it.end in toDelete }
node.remove(toDelete)
return defaultLambdasInfo
@@ -136,7 +138,7 @@ fun expandMaskConditionsAndUpdateVariableNodes(
private fun extractDefaultLambdasInfo(
conditions: List<Condition>,
defaultLambdas: Map<Int, ValueParameterDescriptor>,
toDelete: MutableList<AbstractInsnNode>,
toDelete: MutableCollection<AbstractInsnNode>,
toInsert: MutableList<Pair<AbstractInsnNode, AbstractInsnNode>>
): List<DefaultLambda> {
val defaultLambdaConditions = conditions.filter { it.expandNotDelete && defaultLambdas.contains(it.varIndex) }