diff options
| author | 2015-03-16 12:52:09 -0400 | |
|---|---|---|
| committer | 2015-03-16 12:52:09 -0400 | |
| commit | 563c5e08e3d61bfd39402a94e78bbaaf75623b04 (patch) | |
| tree | 34e72c074fe35f62e46f395c01c586096ae4fece /src | |
| parent | fix a zillion issues with inner classes (diff) | |
| download | enigma-563c5e08e3d61bfd39402a94e78bbaaf75623b04.tar.gz enigma-563c5e08e3d61bfd39402a94e78bbaaf75623b04.tar.xz enigma-563c5e08e3d61bfd39402a94e78bbaaf75623b04.zip | |
fix more inner class issues
Diffstat (limited to 'src')
| -rw-r--r-- | src/cuchaz/enigma/analysis/JarIndex.java | 2 | ||||
| -rw-r--r-- | src/cuchaz/enigma/bytecode/InnerClassWriter.java | 2 | ||||
| -rw-r--r-- | src/cuchaz/enigma/convert/ClassIdentity.java | 2 | ||||
| -rw-r--r-- | src/cuchaz/enigma/gui/CodeReader.java | 8 | ||||
| -rw-r--r-- | 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 { | |||
| 312 | 312 | ||
| 313 | // does this class already have an outer class? | 313 | // does this class already have an outer class? |
| 314 | if (classEntry.isInnerClass()) { | 314 | if (classEntry.isInnerClass()) { |
| 315 | return classEntry.getOutermostClassEntry(); | 315 | return classEntry.getOuterClassEntry(); |
| 316 | } | 316 | } |
| 317 | InnerClassesAttribute innerClassesAttribute = (InnerClassesAttribute)c.getClassFile().getAttribute(InnerClassesAttribute.tag); | 317 | InnerClassesAttribute innerClassesAttribute = (InnerClassesAttribute)c.getClassFile().getAttribute(InnerClassesAttribute.tag); |
| 318 | if (innerClassesAttribute != null) { | 318 | 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 { | |||
| 93 | 93 | ||
| 94 | // get the new inner class name | 94 | // get the new inner class name |
| 95 | ClassEntry obfInnerClassEntry = obfClassEntry.buildClassEntry(obfClassChain); | 95 | ClassEntry obfInnerClassEntry = obfClassEntry.buildClassEntry(obfClassChain); |
| 96 | ClassEntry obfOuterClassEntry = obfInnerClassEntry.getOutermostClassEntry(); | 96 | ClassEntry obfOuterClassEntry = obfInnerClassEntry.getOuterClassEntry(); |
| 97 | 97 | ||
| 98 | // here's what the JVM spec says about the InnerClasses attribute | 98 | // here's what the JVM spec says about the InnerClasses attribute |
| 99 | // append(inner, parent, 0 if anonymous else simple name, flags); | 99 | // 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 { | |||
| 180 | } | 180 | } |
| 181 | } | 181 | } |
| 182 | 182 | ||
| 183 | m_outer = EntryFactory.getClassEntry(c).getOutermostClassName(); | 183 | m_outer = EntryFactory.getClassEntry(c).getOuterClassName(); |
| 184 | } | 184 | } |
| 185 | 185 | ||
| 186 | private void addReference(EntryReference<? extends Entry,BehaviorEntry> reference) { | 186 | private void addReference(EntryReference<? extends Entry,BehaviorEntry> 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 { | |||
| 103 | @Override | 103 | @Override |
| 104 | public void run() { | 104 | public void run() { |
| 105 | 105 | ||
| 106 | // get the outermost class | ||
| 107 | ClassEntry outermostClassEntry = classEntry; | ||
| 108 | while (outermostClassEntry.isInnerClass()) { | ||
| 109 | outermostClassEntry = outermostClassEntry.getOutermostClassEntry(); | ||
| 110 | } | ||
| 111 | |||
| 112 | // decompile it | 106 | // decompile it |
| 113 | CompilationUnit sourceTree = deobfuscator.getSourceTree(outermostClassEntry.getName()); | 107 | CompilationUnit sourceTree = deobfuscator.getSourceTree(classEntry.getOutermostClassName()); |
| 114 | String source = deobfuscator.getSource(sourceTree); | 108 | String source = deobfuscator.getSource(sourceTree); |
| 115 | setCode(source); | 109 | setCode(source); |
| 116 | m_sourceIndex = deobfuscator.getSourceIndex(sourceTree, source, ignoreBadTokens); | 110 | 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 { | |||
| 105 | 105 | ||
| 106 | public String getOutermostClassName() { | 106 | public String getOutermostClassName() { |
| 107 | if (isInnerClass()) { | 107 | if (isInnerClass()) { |
| 108 | return m_name.substring(0, m_name.lastIndexOf('$')); | 108 | return m_name.substring(0, m_name.indexOf('$')); |
| 109 | } | 109 | } |
| 110 | return m_name; | 110 | return m_name; |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | public String getInnermostClassName() { | 113 | public ClassEntry getOutermostClassEntry() { |
| 114 | return new ClassEntry(getOutermostClassName()); | ||
| 115 | } | ||
| 116 | |||
| 117 | public String getOuterClassName() { | ||
| 114 | if (!isInnerClass()) { | 118 | if (!isInnerClass()) { |
| 115 | throw new Error("This is not an inner class!"); | 119 | throw new Error("This is not an inner class!"); |
| 116 | } | 120 | } |
| 117 | return m_name.substring(m_name.lastIndexOf('$') + 1); | 121 | return m_name.substring(0, m_name.lastIndexOf('$')); |
| 118 | } | 122 | } |
| 119 | 123 | ||
| 120 | public ClassEntry getOutermostClassEntry() { | 124 | public ClassEntry getOuterClassEntry() { |
| 121 | return new ClassEntry(getOutermostClassName()); | 125 | return new ClassEntry(getOuterClassName()); |
| 126 | } | ||
| 127 | |||
| 128 | public String getInnermostClassName() { | ||
| 129 | if (!isInnerClass()) { | ||
| 130 | throw new Error("This is not an inner class!"); | ||
| 131 | } | ||
| 132 | return m_name.substring(m_name.lastIndexOf('$') + 1); | ||
| 122 | } | 133 | } |
| 123 | 134 | ||
| 124 | public boolean isInDefaultPackage() { | 135 | public boolean isInDefaultPackage() { |