Do not run CCE if there were no apiVersionIsAtLeast calls

This commit is contained in:
Dmitry Petrov
2017-09-22 17:46:15 +03:00
parent fd16035bbd
commit 23d8b4cefe
@@ -27,6 +27,8 @@ class ApiVersionCallsPreprocessingMethodTransformer(private val targetApiVersion
private val constantConditionElimination = ConstantConditionEliminationMethodTransformer() private val constantConditionElimination = ConstantConditionEliminationMethodTransformer()
override fun transform(internalClassName: String, methodNode: MethodNode) { override fun transform(internalClassName: String, methodNode: MethodNode) {
var hasFoldedCalls = false
for (insn in methodNode.instructions.toArray()) { for (insn in methodNode.instructions.toArray()) {
if (!insn.isApiVersionIsAtLeastCall()) continue if (!insn.isApiVersionIsAtLeastCall()) continue
@@ -39,6 +41,8 @@ class ApiVersionCallsPreprocessingMethodTransformer(private val targetApiVersion
val prev1 = prev2.previous ?: continue val prev1 = prev2.previous ?: continue
val epic = prev1.getIntConstValue() ?: continue val epic = prev1.getIntConstValue() ?: continue
hasFoldedCalls = true
val atLeastVersion = MavenComparableVersion("$epic.$major.$minor") val atLeastVersion = MavenComparableVersion("$epic.$major.$minor")
val replacementInsn = val replacementInsn =
@@ -55,8 +59,10 @@ class ApiVersionCallsPreprocessingMethodTransformer(private val targetApiVersion
} }
} }
if (hasFoldedCalls) {
constantConditionElimination.transform(internalClassName, methodNode) constantConditionElimination.transform(internalClassName, methodNode)
} }
}
private fun AbstractInsnNode.isApiVersionIsAtLeastCall(): Boolean = private fun AbstractInsnNode.isApiVersionIsAtLeastCall(): Boolean =
isMethodInsnWith(Opcodes.INVOKESTATIC) { isMethodInsnWith(Opcodes.INVOKESTATIC) {