summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/bytecode
diff options
context:
space:
mode:
authorGravatar jeff2015-03-16 12:29:17 -0400
committerGravatar jeff2015-03-16 12:29:17 -0400
commitc133e05b786ff5357931842581571c046f958c74 (patch)
tree9fc998ac7b85828f3b57f04600244c6a79b2b2e8 /src/cuchaz/enigma/bytecode
parentAdded tag v0.9 beta for changeset 856528c00d1c (diff)
downloadenigma-fork-c133e05b786ff5357931842581571c046f958c74.tar.gz
enigma-fork-c133e05b786ff5357931842581571c046f958c74.tar.xz
enigma-fork-c133e05b786ff5357931842581571c046f958c74.zip
fix a zillion issues with inner classes
Diffstat (limited to 'src/cuchaz/enigma/bytecode')
-rw-r--r--src/cuchaz/enigma/bytecode/ClassRenamer.java2
-rw-r--r--src/cuchaz/enigma/bytecode/ClassTranslator.java17
-rw-r--r--src/cuchaz/enigma/bytecode/InnerClassWriter.java4
3 files changed, 13 insertions, 10 deletions
diff --git a/src/cuchaz/enigma/bytecode/ClassRenamer.java b/src/cuchaz/enigma/bytecode/ClassRenamer.java
index a5fea92..e9cdea3 100644
--- a/src/cuchaz/enigma/bytecode/ClassRenamer.java
+++ b/src/cuchaz/enigma/bytecode/ClassRenamer.java
@@ -43,7 +43,7 @@ public class ClassRenamer {
43 for (int i = 0; i < attr.tableLength(); i++) { 43 for (int i = 0; i < attr.tableLength(); i++) {
44 ClassEntry classEntry = new ClassEntry(Descriptor.toJvmName(attr.innerClass(i))); 44 ClassEntry classEntry = new ClassEntry(Descriptor.toJvmName(attr.innerClass(i)));
45 if (attr.innerNameIndex(i) != 0) { 45 if (attr.innerNameIndex(i) != 0) {
46 attr.setInnerNameIndex(i, constants.addUtf8Info(classEntry.getInnerClassName())); 46 attr.setInnerNameIndex(i, constants.addUtf8Info(classEntry.getInnermostClassName()));
47 } 47 }
48 48
49 /* DEBUG 49 /* DEBUG
diff --git a/src/cuchaz/enigma/bytecode/ClassTranslator.java b/src/cuchaz/enigma/bytecode/ClassTranslator.java
index 4167731..94ab2c4 100644
--- a/src/cuchaz/enigma/bytecode/ClassTranslator.java
+++ b/src/cuchaz/enigma/bytecode/ClassTranslator.java
@@ -26,7 +26,6 @@ import cuchaz.enigma.mapping.BehaviorEntry;
26import cuchaz.enigma.mapping.ClassEntry; 26import cuchaz.enigma.mapping.ClassEntry;
27import cuchaz.enigma.mapping.EntryFactory; 27import cuchaz.enigma.mapping.EntryFactory;
28import cuchaz.enigma.mapping.FieldEntry; 28import cuchaz.enigma.mapping.FieldEntry;
29import cuchaz.enigma.mapping.MethodEntry;
30import cuchaz.enigma.mapping.Signature; 29import cuchaz.enigma.mapping.Signature;
31import cuchaz.enigma.mapping.Translator; 30import cuchaz.enigma.mapping.Translator;
32import cuchaz.enigma.mapping.Type; 31import cuchaz.enigma.mapping.Type;
@@ -101,26 +100,30 @@ public class ClassTranslator {
101 } 100 }
102 101
103 // translate the type 102 // translate the type
104 Type translatedType = m_translator.translateType(new Type(field.getFieldInfo().getDescriptor())); 103 Type translatedType = m_translator.translateType(entry.getType());
105 field.getFieldInfo().setDescriptor(translatedType.toString()); 104 field.getFieldInfo().setDescriptor(translatedType.toString());
106 } 105 }
107 106
108 // translate all the methods and constructors 107 // translate all the methods and constructors
109 for (CtBehavior behavior : c.getDeclaredBehaviors()) { 108 for (CtBehavior behavior : c.getDeclaredBehaviors()) {
109
110 BehaviorEntry entry = EntryFactory.getBehaviorEntry(behavior);
111
110 if (behavior instanceof CtMethod) { 112 if (behavior instanceof CtMethod) {
111 CtMethod method = (CtMethod)behavior; 113 CtMethod method = (CtMethod)behavior;
112 114
113 // translate the name 115 // translate the name
114 MethodEntry entry = EntryFactory.getMethodEntry(method);
115 String translatedName = m_translator.translate(entry); 116 String translatedName = m_translator.translate(entry);
116 if (translatedName != null) { 117 if (translatedName != null) {
117 method.setName(translatedName); 118 method.setName(translatedName);
118 } 119 }
119 } 120 }
120 121
121 // translate the type 122 if (entry.getSignature() != null) {
122 Signature translatedSignature = m_translator.translateSignature(new Signature(behavior.getMethodInfo().getDescriptor())); 123 // translate the type
123 behavior.getMethodInfo().setDescriptor(translatedSignature.toString()); 124 Signature translatedSignature = m_translator.translateSignature(entry.getSignature());
125 behavior.getMethodInfo().setDescriptor(translatedSignature.toString());
126 }
124 } 127 }
125 128
126 // translate all the class names referenced in the code 129 // translate all the class names referenced in the code
@@ -137,7 +140,7 @@ public class ClassTranslator {
137 // translate the source file attribute too 140 // translate the source file attribute too
138 ClassEntry deobfClassEntry = map.get(classEntry); 141 ClassEntry deobfClassEntry = map.get(classEntry);
139 if (deobfClassEntry != null) { 142 if (deobfClassEntry != null) {
140 String sourceFile = Descriptor.toJvmName(deobfClassEntry.getOuterClassName()) + ".java"; 143 String sourceFile = Descriptor.toJvmName(deobfClassEntry.getOutermostClassName()) + ".java";
141 c.getClassFile().addAttribute(new SourceFileAttribute(constants, sourceFile)); 144 c.getClassFile().addAttribute(new SourceFileAttribute(constants, sourceFile));
142 } 145 }
143 } 146 }
diff --git a/src/cuchaz/enigma/bytecode/InnerClassWriter.java b/src/cuchaz/enigma/bytecode/InnerClassWriter.java
index dd21a78..976028d 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.getOuterClassEntry(); 96 ClassEntry obfOuterClassEntry = obfInnerClassEntry.getOutermostClassEntry();
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);
@@ -105,7 +105,7 @@ public class InnerClassWriter {
105 int innerClassNameIndex = 0; 105 int innerClassNameIndex = 0;
106 int accessFlags = 0; 106 int accessFlags = 0;
107 if (!m_index.isAnonymousClass(obfClassEntry)) { 107 if (!m_index.isAnonymousClass(obfClassEntry)) {
108 innerClassNameIndex = constPool.addUtf8Info(obfInnerClassEntry.getInnerClassName()); 108 innerClassNameIndex = constPool.addUtf8Info(obfInnerClassEntry.getInnermostClassName());
109 } 109 }
110 110
111 attr.append(innerClassIndex, parentClassIndex, innerClassNameIndex, accessFlags); 111 attr.append(innerClassIndex, parentClassIndex, innerClassNameIndex, accessFlags);