From 448685653e90415ebe10b08e8335462b81c30421 Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 2 Feb 2015 21:26:10 -0500 Subject: fix issue with bridge methods --- .classpath | 1 + build.py | 6 +- src/cuchaz/enigma/CommandMain.java | 9 +-- src/cuchaz/enigma/Deobfuscator.java | 8 +-- src/cuchaz/enigma/TranslatingTypeLoader.java | 4 +- src/cuchaz/enigma/analysis/BridgeFixer.java | 72 ---------------------- src/cuchaz/enigma/gui/Gui.java | 3 +- src/cuchaz/enigma/gui/GuiController.java | 5 +- test/cuchaz/enigma/TestDeobfuscator.java | 4 +- test/cuchaz/enigma/TestInnerClasses.java | 23 ++++++- test/cuchaz/enigma/TestSourceIndex.java | 4 +- test/cuchaz/enigma/TestTokensConstructors.java | 18 +++--- test/cuchaz/enigma/TokenChecker.java | 4 +- .../enigma/inputs/innerClasses/A_Anonymous.java | 14 +++++ .../enigma/inputs/innerClasses/Anonymous.java | 14 ----- .../innerClasses/AnonymousWithScopeArgs.java | 13 ---- .../innerClasses/B_AnonymousWithScopeArgs.java | 13 ++++ .../inputs/innerClasses/C_ConstructorArgs.java | 20 ++++++ .../inputs/innerClasses/ConstructorArgs.java | 20 ------ .../enigma/inputs/innerClasses/D_Simple.java | 8 +++ .../innerClasses/E_AnonymousWithOuterAccess.java | 21 +++++++ test/cuchaz/enigma/inputs/innerClasses/Simple.java | 8 --- 22 files changed, 129 insertions(+), 163 deletions(-) delete mode 100644 src/cuchaz/enigma/analysis/BridgeFixer.java create mode 100644 test/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java delete mode 100644 test/cuchaz/enigma/inputs/innerClasses/Anonymous.java delete mode 100644 test/cuchaz/enigma/inputs/innerClasses/AnonymousWithScopeArgs.java create mode 100644 test/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java create mode 100644 test/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java delete mode 100644 test/cuchaz/enigma/inputs/innerClasses/ConstructorArgs.java create mode 100644 test/cuchaz/enigma/inputs/innerClasses/D_Simple.java create mode 100644 test/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java delete mode 100644 test/cuchaz/enigma/inputs/innerClasses/Simple.java diff --git a/.classpath b/.classpath index 7a9ca3de..16e0b310 100644 --- a/.classpath +++ b/.classpath @@ -4,6 +4,7 @@ + diff --git a/build.py b/build.py index 09718cb2..8e37d0ff 100644 --- a/build.py +++ b/build.py @@ -28,7 +28,7 @@ ExtraRepos = [ LibDeps = [ ssjb.ivy.Dep("com.google.guava:guava:17.0"), ssjb.ivy.Dep("org.javassist:javassist:3.18.1-GA"), - ssjb.ivy.Dep("org.bitbucket.mstrobel:procyon-decompiler:0.5.26-enigma") + ssjb.ivy.Dep("org.bitbucket.mstrobel:procyon-decompiler:0.5.28-enigma") ] StandaloneDeps = LibDeps + [ ssjb.ivy.Dep("de.sciss:jsyntaxpane:1.0.0") @@ -47,7 +47,7 @@ def buildTestJar(name, glob): pathObfJar = os.path.join(DirBuild, "%s.obf.jar" % name) # build the deobf jar - with ssjb.file.TempDir(DirTemp) as dirTemp: + with ssjb.file.TempDir("tmp") as dirTemp: ssjb.file.copyTree(dirTemp, DirBin, ssjb.file.find(DirBin, "cuchaz/enigma/inputs/Keep.class")) ssjb.file.copyTree(dirTemp, DirBin, ssjb.file.find(DirBin, glob)) ssjb.jar.makeJar(pathJar, dirTemp) @@ -96,7 +96,7 @@ def buildLibJar(dirOut): def taskGetDeps(): ssjb.file.mkdir(DirLib) - ssjb.ivy.makeLibsJar(os.path.join(DirLib, "deps.jar"), Deps, extraRepos=ExtraRepos) + ssjb.ivy.makeLibsJar(os.path.join(DirLib, "deps.jar"), StandaloneDeps, extraRepos=ExtraRepos) ssjb.ivy.makeLibsJar(os.path.join(DirLib, "test-deps.jar"), TestDeps) ssjb.ivy.makeJar(os.path.join(DirLib, "proguard.jar"), ProguardDep) diff --git a/src/cuchaz/enigma/CommandMain.java b/src/cuchaz/enigma/CommandMain.java index 74bd4991..1ec2ad23 100644 --- a/src/cuchaz/enigma/CommandMain.java +++ b/src/cuchaz/enigma/CommandMain.java @@ -2,6 +2,7 @@ package cuchaz.enigma; import java.io.File; import java.io.FileReader; +import java.util.jar.JarFile; import cuchaz.enigma.Deobfuscator.ProgressListener; import cuchaz.enigma.mapping.Mappings; @@ -78,7 +79,7 @@ public class CommandMain { File fileMappings = getReadableFile(getArg(args, 1, "mappings file")); File fileJarIn = getReadableFile(getArg(args, 2, "in jar")); File fileJarOut = getWritableFolder(getArg(args, 3, "out folder")); - Deobfuscator deobfuscator = getDeobfuscator(fileMappings, fileJarIn); + Deobfuscator deobfuscator = getDeobfuscator(fileMappings, new JarFile(fileJarIn)); deobfuscator.writeSources(fileJarOut, new ConsoleProgressListener()); } @@ -87,16 +88,16 @@ public class CommandMain { File fileMappings = getReadableFile(getArg(args, 1, "mappings file")); File fileJarIn = getReadableFile(getArg(args, 2, "in jar")); File fileJarOut = getWritableFile(getArg(args, 3, "out jar")); - Deobfuscator deobfuscator = getDeobfuscator(fileMappings, fileJarIn); + Deobfuscator deobfuscator = getDeobfuscator(fileMappings, new JarFile(fileJarIn)); deobfuscator.writeJar(fileJarOut, new ConsoleProgressListener()); } - private static Deobfuscator getDeobfuscator(File fileMappings, File fileJar) + private static Deobfuscator getDeobfuscator(File fileMappings, JarFile jar) throws Exception { System.out.println("Reading mappings..."); Mappings mappings = new MappingsReader().read(new FileReader(fileMappings)); System.out.println("Reading jar..."); - Deobfuscator deobfuscator = new Deobfuscator(fileJar); + Deobfuscator deobfuscator = new Deobfuscator(jar); deobfuscator.setMappings(mappings); return deobfuscator; } diff --git a/src/cuchaz/enigma/Deobfuscator.java b/src/cuchaz/enigma/Deobfuscator.java index 22c517a1..62c062a5 100644 --- a/src/cuchaz/enigma/Deobfuscator.java +++ b/src/cuchaz/enigma/Deobfuscator.java @@ -68,7 +68,6 @@ public class Deobfuscator { void onProgress(int numDone, String message); } - private File m_file; private JarFile m_jar; private DecompilerSettings m_settings; private JarIndex m_jarIndex; @@ -76,9 +75,8 @@ public class Deobfuscator { private MappingsRenamer m_renamer; private Map m_translatorCache; - public Deobfuscator(File file) throws IOException { - m_file = file; - m_jar = new JarFile(m_file); + public Deobfuscator(JarFile jar) throws IOException { + m_jar = jar; // build the jar index m_jarIndex = new JarIndex(); @@ -100,7 +98,7 @@ public class Deobfuscator { } public String getJarName() { - return m_file.getName(); + return m_jar.getName(); } public JarIndex getJarIndex() { diff --git a/src/cuchaz/enigma/TranslatingTypeLoader.java b/src/cuchaz/enigma/TranslatingTypeLoader.java index 091f916d..9287999b 100644 --- a/src/cuchaz/enigma/TranslatingTypeLoader.java +++ b/src/cuchaz/enigma/TranslatingTypeLoader.java @@ -29,7 +29,6 @@ import com.strobel.assembler.metadata.Buffer; import com.strobel.assembler.metadata.ClasspathTypeLoader; import com.strobel.assembler.metadata.ITypeLoader; -import cuchaz.enigma.analysis.BridgeFixer; import cuchaz.enigma.analysis.JarIndex; import cuchaz.enigma.bytecode.ClassRenamer; import cuchaz.enigma.bytecode.ClassTranslator; @@ -168,7 +167,7 @@ public class TranslatingTypeLoader implements ITypeLoader { assertClassName(c, deobfClassEntry); // DEBUG - // Util.writeClass( c ); + Util.writeClass( c ); // we have a transformed class! return c.toBytecode(); @@ -196,7 +195,6 @@ public class TranslatingTypeLoader implements ITypeLoader { assertClassName(c, obfClassEntry); // do all kinds of deobfuscating transformations on the class - new BridgeFixer(m_jarIndex).fixBridges(c); new MethodParameterWriter(m_deobfuscatingTranslator).writeMethodArguments(c); new ClassTranslator(m_deobfuscatingTranslator).translate(c); diff --git a/src/cuchaz/enigma/analysis/BridgeFixer.java b/src/cuchaz/enigma/analysis/BridgeFixer.java deleted file mode 100644 index ad23b000..00000000 --- a/src/cuchaz/enigma/analysis/BridgeFixer.java +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2014 Jeff Martin. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the GNU Public License v3.0 - * which accompanies this distribution, and is available at - * http://www.gnu.org/licenses/gpl.html - * - * Contributors: - * Jeff Martin - initial API and implementation - ******************************************************************************/ -package cuchaz.enigma.analysis; - -import javassist.CtClass; -import javassist.CtMethod; -import javassist.bytecode.ConstPool; -import javassist.bytecode.Descriptor; -import cuchaz.enigma.bytecode.ConstPoolEditor; -import cuchaz.enigma.mapping.BehaviorEntry; -import cuchaz.enigma.mapping.BehaviorEntryFactory; -import cuchaz.enigma.mapping.ClassEntry; -import cuchaz.enigma.mapping.MethodEntry; - -public class BridgeFixer { - - private JarIndex m_index; - - public BridgeFixer(JarIndex index) { - m_index = index; - } - - public void fixBridges(CtClass c) { - // rename declared methods - for (CtMethod method : c.getDeclaredMethods()) { - // get the method entry - MethodEntry methodEntry = new MethodEntry( - new ClassEntry(Descriptor.toJvmName(c.getName())), - method.getName(), - method.getSignature() - ); - MethodEntry bridgeMethodEntry = m_index.getBridgeMethod(methodEntry); - if (bridgeMethodEntry != null) { - // fix this bridged method - method.setName(bridgeMethodEntry.getName()); - } - } - - // rename method references - // translate all the field and method references in the code by editing the constant pool - ConstPool constants = c.getClassFile().getConstPool(); - ConstPoolEditor editor = new ConstPoolEditor(constants); - for (int i = 1; i < constants.getSize(); i++) { - switch (constants.getTag(i)) { - case ConstPool.CONST_Methodref: - case ConstPool.CONST_InterfaceMethodref: { - BehaviorEntry behaviorEntry = BehaviorEntryFactory.create(Descriptor.toJvmName(editor.getMemberrefClassname(i)), editor.getMemberrefName(i), editor.getMemberrefType(i)); - - if (behaviorEntry instanceof MethodEntry) { - MethodEntry methodEntry = (MethodEntry)behaviorEntry; - - // translate the name and type - MethodEntry bridgeMethodEntry = m_index.getBridgeMethod(methodEntry); - if (bridgeMethodEntry != null) { - // FIXIT FIXIT FIXIT FIXIT FIXIT FIXIT FIXIT - editor.changeMemberrefNameAndType(i, bridgeMethodEntry.getName(), bridgeMethodEntry.getSignature()); - } - } - } - break; - } - } - } -} diff --git a/src/cuchaz/enigma/gui/Gui.java b/src/cuchaz/enigma/gui/Gui.java index 86ba93b2..e652202c 100644 --- a/src/cuchaz/enigma/gui/Gui.java +++ b/src/cuchaz/enigma/gui/Gui.java @@ -33,6 +33,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Vector; +import java.util.jar.JarFile; import javax.swing.BorderFactory; import javax.swing.JEditorPane; @@ -499,7 +500,7 @@ public class Gui { @Override public void run() { try { - m_controller.openJar(m_jarFileChooser.getSelectedFile()); + m_controller.openJar(new JarFile(m_jarFileChooser.getSelectedFile())); } catch (IOException ex) { throw new Error(ex); } diff --git a/src/cuchaz/enigma/gui/GuiController.java b/src/cuchaz/enigma/gui/GuiController.java index 908c16fa..61fea9c0 100644 --- a/src/cuchaz/enigma/gui/GuiController.java +++ b/src/cuchaz/enigma/gui/GuiController.java @@ -17,6 +17,7 @@ import java.io.IOException; import java.util.Collection; import java.util.Deque; import java.util.List; +import java.util.jar.JarFile; import com.google.common.collect.Lists; import com.google.common.collect.Queues; @@ -66,9 +67,9 @@ public class GuiController { return m_isDirty; } - public void openJar(final File file) throws IOException { + public void openJar(final JarFile jar) throws IOException { m_gui.onStartOpenJar(); - m_deobfuscator = new Deobfuscator(file); + m_deobfuscator = new Deobfuscator(jar); m_gui.onFinishOpenJar(m_deobfuscator.getJarName()); refreshClasses(); } diff --git a/test/cuchaz/enigma/TestDeobfuscator.java b/test/cuchaz/enigma/TestDeobfuscator.java index 6ac4c786..129d7b25 100644 --- a/test/cuchaz/enigma/TestDeobfuscator.java +++ b/test/cuchaz/enigma/TestDeobfuscator.java @@ -13,9 +13,9 @@ package cuchaz.enigma; import static org.junit.Assert.*; -import java.io.File; import java.io.IOException; import java.util.List; +import java.util.jar.JarFile; import org.junit.Test; @@ -26,7 +26,7 @@ import cuchaz.enigma.mapping.ClassEntry; public class TestDeobfuscator { private Deobfuscator getDeobfuscator() throws IOException { - return new Deobfuscator(new File("build/testLoneClass.obf.jar")); + return new Deobfuscator(new JarFile("build/testLoneClass.obf.jar")); } @Test diff --git a/test/cuchaz/enigma/TestInnerClasses.java b/test/cuchaz/enigma/TestInnerClasses.java index 51fb5e35..63c9b719 100644 --- a/test/cuchaz/enigma/TestInnerClasses.java +++ b/test/cuchaz/enigma/TestInnerClasses.java @@ -23,6 +23,7 @@ import cuchaz.enigma.analysis.JarIndex; public class TestInnerClasses { private JarIndex m_index; + private Deobfuscator m_deobfuscator; private static final String AnonymousOuter = "none/a"; private static final String AnonymousInner = "b"; @@ -32,10 +33,14 @@ public class TestInnerClasses { private static final String ConstructorArgsInner = "f"; private static final String AnonymousWithScopeArgsOuter = "none/c"; private static final String AnonymousWithScopeArgsInner = "d"; + private static final String AnonymousWithOuterAccessOuter = "none/i"; + private static final String AnonymousWithOuterAccessInner = "j"; public TestInnerClasses() throws Exception { m_index = new JarIndex(); - m_index.indexJar(new JarFile("build/testInnerClasses.obf.jar"), true); + JarFile jar = new JarFile("build/testInnerClasses.obf.jar"); + m_index.indexJar(jar, true); + m_deobfuscator = new Deobfuscator(jar); } @Test @@ -43,6 +48,7 @@ public class TestInnerClasses { assertThat(m_index.getOuterClass(SimpleInner), is(SimpleOuter)); assertThat(m_index.getInnerClasses(SimpleOuter), containsInAnyOrder(SimpleInner)); assertThat(m_index.isAnonymousClass(SimpleInner), is(false)); + decompile(SimpleOuter); } @Test @@ -50,6 +56,7 @@ public class TestInnerClasses { assertThat(m_index.getOuterClass(AnonymousInner), is(AnonymousOuter)); assertThat(m_index.getInnerClasses(AnonymousOuter), containsInAnyOrder(AnonymousInner)); assertThat(m_index.isAnonymousClass(AnonymousInner), is(true)); + decompile(AnonymousOuter); } @Test @@ -57,6 +64,7 @@ public class TestInnerClasses { assertThat(m_index.getOuterClass(ConstructorArgsInner), is(ConstructorArgsOuter)); assertThat(m_index.getInnerClasses(ConstructorArgsOuter), containsInAnyOrder(ConstructorArgsInner)); assertThat(m_index.isAnonymousClass(ConstructorArgsInner), is(false)); + decompile(ConstructorArgsOuter); } @Test @@ -64,5 +72,18 @@ public class TestInnerClasses { assertThat(m_index.getOuterClass(AnonymousWithScopeArgsInner), is(AnonymousWithScopeArgsOuter)); assertThat(m_index.getInnerClasses(AnonymousWithScopeArgsOuter), containsInAnyOrder(AnonymousWithScopeArgsInner)); assertThat(m_index.isAnonymousClass(AnonymousWithScopeArgsInner), is(true)); + decompile(AnonymousWithScopeArgsOuter); + } + + @Test + public void anonymousWithOuterAccess() { + assertThat(m_index.getOuterClass(AnonymousWithOuterAccessInner), is(AnonymousWithOuterAccessOuter)); + assertThat(m_index.getInnerClasses(AnonymousWithOuterAccessOuter), containsInAnyOrder(AnonymousWithOuterAccessInner)); + assertThat(m_index.isAnonymousClass(AnonymousWithOuterAccessInner), is(true)); + decompile(AnonymousWithOuterAccessOuter); + } + + private void decompile(String name) { + m_deobfuscator.getSourceTree(name); } } diff --git a/test/cuchaz/enigma/TestSourceIndex.java b/test/cuchaz/enigma/TestSourceIndex.java index ba7fc797..70a5ee4c 100644 --- a/test/cuchaz/enigma/TestSourceIndex.java +++ b/test/cuchaz/enigma/TestSourceIndex.java @@ -11,8 +11,8 @@ ******************************************************************************/ package cuchaz.enigma; -import java.io.File; import java.util.Set; +import java.util.jar.JarFile; import org.junit.Test; @@ -26,7 +26,7 @@ public class TestSourceIndex { // TEMP @Test public void indexEverything() throws Exception { - Deobfuscator deobfuscator = new Deobfuscator(new File("input/1.8.jar")); + Deobfuscator deobfuscator = new Deobfuscator(new JarFile("input/1.8.jar")); // get all classes that aren't inner classes Set classEntries = Sets.newHashSet(); diff --git a/test/cuchaz/enigma/TestTokensConstructors.java b/test/cuchaz/enigma/TestTokensConstructors.java index 9f85e81d..56424ae8 100644 --- a/test/cuchaz/enigma/TestTokensConstructors.java +++ b/test/cuchaz/enigma/TestTokensConstructors.java @@ -10,15 +10,11 @@ ******************************************************************************/ package cuchaz.enigma; -import static cuchaz.enigma.EntryFactory.newBehaviorReferenceByConstructor; -import static cuchaz.enigma.EntryFactory.newBehaviorReferenceByMethod; -import static cuchaz.enigma.EntryFactory.newConstructor; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsInAnyOrder; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.nullValue; +import static cuchaz.enigma.EntryFactory.*; +import static org.hamcrest.MatcherAssert.*; +import static org.hamcrest.Matchers.*; -import java.io.File; +import java.util.jar.JarFile; import org.junit.Test; @@ -27,7 +23,7 @@ import cuchaz.enigma.mapping.BehaviorEntry; public class TestTokensConstructors extends TokenChecker { public TestTokensConstructors() throws Exception { - super(new File("build/testConstructors.obf.jar")); + super(new JarFile("build/testConstructors.obf.jar")); } @Test @@ -63,11 +59,11 @@ public class TestTokensConstructors extends TokenChecker { ); assertThat( getReferenceTokens(newBehaviorReferenceByConstructor(source, "none/d", "()V")), - containsInAnyOrder("super") // implicit call, decompiled to "super" + is(empty()) // implicit call, not decompiled to token ); assertThat( getReferenceTokens(newBehaviorReferenceByConstructor(source, "none/d", "(III)V")), - containsInAnyOrder("super") // implicit call, decompiled to "super" + is(empty()) // implicit call, not decompiled to token ); } diff --git a/test/cuchaz/enigma/TokenChecker.java b/test/cuchaz/enigma/TokenChecker.java index 524c5ec5..febea2ae 100644 --- a/test/cuchaz/enigma/TokenChecker.java +++ b/test/cuchaz/enigma/TokenChecker.java @@ -10,10 +10,10 @@ ******************************************************************************/ package cuchaz.enigma; -import java.io.File; import java.io.IOException; import java.util.Collection; import java.util.List; +import java.util.jar.JarFile; import com.google.common.collect.Lists; import com.strobel.decompiler.languages.java.ast.CompilationUnit; @@ -27,7 +27,7 @@ public class TokenChecker { private Deobfuscator m_deobfuscator; - protected TokenChecker(File jarFile) throws IOException { + protected TokenChecker(JarFile jarFile) throws IOException { m_deobfuscator = new Deobfuscator(jarFile); } diff --git a/test/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java b/test/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java new file mode 100644 index 00000000..f7118f63 --- /dev/null +++ b/test/cuchaz/enigma/inputs/innerClasses/A_Anonymous.java @@ -0,0 +1,14 @@ +package cuchaz.enigma.inputs.innerClasses; + +public class A_Anonymous { + + public void foo() { + Runnable runnable = new Runnable() { + @Override + public void run() { + // don't care + } + }; + runnable.run(); + } +} diff --git a/test/cuchaz/enigma/inputs/innerClasses/Anonymous.java b/test/cuchaz/enigma/inputs/innerClasses/Anonymous.java deleted file mode 100644 index f5d9d1cf..00000000 --- a/test/cuchaz/enigma/inputs/innerClasses/Anonymous.java +++ /dev/null @@ -1,14 +0,0 @@ -package cuchaz.enigma.inputs.innerClasses; - -public class Anonymous { - - public void foo() { - Runnable runnable = new Runnable() { - @Override - public void run() { - // don't care - } - }; - runnable.run(); - } -} diff --git a/test/cuchaz/enigma/inputs/innerClasses/AnonymousWithScopeArgs.java b/test/cuchaz/enigma/inputs/innerClasses/AnonymousWithScopeArgs.java deleted file mode 100644 index b3ba1af8..00000000 --- a/test/cuchaz/enigma/inputs/innerClasses/AnonymousWithScopeArgs.java +++ /dev/null @@ -1,13 +0,0 @@ -package cuchaz.enigma.inputs.innerClasses; - -public class AnonymousWithScopeArgs { - - public static void foo(final Simple arg) { - System.out.println(new Object() { - @Override - public String toString() { - return arg.toString(); - } - }); - } -} diff --git a/test/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java b/test/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java new file mode 100644 index 00000000..42fba9a8 --- /dev/null +++ b/test/cuchaz/enigma/inputs/innerClasses/B_AnonymousWithScopeArgs.java @@ -0,0 +1,13 @@ +package cuchaz.enigma.inputs.innerClasses; + +public class B_AnonymousWithScopeArgs { + + public static void foo(final D_Simple arg) { + System.out.println(new Object() { + @Override + public String toString() { + return arg.toString(); + } + }); + } +} diff --git a/test/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java b/test/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java new file mode 100644 index 00000000..8fa6c5b8 --- /dev/null +++ b/test/cuchaz/enigma/inputs/innerClasses/C_ConstructorArgs.java @@ -0,0 +1,20 @@ +package cuchaz.enigma.inputs.innerClasses; + +@SuppressWarnings("unused") +public class C_ConstructorArgs { + + class Inner { + + private int a; + + public Inner(int a) { + this.a = a; + } + } + + Inner i; + + public void foo() { + i = new Inner(5); + } +} diff --git a/test/cuchaz/enigma/inputs/innerClasses/ConstructorArgs.java b/test/cuchaz/enigma/inputs/innerClasses/ConstructorArgs.java deleted file mode 100644 index 08135fe5..00000000 --- a/test/cuchaz/enigma/inputs/innerClasses/ConstructorArgs.java +++ /dev/null @@ -1,20 +0,0 @@ -package cuchaz.enigma.inputs.innerClasses; - -@SuppressWarnings("unused") -public class ConstructorArgs { - - class Inner { - - private int a; - - public Inner(int a) { - this.a = a; - } - } - - Inner i; - - public void foo() { - i = new Inner(5); - } -} diff --git a/test/cuchaz/enigma/inputs/innerClasses/D_Simple.java b/test/cuchaz/enigma/inputs/innerClasses/D_Simple.java new file mode 100644 index 00000000..c4fc0ef9 --- /dev/null +++ b/test/cuchaz/enigma/inputs/innerClasses/D_Simple.java @@ -0,0 +1,8 @@ +package cuchaz.enigma.inputs.innerClasses; + +public class D_Simple { + + class Inner { + // nothing to do + } +} diff --git a/test/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java b/test/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java new file mode 100644 index 00000000..e1de53cb --- /dev/null +++ b/test/cuchaz/enigma/inputs/innerClasses/E_AnonymousWithOuterAccess.java @@ -0,0 +1,21 @@ +package cuchaz.enigma.inputs.innerClasses; + +public class E_AnonymousWithOuterAccess { + + // reproduction of error case documented at: + // https://bitbucket.org/cuchaz/enigma/issue/61/stackoverflowerror-when-deobfuscating + + public Object makeInner() { + outerMethod(); + return new Object() { + @Override + public String toString() { + return outerMethod(); + } + }; + } + + private String outerMethod() { + return "foo"; + } +} diff --git a/test/cuchaz/enigma/inputs/innerClasses/Simple.java b/test/cuchaz/enigma/inputs/innerClasses/Simple.java deleted file mode 100644 index cb536fa6..00000000 --- a/test/cuchaz/enigma/inputs/innerClasses/Simple.java +++ /dev/null @@ -1,8 +0,0 @@ -package cuchaz.enigma.inputs.innerClasses; - -public class Simple { - - class Inner { - // nothing to do - } -} -- cgit v1.2.3