fix: allow to regenerate class code (#791)

This commit is contained in:
Skylot
2019-12-13 18:19:12 +00:00
parent ef5da49bc0
commit 1c6e51f8b2
4 changed files with 70 additions and 14 deletions
@@ -51,4 +51,11 @@ public class JadxCodeAssertions extends AbstractStringAssert<JadxCodeAssertions>
}
return countString(1, sb.toString());
}
public JadxCodeAssertions print() {
System.out.println("-----------------------------------------------------------");
System.out.println(actual);
System.out.println("-----------------------------------------------------------");
return this;
}
}
@@ -0,0 +1,41 @@
package jadx.tests.integration.others;
import org.junit.jupiter.api.Test;
import jadx.core.dex.nodes.ClassNode;
import jadx.tests.api.IntegrationTest;
import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat;
public class TestClassReGen extends IntegrationTest {
public static class TestCls {
private int intField = 5;
public static class A {
}
public int test() {
return 0;
}
}
@Test
public void test() {
ClassNode cls = getClassNode(TestCls.class);
assertThat(cls.getCode())
.containsOnlyOnce("private int intField = 5;")
.containsOnlyOnce("public static class A {")
.containsOnlyOnce("public int test() {");
cls.getInnerClasses().get(0).getClassInfo().changeShortName("ARenamed");
cls.searchMethodByShortName("test").getMethodInfo().setAlias("testRenamed");
cls.searchFieldByName("intField").getFieldInfo().setAlias("intFieldRenamed");
assertThat(cls.reloadCode())
.print()
.containsOnlyOnce("private int intFieldRenamed = 5;")
.containsOnlyOnce("public static class ARenamed {")
.containsOnlyOnce("public int testRenamed() {");
}
}