feat(test): add util methods for renames in test (#1885)

This commit is contained in:
Skylot
2023-05-27 19:39:14 +01:00
parent 3bf101d7ac
commit 76e5824d99
2 changed files with 64 additions and 0 deletions
@@ -8,6 +8,7 @@ import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -41,6 +42,10 @@ import jadx.api.JadxDecompiler;
import jadx.api.JadxInternalAccess;
import jadx.api.JavaClass;
import jadx.api.args.GeneratedRenamesMappingFileMode;
import jadx.api.data.IJavaNodeRef;
import jadx.api.data.impl.JadxCodeData;
import jadx.api.data.impl.JadxCodeRename;
import jadx.api.data.impl.JadxNodeRef;
import jadx.api.metadata.ICodeMetadata;
import jadx.api.metadata.annotations.InsnCodeOffset;
import jadx.core.dex.attributes.AFlag;
@@ -618,4 +623,30 @@ public abstract class IntegrationTest extends TestUtils {
protected void saveTestJar() {
this.saveTestJar = true;
}
protected void addClsRename(String fullClsName, String newName) {
JadxNodeRef clsRef = JadxNodeRef.forCls(fullClsName);
getCodeData().getRenames().add(new JadxCodeRename(clsRef, newName));
}
protected void addMthRename(String fullClsName, String mthSignature, String newName) {
JadxNodeRef mthRef = new JadxNodeRef(IJavaNodeRef.RefType.METHOD, fullClsName, mthSignature);
getCodeData().getRenames().add(new JadxCodeRename(mthRef, newName));
}
protected void addFldRename(String fullClsName, String fldSignature, String newName) {
JadxNodeRef fldRef = new JadxNodeRef(IJavaNodeRef.RefType.FIELD, fullClsName, fldSignature);
getCodeData().getRenames().add(new JadxCodeRename(fldRef, newName));
}
protected JadxCodeData getCodeData() {
JadxCodeData codeData = (JadxCodeData) getArgs().getCodeData();
if (codeData == null) {
codeData = new JadxCodeData();
codeData.setRenames(new ArrayList<>());
codeData.setComments(new ArrayList<>());
getArgs().setCodeData(codeData);
}
return codeData;
}
}
@@ -0,0 +1,33 @@
package jadx.tests.integration.deobf;
import org.junit.jupiter.api.Test;
import jadx.tests.api.IntegrationTest;
import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat;
public class TestRenameOverriddenMethod3 extends IntegrationTest {
public static class TestCls {
public abstract static class A {
public abstract int call();
}
public static class B extends A {
@Override
public final int call() {
return 1;
}
}
}
@Test
public void test() {
addMthRename(TestCls.class.getName() + "$A", "call()I", "callRenamed");
assertThat(getClassNode(TestCls.class))
.code()
.countString(1, "@Override")
.countString(2, "int callRenamed()");
}
}