summaryrefslogtreecommitdiff
path: root/enigma
diff options
context:
space:
mode:
Diffstat (limited to 'enigma')
-rw-r--r--enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingIoConverter.java76
1 files changed, 56 insertions, 20 deletions
diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingIoConverter.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingIoConverter.java
index 171f252..05d862a 100644
--- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingIoConverter.java
+++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/serde/MappingIoConverter.java
@@ -11,6 +11,7 @@ import net.fabricmc.mappingio.tree.MappingTree.ClassMapping;
11import net.fabricmc.mappingio.tree.MappingTree.FieldMapping; 11import net.fabricmc.mappingio.tree.MappingTree.FieldMapping;
12import net.fabricmc.mappingio.tree.MappingTree.MethodArgMapping; 12import net.fabricmc.mappingio.tree.MappingTree.MethodArgMapping;
13import net.fabricmc.mappingio.tree.MappingTree.MethodMapping; 13import net.fabricmc.mappingio.tree.MappingTree.MethodMapping;
14import net.fabricmc.mappingio.tree.MappingTree.MethodVarMapping;
14 15
15import cuchaz.enigma.ProgressListener; 16import cuchaz.enigma.ProgressListener;
16import cuchaz.enigma.translation.mapping.EntryMap; 17import cuchaz.enigma.translation.mapping.EntryMap;
@@ -116,28 +117,50 @@ public class MappingIoConverter {
116 for (EntryTreeNode<EntryMapping> child : methodNode.getChildNodes()) { 117 for (EntryTreeNode<EntryMapping> child : methodNode.getChildNodes()) {
117 Entry<?> entry = child.getEntry(); 118 Entry<?> entry = child.getEntry();
118 119
119 if (entry instanceof LocalVariableEntry) { 120 if (entry instanceof LocalVariableEntry local) {
120 writeMethodArg(child, mappingTree); 121 if (local.isArgument()) {
122 writeMethodArg(child, mappingTree);
123 } else {
124 writeMethodVar(child, mappingTree);
125 }
121 } 126 }
122 } 127 }
123 } 128 }
124 129
125 private static void writeMethodArg(EntryTreeNode<EntryMapping> methodArgNode, MemoryMappingTree mappingTree) { 130 private static void writeMethodArg(EntryTreeNode<EntryMapping> argNode, MemoryMappingTree mappingTree) {
126 if (methodArgNode.getValue() == null || methodArgNode.getValue().equals(EntryMapping.DEFAULT)) { 131 if (argNode.getValue() == null || argNode.getValue().equals(EntryMapping.DEFAULT)) {
127 return; // Shortcut 132 return; // Shortcut
128 } 133 }
129 134
130 LocalVariableEntry methodArgEntry = ((LocalVariableEntry) methodArgNode.getEntry()); 135 LocalVariableEntry argEntry = ((LocalVariableEntry) argNode.getEntry());
131 mappingTree.visitMethodArg(-1, methodArgEntry.getIndex(), methodArgEntry.getName()); 136 mappingTree.visitMethodArg(-1, argEntry.getIndex(), argEntry.getName());
132 137
133 EntryMapping methodArgMapping = methodArgNode.getValue(); 138 EntryMapping argMapping = argNode.getValue();
134 139
135 if (methodArgMapping == null) { 140 if (argMapping == null) {
136 methodArgMapping = EntryMapping.DEFAULT; 141 argMapping = EntryMapping.DEFAULT;
137 } 142 }
138 143
139 mappingTree.visitDstName(MappedElementKind.METHOD_ARG, 0, methodArgMapping.targetName()); 144 mappingTree.visitDstName(MappedElementKind.METHOD_ARG, 0, argMapping.targetName());
140 mappingTree.visitComment(MappedElementKind.METHOD_ARG, methodArgMapping.javadoc()); 145 mappingTree.visitComment(MappedElementKind.METHOD_ARG, argMapping.javadoc());
146 }
147
148 private static void writeMethodVar(EntryTreeNode<EntryMapping> varNode, MemoryMappingTree mappingTree) {
149 if (varNode.getValue() == null || varNode.getValue().equals(EntryMapping.DEFAULT)) {
150 return; // Shortcut
151 }
152
153 LocalVariableEntry varEntry = ((LocalVariableEntry) varNode.getEntry());
154 mappingTree.visitMethodVar(-1, varEntry.getIndex(), -1, -1, varEntry.getName());
155
156 EntryMapping varMapping = varNode.getValue();
157
158 if (varMapping == null) {
159 varMapping = EntryMapping.DEFAULT;
160 }
161
162 mappingTree.visitDstName(MappedElementKind.METHOD_VAR, 0, varMapping.targetName());
163 mappingTree.visitComment(MappedElementKind.METHOD_VAR, varMapping.javadoc());
141 } 164 }
142 165
143 public static EntryTree<EntryMapping> fromMappingIo(MemoryMappingTree mappingTree, ProgressListener progress) { 166 public static EntryTree<EntryMapping> fromMappingIo(MemoryMappingTree mappingTree, ProgressListener progress) {
@@ -161,7 +184,7 @@ public class MappingIoConverter {
161 dstName = dstName.substring(dstName.lastIndexOf('$') + 1); 184 dstName = dstName.substring(dstName.lastIndexOf('$') + 1);
162 } 185 }
163 186
164 mappingTree.insert(currentClass, new EntryMapping(dstName)); 187 mappingTree.insert(currentClass, new EntryMapping(dstName, classMapping.getComment()));
165 188
166 for (FieldMapping fieldMapping : classMapping.getFields()) { 189 for (FieldMapping fieldMapping : classMapping.getFields()) {
167 readField(fieldMapping, currentClass, mappingTree); 190 readField(fieldMapping, currentClass, mappingTree);
@@ -174,23 +197,36 @@ public class MappingIoConverter {
174 197
175 private static void readField(FieldMapping fieldMapping, ClassEntry parent, EntryTree<EntryMapping> mappingTree) { 198 private static void readField(FieldMapping fieldMapping, ClassEntry parent, EntryTree<EntryMapping> mappingTree) {
176 mappingTree.insert(new FieldEntry(parent, fieldMapping.getSrcName(), new TypeDescriptor(fieldMapping.getSrcDesc())), 199 mappingTree.insert(new FieldEntry(parent, fieldMapping.getSrcName(), new TypeDescriptor(fieldMapping.getSrcDesc())),
177 new EntryMapping(fieldMapping.getDstName(0))); 200 new EntryMapping(fieldMapping.getDstName(0), fieldMapping.getComment()));
178 } 201 }
179 202
180 private static void readMethod(MethodMapping methodMapping, ClassEntry parent, EntryTree<EntryMapping> mappingTree) { 203 private static void readMethod(MethodMapping methodMapping, ClassEntry parent, EntryTree<EntryMapping> mappingTree) {
181 MethodEntry currentMethod; 204 MethodEntry currentMethod;
182 mappingTree.insert(currentMethod = new MethodEntry(parent, methodMapping.getSrcName(), new MethodDescriptor(methodMapping.getSrcDesc())), 205 mappingTree.insert(currentMethod = new MethodEntry(parent, methodMapping.getSrcName(), new MethodDescriptor(methodMapping.getSrcDesc())),
183 new EntryMapping(methodMapping.getDstName(0))); 206 new EntryMapping(methodMapping.getDstName(0), methodMapping.getComment()));
207
208 for (MethodArgMapping argMapping : methodMapping.getArgs()) {
209 readMethodArg(argMapping, currentMethod, mappingTree);
210 }
184 211
185 for (MethodArgMapping methodArgMapping : methodMapping.getArgs()) { 212 for (MethodVarMapping varMapping : methodMapping.getVars()) {
186 readMethodArg(methodArgMapping, currentMethod, mappingTree); 213 readMethodVar(varMapping, currentMethod, mappingTree);
187 } 214 }
188 } 215 }
189 216
190 private static void readMethodArg(MethodArgMapping methodArgMapping, MethodEntry parent, EntryTree<EntryMapping> mappingTree) { 217 private static void readMethodArg(MethodArgMapping argMapping, MethodEntry parent, EntryTree<EntryMapping> mappingTree) {
191 String methodArgSrcName = methodArgMapping.getSrcName() != null ? methodArgMapping.getSrcName() : ""; 218 String srcName = argMapping.getSrcName() != null ? argMapping.getSrcName() : "";
219
220 mappingTree.insert(
221 new LocalVariableEntry(parent, argMapping.getLvIndex(), srcName, true, null),
222 new EntryMapping(argMapping.getDstName(0), argMapping.getComment()));
223 }
224
225 private static void readMethodVar(MethodVarMapping varMapping, MethodEntry parent, EntryTree<EntryMapping> mappingTree) {
226 String srcName = varMapping.getSrcName() != null ? varMapping.getSrcName() : "";
192 227
193 mappingTree.insert(new LocalVariableEntry(parent, methodArgMapping.getLvIndex(), methodArgSrcName, true, null), 228 mappingTree.insert(
194 new EntryMapping(methodArgMapping.getDstName(0))); 229 new LocalVariableEntry(parent, varMapping.getLvIndex(), srcName, false, null),
230 new EntryMapping(varMapping.getDstName(0), varMapping.getComment()));
195 } 231 }
196} 232}