summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar jeff2015-03-16 12:52:09 -0400
committerGravatar jeff2015-03-16 12:52:09 -0400
commit563c5e08e3d61bfd39402a94e78bbaaf75623b04 (patch)
tree34e72c074fe35f62e46f395c01c586096ae4fece /src
parentfix a zillion issues with inner classes (diff)
downloadenigma-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.java2
-rw-r--r--src/cuchaz/enigma/bytecode/InnerClassWriter.java2
-rw-r--r--src/cuchaz/enigma/convert/ClassIdentity.java2
-rw-r--r--src/cuchaz/enigma/gui/CodeReader.java8
-rw-r--r--src/cuchaz/enigma/mapping/ClassEntry.java21
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() {