From 563c5e08e3d61bfd39402a94e78bbaaf75623b04 Mon Sep 17 00:00:00 2001 From: jeff Date: Mon, 16 Mar 2015 12:52:09 -0400 Subject: fix more inner class issues --- src/cuchaz/enigma/analysis/JarIndex.java | 2 +- src/cuchaz/enigma/bytecode/InnerClassWriter.java | 2 +- src/cuchaz/enigma/convert/ClassIdentity.java | 2 +- src/cuchaz/enigma/gui/CodeReader.java | 8 +------- src/cuchaz/enigma/mapping/ClassEntry.java | 21 ++++++++++++++++----- 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/cuchaz/enigma/analysis/JarIndex.java b/src/cuchaz/enigma/analysis/JarIndex.java index a4a3abb8..7ebbd974 100644 --- a/src/cuchaz/enigma/analysis/JarIndex.java +++ b/src/cuchaz/enigma/analysis/JarIndex.java @@ -312,7 +312,7 @@ public class JarIndex { // does this class already have an outer class? if (classEntry.isInnerClass()) { - return classEntry.getOutermostClassEntry(); + return classEntry.getOuterClassEntry(); } InnerClassesAttribute innerClassesAttribute = (InnerClassesAttribute)c.getClassFile().getAttribute(InnerClassesAttribute.tag); if (innerClassesAttribute != null) { diff --git a/src/cuchaz/enigma/bytecode/InnerClassWriter.java b/src/cuchaz/enigma/bytecode/InnerClassWriter.java index 976028d2..bb643158 100644 --- a/src/cuchaz/enigma/bytecode/InnerClassWriter.java +++ b/src/cuchaz/enigma/bytecode/InnerClassWriter.java @@ -93,7 +93,7 @@ public class InnerClassWriter { // get the new inner class name ClassEntry obfInnerClassEntry = obfClassEntry.buildClassEntry(obfClassChain); - ClassEntry obfOuterClassEntry = obfInnerClassEntry.getOutermostClassEntry(); + ClassEntry obfOuterClassEntry = obfInnerClassEntry.getOuterClassEntry(); // here's what the JVM spec says about the InnerClasses attribute // append(inner, parent, 0 if anonymous else simple name, flags); diff --git a/src/cuchaz/enigma/convert/ClassIdentity.java b/src/cuchaz/enigma/convert/ClassIdentity.java index d76cd63e..35667b05 100644 --- a/src/cuchaz/enigma/convert/ClassIdentity.java +++ b/src/cuchaz/enigma/convert/ClassIdentity.java @@ -180,7 +180,7 @@ public class ClassIdentity { } } - m_outer = EntryFactory.getClassEntry(c).getOutermostClassName(); + m_outer = EntryFactory.getClassEntry(c).getOuterClassName(); } private void addReference(EntryReference reference) { diff --git a/src/cuchaz/enigma/gui/CodeReader.java b/src/cuchaz/enigma/gui/CodeReader.java index fb8e0825..d8fb394b 100644 --- a/src/cuchaz/enigma/gui/CodeReader.java +++ b/src/cuchaz/enigma/gui/CodeReader.java @@ -103,14 +103,8 @@ public class CodeReader extends JEditorPane { @Override public void run() { - // get the outermost class - ClassEntry outermostClassEntry = classEntry; - while (outermostClassEntry.isInnerClass()) { - outermostClassEntry = outermostClassEntry.getOutermostClassEntry(); - } - // decompile it - CompilationUnit sourceTree = deobfuscator.getSourceTree(outermostClassEntry.getName()); + CompilationUnit sourceTree = deobfuscator.getSourceTree(classEntry.getOutermostClassName()); String source = deobfuscator.getSource(sourceTree); setCode(source); m_sourceIndex = deobfuscator.getSourceIndex(sourceTree, source, ignoreBadTokens); diff --git a/src/cuchaz/enigma/mapping/ClassEntry.java b/src/cuchaz/enigma/mapping/ClassEntry.java index 5f3b5e23..e6400b8c 100644 --- a/src/cuchaz/enigma/mapping/ClassEntry.java +++ b/src/cuchaz/enigma/mapping/ClassEntry.java @@ -105,20 +105,31 @@ public class ClassEntry implements Entry, Serializable { public String getOutermostClassName() { if (isInnerClass()) { - return m_name.substring(0, m_name.lastIndexOf('$')); + return m_name.substring(0, m_name.indexOf('$')); } return m_name; } - public String getInnermostClassName() { + public ClassEntry getOutermostClassEntry() { + return new ClassEntry(getOutermostClassName()); + } + + public String getOuterClassName() { if (!isInnerClass()) { throw new Error("This is not an inner class!"); } - return m_name.substring(m_name.lastIndexOf('$') + 1); + return m_name.substring(0, m_name.lastIndexOf('$')); } - public ClassEntry getOutermostClassEntry() { - return new ClassEntry(getOutermostClassName()); + public ClassEntry getOuterClassEntry() { + return new ClassEntry(getOuterClassName()); + } + + public String getInnermostClassName() { + if (!isInnerClass()) { + throw new Error("This is not an inner class!"); + } + return m_name.substring(m_name.lastIndexOf('$') + 1); } public boolean isInDefaultPackage() { -- cgit v1.2.3