fix: ignore not generated insns in CodeShrinker visitor (PR #560)

This commit is contained in:
Ahmed Ashour
2019-04-08 12:04:45 +02:00
committed by skylot
parent 058e4c9fd7
commit 7b18d3a3a8
2 changed files with 11 additions and 11 deletions
@@ -6,10 +6,12 @@ import java.util.Collections;
import java.util.List;
import java.util.Objects;
import com.android.dx.io.instructions.DecodedInstruction;
import com.rits.cloning.Cloner;
import org.jetbrains.annotations.Nullable;
import com.android.dx.io.instructions.DecodedInstruction;
import com.rits.cloning.Cloner;
import jadx.core.dex.attributes.AFlag;
import jadx.core.dex.attributes.nodes.LineAttrNode;
import jadx.core.dex.instructions.InsnType;
import jadx.core.dex.instructions.args.ArgType;
@@ -195,6 +197,12 @@ public class InsnNode extends LineAttrNode {
}
public boolean canReorder() {
if (contains(AFlag.DONT_GENERATE)) {
if (getType() == InsnType.MONITOR_EXIT) {
return false;
}
return true;
}
switch (getType()) {
case CONST:
case CONST_STR:
@@ -6,7 +6,6 @@ import java.io.InputStream;
import org.junit.jupiter.api.Test;
import jadx.NotYetImplemented;
import jadx.core.dex.nodes.ClassNode;
import jadx.tests.api.IntegrationTest;
@@ -59,14 +58,7 @@ public class TestFinally2 extends IntegrationTest {
String code = cls.getCode().toString();
assertThat(code, containsOne("decode(inputStream);"));
}
@Test
@NotYetImplemented
public void test2() {
ClassNode cls = getClassNode(TestCls.class);
String code = cls.getCode().toString();
assertThat(code, containsOne("return new Result(400);"));
assertThat(code, not(containsOne("result =")));
}
}