summaryrefslogtreecommitdiff
path: root/src/main/java/cuchaz/enigma/bytecode
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/cuchaz/enigma/bytecode')
-rw-r--r--src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java19
1 files changed, 7 insertions, 12 deletions
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
index 82a1263..a6c7552 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
+++ b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
@@ -86,12 +86,7 @@ public class TranslationMethodVisitor extends MethodVisitor {
86 86
87 String translatedSignature = translator.getTranslatedSignature(Signature.createTypedSignature(signature)).toString(); 87 String translatedSignature = translator.getTranslatedSignature(Signature.createTypedSignature(signature)).toString();
88 88
89 // If we're not static, "this" is bound to index 0 89 int offset = methodEntry.getVariableOffset(ownerEntry);
90 int offset = methodEntry.getAccess().isStatic() ? 0 : 1;
91 if (ownerEntry.getAccess().isEnum() && methodEntry.getName().startsWith("<")) {
92 // Enum constructors have an implicit "name" and "ordinal" parameter as well as "this"
93 offset = 3;
94 }
95 90
96 int offsetIndex = index - offset; 91 int offsetIndex = index - offset;
97 if (offsetIndex >= 0) { 92 if (offsetIndex >= 0) {
@@ -101,8 +96,8 @@ public class TranslationMethodVisitor extends MethodVisitor {
101 96
102 // TODO: Better name inference 97 // TODO: Better name inference
103 if (translatedName.equals(entry.getName())) { 98 if (translatedName.equals(entry.getName())) {
104 String prefix = offsetIndex < methodEntry.getDesc().getArgumentDescs().size() ? "a" : "v"; 99 boolean argument = offsetIndex < methodEntry.getDesc().getArgumentDescs().size();
105 translatedName = inferName(prefix, offsetIndex, translatedEntry.getDesc()); 100 translatedName = inferName(argument, offsetIndex, translatedEntry.getDesc());
106 } 101 }
107 102
108 super.visitLocalVariable(translatedName, translatedEntry.getDesc().toString(), translatedSignature, start, end, index); 103 super.visitLocalVariable(translatedName, translatedEntry.getDesc().toString(), translatedSignature, start, end, index);
@@ -159,7 +154,7 @@ public class TranslationMethodVisitor extends MethodVisitor {
159 LocalVariableEntry translatedEntry = translator.getTranslatedVariable(entry); 154 LocalVariableEntry translatedEntry = translator.getTranslatedVariable(entry);
160 String translatedName = translatedEntry.getName(); 155 String translatedName = translatedEntry.getName();
161 if (translatedName.equals(entry.getName())) { 156 if (translatedName.equals(entry.getName())) {
162 super.visitParameter(inferName("a", index, arguments.get(index)), 0); 157 super.visitParameter(inferName(true, index, arguments.get(index)), 0);
163 } else { 158 } else {
164 super.visitParameter(translatedName, 0); 159 super.visitParameter(translatedName, 0);
165 } 160 }
@@ -168,10 +163,10 @@ public class TranslationMethodVisitor extends MethodVisitor {
168 super.visitEnd(); 163 super.visitEnd();
169 } 164 }
170 165
171 private String inferName(String prefix, int argumentIndex, TypeDescriptor desc) { 166 private String inferName(boolean argument, int argumentIndex, TypeDescriptor desc) {
172 String translatedName; 167 String translatedName;
173 int nameIndex = argumentIndex + 1; 168 int nameIndex = argumentIndex + 1;
174 StringBuilder nameBuilder = new StringBuilder(prefix); 169 StringBuilder nameBuilder = new StringBuilder(argument ? "a" : "v");
175 // Unfortunately each of these have different name getters, so they have different code paths 170 // Unfortunately each of these have different name getters, so they have different code paths
176 if (desc.isPrimitive()) { 171 if (desc.isPrimitive()) {
177 TypeDescriptor.Primitive argCls = desc.getPrimitive(); 172 TypeDescriptor.Primitive argCls = desc.getPrimitive();
@@ -184,7 +179,7 @@ public class TranslationMethodVisitor extends MethodVisitor {
184 typeName = typeName.substring(0, 1).toUpperCase(Locale.ROOT) + typeName.substring(1); 179 typeName = typeName.substring(0, 1).toUpperCase(Locale.ROOT) + typeName.substring(1);
185 nameBuilder.append(typeName); 180 nameBuilder.append(typeName);
186 } 181 }
187 if (methodEntry.getDesc().getArgumentDescs().size() > 1) { 182 if (!argument || methodEntry.getDesc().getArgumentDescs().size() > 1) {
188 nameBuilder.append(nameIndex); 183 nameBuilder.append(nameIndex);
189 } 184 }
190 translatedName = nameBuilder.toString(); 185 translatedName = nameBuilder.toString();