From bcbc87994a0e70ed5aa0dffb95888b1a7f8ea7be Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 24 Mar 2016 18:38:58 -0400 Subject: [PATCH] Unused params test, this is very slow. --- .../code/instructions/InvokeInterface.java | 6 ++- .../code/instructions/InvokeVirtual.java | 2 - .../deob/deobfuscators/UnusedParameters.java | 18 +++++--- .../deobfuscators/UnusedParametersTest.java | 42 +++++++++++++++++++ 4 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 src/test/java/net/runelite/deob/deobfuscators/UnusedParametersTest.java diff --git a/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeInterface.java b/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeInterface.java index b4664c87b9..5d183e5a27 100644 --- a/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeInterface.java +++ b/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeInterface.java @@ -153,8 +153,12 @@ public class InvokeInterface extends Instruction implements InvokeInstruction ClassFile otherClass = group.findClass(method.getClassEntry().getName()); if (otherClass == null) return null; // not our class + + net.runelite.asm.Method m = otherClass.findMethod(method.getNameAndType()); + if (m == null) + return null; - return Renamer.getVirutalMethods(otherClass.findMethod(method.getNameAndType())); + return Renamer.getVirutalMethods(m); } @Override diff --git a/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeVirtual.java b/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeVirtual.java index f55018ab2e..65ee99f383 100644 --- a/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeVirtual.java +++ b/src/main/java/net/runelite/asm/attributes/code/instructions/InvokeVirtual.java @@ -151,9 +151,7 @@ public class InvokeVirtual extends Instruction implements InvokeInstruction net.runelite.asm.Method m = otherClass.findMethodDeep(method.getNameAndType()); if (m == null) - { return null; - } return Renamer.getVirutalMethods(m); } diff --git a/src/main/java/net/runelite/deob/deobfuscators/UnusedParameters.java b/src/main/java/net/runelite/deob/deobfuscators/UnusedParameters.java index c420c2aba7..1e1367bc10 100644 --- a/src/main/java/net/runelite/deob/deobfuscators/UnusedParameters.java +++ b/src/main/java/net/runelite/deob/deobfuscators/UnusedParameters.java @@ -206,7 +206,7 @@ public class UnusedParameters implements Deobfuscator method.arguments.remove(paramIndex); } - private int[] checkParametersOnce(Execution execution, ClassGroup group) + private int checkParametersOnce(Execution execution, ClassGroup group) { // removing parameters shifts the others around which is annoying. // if more than one is unused, we'll just remove the one @@ -263,14 +263,15 @@ public class UnusedParameters implements Deobfuscator break; } } - return new int[] { count }; + return count; } + + private int count; @Override public void run(ClassGroup group) { - int count = 0; - int[] i; + int i; do { group.buildClassGraph(); @@ -281,10 +282,15 @@ public class UnusedParameters implements Deobfuscator i = checkParametersOnce(execution, group); - count += i[0]; + count += i; } - while (i[0] > 0); + while (i > 0); System.out.println("Removed " + count + " unused parameters"); } + + public int getCount() + { + return count; + } } diff --git a/src/test/java/net/runelite/deob/deobfuscators/UnusedParametersTest.java b/src/test/java/net/runelite/deob/deobfuscators/UnusedParametersTest.java new file mode 100644 index 0000000000..bd2e49ccc9 --- /dev/null +++ b/src/test/java/net/runelite/deob/deobfuscators/UnusedParametersTest.java @@ -0,0 +1,42 @@ +package net.runelite.deob.deobfuscators; + +import java.io.File; +import java.io.IOException; +import net.runelite.asm.ClassGroup; +import net.runelite.deob.util.JarUtil; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +public class UnusedParametersTest +{ + private static final File GAMEPACK = new File(RenameUniqueTest.class.getResource("/gamepack_v16.jar").getFile()); + + @Rule + public TemporaryFolder folder = new TemporaryFolder(); + + private ClassGroup group; + + @Before + public void before() throws IOException + { + group = JarUtil.loadJar(GAMEPACK); + } + + @After + public void after() throws IOException + { + JarUtil.saveJar(group, folder.newFile()); + } + + @Test + public void testRun() + { + UnusedParameters cp = new UnusedParameters(); + cp.run(group); + Assert.assertEquals(357, cp.getCount()); + } +}