summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle2
-rw-r--r--src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java1
-rw-r--r--src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java12
-rw-r--r--src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java10
-rw-r--r--src/main/java/cuchaz/enigma/mapping/TypeDescriptor.java14
-rw-r--r--src/main/java/cuchaz/enigma/mapping/entry/MethodDefEntry.java10
6 files changed, 24 insertions, 25 deletions
diff --git a/build.gradle b/build.gradle
index 22e24a18..c9054256 100644
--- a/build.gradle
+++ b/build.gradle
@@ -19,7 +19,7 @@ apply plugin: 'com.github.johnrengelman.shadow'
19apply plugin: 'maven' 19apply plugin: 'maven'
20 20
21group = 'cuchaz' 21group = 'cuchaz'
22version = '0.12.0' 22version = '0.12.1'
23 23
24def ENV = System.getenv() 24def ENV = System.getenv()
25if (ENV.BUILD_NUMBER) { 25if (ENV.BUILD_NUMBER) {
diff --git a/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java b/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
index 723fffed..4b47c5f0 100644
--- a/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
+++ b/src/main/java/cuchaz/enigma/analysis/MethodImplementationsTreeNode.java
@@ -76,7 +76,6 @@ public class MethodImplementationsTreeNode extends DefaultMutableTreeNode {
76 } 76 }
77 77
78 public void load(JarIndex index) { 78 public void load(JarIndex index) {
79
80 // get all method implementations 79 // get all method implementations
81 List<MethodImplementationsTreeNode> nodes = Lists.newArrayList(); 80 List<MethodImplementationsTreeNode> nodes = Lists.newArrayList();
82 for (String implementingClassName : index.getImplementingClasses(this.entry.getClassName())) { 81 for (String implementingClassName : index.getImplementingClasses(this.entry.getClassName())) {
diff --git a/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java b/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java
index d88eae3a..45f7a0ef 100644
--- a/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java
+++ b/src/main/java/cuchaz/enigma/analysis/SourceIndexMethodVisitor.java
@@ -33,7 +33,6 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor {
33 33
34 private Multimap<String, Identifier> unmatchedIdentifier = HashMultimap.create(); 34 private Multimap<String, Identifier> unmatchedIdentifier = HashMultimap.create();
35 private Map<String, Entry> identifierEntryCache = new HashMap<>(); 35 private Map<String, Entry> identifierEntryCache = new HashMap<>();
36 private int argumentPosition;
37 36
38 public SourceIndexMethodVisitor(ReferencedEntryPool entryPool, ClassDefEntry ownerEntry, MethodDefEntry methodEntry) { 37 public SourceIndexMethodVisitor(ReferencedEntryPool entryPool, ClassDefEntry ownerEntry, MethodDefEntry methodEntry) {
39 super(entryPool); 38 super(entryPool);
@@ -41,10 +40,6 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor {
41 this.entryFactory = new ProcyonEntryFactory(entryPool); 40 this.entryFactory = new ProcyonEntryFactory(entryPool);
42 this.ownerEntry = ownerEntry; 41 this.ownerEntry = ownerEntry;
43 this.methodEntry = methodEntry; 42 this.methodEntry = methodEntry;
44 this.argumentPosition = 0;
45 if (ownerEntry.isInnerClass() && methodEntry.isConstructor() && !ownerEntry.getAccess().isStatic()) {
46 this.argumentPosition++;
47 }
48 } 43 }
49 44
50 @Override 45 @Override
@@ -112,9 +107,8 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor {
112 107
113 @Override 108 @Override
114 public Void visitParameterDeclaration(ParameterDeclaration node, SourceIndex index) { 109 public Void visitParameterDeclaration(ParameterDeclaration node, SourceIndex index) {
115 // DO NOT USE def.getSlot()! Doubleword slots increase by 2, not by 1 110 ParameterDefinition def = node.getUserData(Keys.PARAMETER_DEFINITION);
116 111 int parameterIndex = def.getSlot();
117 int parameterIndex = (argumentPosition++);
118 112
119 if (parameterIndex >= 0) { 113 if (parameterIndex >= 0) {
120 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, parameterIndex, node.getName()); 114 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, parameterIndex, node.getName());
@@ -188,7 +182,7 @@ public class SourceIndexMethodVisitor extends SourceIndexVisitor {
188 if (variable != null) { 182 if (variable != null) {
189 VariableDefinition originalVariable = variable.getOriginalVariable(); 183 VariableDefinition originalVariable = variable.getOriginalVariable();
190 if (originalVariable != null) { 184 if (originalVariable != null) {
191 int variableIndex = (argumentPosition++); 185 int variableIndex = originalVariable.getSlot();
192 if (variableIndex >= 0) { 186 if (variableIndex >= 0) {
193 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, variableIndex, initializer.getName()); 187 LocalVariableEntry localVariableEntry = new LocalVariableEntry(methodEntry, variableIndex, initializer.getName());
194 identifierEntryCache.put(identifier.getName(), localVariableEntry); 188 identifierEntryCache.put(identifier.getName(), localVariableEntry);
diff --git a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
index 0141b45e..48854701 100644
--- a/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
+++ b/src/main/java/cuchaz/enigma/bytecode/translators/TranslationMethodVisitor.java
@@ -85,10 +85,8 @@ public class TranslationMethodVisitor extends MethodVisitor {
85 hasParameterMeta = true; 85 hasParameterMeta = true;
86 86
87 String translatedSignature = translator.getTranslatedSignature(Signature.createTypedSignature(signature)).toString(); 87 String translatedSignature = translator.getTranslatedSignature(Signature.createTypedSignature(signature)).toString();
88 int offsetIndex = index;
88 89
89 int offset = methodEntry.getVariableOffset(ownerEntry);
90
91 int offsetIndex = index - offset;
92 if (offsetIndex >= 0) { 90 if (offsetIndex >= 0) {
93 LocalVariableDefEntry entry = new LocalVariableDefEntry(methodEntry, offsetIndex, name, new TypeDescriptor(desc)); 91 LocalVariableDefEntry entry = new LocalVariableDefEntry(methodEntry, offsetIndex, name, new TypeDescriptor(desc));
94 LocalVariableDefEntry translatedEntry = translator.getTranslatedVariableDef(entry); 92 LocalVariableDefEntry translatedEntry = translator.getTranslatedVariableDef(entry);
@@ -149,8 +147,10 @@ public class TranslationMethodVisitor extends MethodVisitor {
149 // If we didn't receive any parameter metadata, generate it 147 // If we didn't receive any parameter metadata, generate it
150 if (!hasParameterMeta) { 148 if (!hasParameterMeta) {
151 List<TypeDescriptor> arguments = methodEntry.getDesc().getArgumentDescs(); 149 List<TypeDescriptor> arguments = methodEntry.getDesc().getArgumentDescs();
150 int offset = 0;
151
152 for (int index = 0; index < arguments.size(); index++) { 152 for (int index = 0; index < arguments.size(); index++) {
153 LocalVariableEntry entry = new LocalVariableEntry(methodEntry, index, ""); 153 LocalVariableEntry entry = new LocalVariableEntry(methodEntry, offset, "");
154 LocalVariableEntry translatedEntry = translator.getTranslatedVariable(entry); 154 LocalVariableEntry translatedEntry = translator.getTranslatedVariable(entry);
155 String translatedName = translatedEntry.getName(); 155 String translatedName = translatedEntry.getName();
156 if (translatedName.equals(entry.getName())) { 156 if (translatedName.equals(entry.getName())) {
@@ -158,6 +158,8 @@ public class TranslationMethodVisitor extends MethodVisitor {
158 } else { 158 } else {
159 super.visitParameter(translatedName, 0); 159 super.visitParameter(translatedName, 0);
160 } 160 }
161
162 offset += arguments.get(index).getSize();
161 } 163 }
162 } 164 }
163 super.visitEnd(); 165 super.visitEnd();
diff --git a/src/main/java/cuchaz/enigma/mapping/TypeDescriptor.java b/src/main/java/cuchaz/enigma/mapping/TypeDescriptor.java
index b7b1255a..3c8cc746 100644
--- a/src/main/java/cuchaz/enigma/mapping/TypeDescriptor.java
+++ b/src/main/java/cuchaz/enigma/mapping/TypeDescriptor.java
@@ -208,6 +208,20 @@ public class TypeDescriptor {
208 return buf.toString(); 208 return buf.toString();
209 } 209 }
210 210
211 public int getSize() {
212 switch (desc.charAt(0)) {
213 case 'J':
214 case 'D':
215 if (desc.length() == 1) {
216 return 2;
217 } else {
218 return 1;
219 }
220 default:
221 return 1;
222 }
223 }
224
211 public enum Primitive { 225 public enum Primitive {
212 Byte('B'), 226 Byte('B'),
213 Character('C'), 227 Character('C'),
diff --git a/src/main/java/cuchaz/enigma/mapping/entry/MethodDefEntry.java b/src/main/java/cuchaz/enigma/mapping/entry/MethodDefEntry.java
index bb7c85eb..ec3af694 100644
--- a/src/main/java/cuchaz/enigma/mapping/entry/MethodDefEntry.java
+++ b/src/main/java/cuchaz/enigma/mapping/entry/MethodDefEntry.java
@@ -37,16 +37,6 @@ public class MethodDefEntry extends MethodEntry {
37 return signature; 37 return signature;
38 } 38 }
39 39
40 public int getVariableOffset(ClassDefEntry ownerEntry) {
41 // Enum constructors have an implicit "name" and "ordinal" parameter as well as "this"
42 if (ownerEntry.getAccess().isEnum() && getName().startsWith("<")) {
43 return 3;
44 } else {
45 // If we're not static, "this" is bound to index 0
46 return getAccess().isStatic() ? 0 : 1;
47 }
48 }
49
50 @Override 40 @Override
51 public MethodDefEntry updateOwnership(ClassEntry classEntry) { 41 public MethodDefEntry updateOwnership(ClassEntry classEntry) {
52 return new MethodDefEntry(new ClassEntry(classEntry.getName()), name, descriptor, signature, access); 42 return new MethodDefEntry(new ClassEntry(classEntry.getName()), name, descriptor, signature, access);