diff --git a/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java b/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java index 089cc6024..a6d3b0104 100644 --- a/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java +++ b/jadx-core/src/test/java/jadx/tests/api/IntegrationTest.java @@ -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; + } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/deobf/TestRenameOverriddenMethod3.java b/jadx-core/src/test/java/jadx/tests/integration/deobf/TestRenameOverriddenMethod3.java new file mode 100644 index 000000000..cc0191601 --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/deobf/TestRenameOverriddenMethod3.java @@ -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()"); + } +}