fix: deep reload for inner classes, const values and anonymous classes

This commit is contained in:
Skylot
2020-01-05 17:28:25 +03:00
parent 0c4b807caa
commit 9dbffef140
7 changed files with 157 additions and 19 deletions
@@ -0,0 +1,34 @@
package jadx.tests.integration.rename;
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 TestAnonymousInline extends IntegrationTest {
public static class TestCls {
public Runnable test() {
return new Runnable() {
@Override
public void run() {
System.out.println("run");
}
};
}
}
@Test
public void test() {
ClassNode cls = getClassNode(TestCls.class);
assertThat(cls.getCode())
.containsOnlyOnce("return new Runnable() {");
assertThat(cls.reloadCode())
.print()
.containsOnlyOnce("return new Runnable() {")
.doesNotContain("AnonymousClass1");
}
}
@@ -0,0 +1,30 @@
package jadx.tests.integration.rename;
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 TestConstReplace extends IntegrationTest {
public static class TestCls {
public static final String CONST = "SOME_CONST";
public String test() {
return CONST;
}
}
@Test
public void test() {
ClassNode cls = getClassNode(TestCls.class);
assertThat(cls.getCode())
.containsOnlyOnce("return CONST;");
assertThat(cls.reloadCode())
.print()
.containsOnlyOnce("return CONST;");
}
}
@@ -0,0 +1,44 @@
package jadx.tests.integration.rename;
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 TestRenameEnum extends IntegrationTest {
public static class TestCls {
public enum A implements Runnable {
ONE {
@Override
public void run() {
System.out.println("ONE");
}
},
TWO {
@Override
public void run() {
System.out.println("TWO");
}
};
}
}
@Test
public void test() {
ClassNode cls = getClassNode(TestCls.class);
assertThat(cls.getCode())
.containsOnlyOnce("public enum A ")
.containsOnlyOnce("ONE {");
cls.getInnerClasses().get(0).getClassInfo().changeShortName("ARenamed");
assertThat(cls.reloadCode())
.print()
.containsOnlyOnce("public enum ARenamed ")
.containsOnlyOnce("ONE {");
}
}