summaryrefslogtreecommitdiff
path: root/src/cuchaz/enigma/convert/MappingsConverter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuchaz/enigma/convert/MappingsConverter.java')
-rw-r--r--src/cuchaz/enigma/convert/MappingsConverter.java44
1 files changed, 35 insertions, 9 deletions
diff --git a/src/cuchaz/enigma/convert/MappingsConverter.java b/src/cuchaz/enigma/convert/MappingsConverter.java
index b404e8f..958a17c 100644
--- a/src/cuchaz/enigma/convert/MappingsConverter.java
+++ b/src/cuchaz/enigma/convert/MappingsConverter.java
@@ -27,6 +27,7 @@ import com.google.common.collect.Maps;
27import com.google.common.collect.Multimap; 27import com.google.common.collect.Multimap;
28import com.google.common.collect.Sets; 28import com.google.common.collect.Sets;
29 29
30import cuchaz.enigma.Constants;
30import cuchaz.enigma.Deobfuscator; 31import cuchaz.enigma.Deobfuscator;
31import cuchaz.enigma.analysis.JarIndex; 32import cuchaz.enigma.analysis.JarIndex;
32import cuchaz.enigma.convert.ClassNamer.SidedClassNamer; 33import cuchaz.enigma.convert.ClassNamer.SidedClassNamer;
@@ -208,33 +209,58 @@ public class MappingsConverter {
208 } 209 }
209 210
210 // migrate fields 211 // migrate fields
211 for (FieldMapping fieldMapping : oldClassMapping.fields()) { 212 for (FieldMapping oldFieldMapping : oldClassMapping.fields()) {
212 if (canMigrate(fieldMapping.getObfType(), replacer)) { 213 if (canMigrate(oldFieldMapping.getObfType(), matches)) {
213 newClassMapping.addFieldMapping(new FieldMapping(fieldMapping, replacer)); 214 newClassMapping.addFieldMapping(new FieldMapping(oldFieldMapping, replacer));
215 } else {
216 System.out.println(String.format("Can't map field, dropping: %s.%s %s",
217 oldClassMapping.getDeobfName(),
218 oldFieldMapping.getDeobfName(),
219 oldFieldMapping.getObfType()
220 ));
214 } 221 }
215 } 222 }
216 223
217 // migrate methods 224 // migrate methods
218 for (MethodMapping oldMethodMapping : oldClassMapping.methods()) { 225 for (MethodMapping oldMethodMapping : oldClassMapping.methods()) {
219 if (canMigrate(oldMethodMapping.getObfSignature(), replacer)) { 226 if (canMigrate(oldMethodMapping.getObfSignature(), matches)) {
220 newClassMapping.addMethodMapping(new MethodMapping(oldMethodMapping, replacer)); 227 newClassMapping.addMethodMapping(new MethodMapping(oldMethodMapping, replacer));
228 } else {
229 System.out.println(String.format("Can't map method, dropping: %s.%s %s",
230 oldClassMapping.getDeobfName(),
231 oldMethodMapping.getDeobfName(),
232 oldMethodMapping.getObfSignature()
233 ));
221 } 234 }
222 } 235 }
223 236
224 return newClassMapping; 237 return newClassMapping;
225 } 238 }
226 239
227 private static boolean canMigrate(Signature obfSignature, ClassNameReplacer replacer) { 240 private static boolean canMigrate(Signature oldObfSignature, ClassMatches classMatches) {
228 for (Type type : obfSignature.types()) { 241 for (Type oldObfType : oldObfSignature.types()) {
229 if (!canMigrate(type, replacer)) { 242 if (!canMigrate(oldObfType, classMatches)) {
230 return false; 243 return false;
231 } 244 }
232 } 245 }
233 return true; 246 return true;
234 } 247 }
235 248
236 private static boolean canMigrate(Type type, ClassNameReplacer replacer) { 249 private static boolean canMigrate(Type oldObfType, ClassMatches classMatches) {
237 return !type.hasClass() || replacer.replace(type.getClassEntry().getClassName()) != null; 250
251 // non classes can be migrated
252 if (!oldObfType.hasClass()) {
253 return true;
254 }
255
256 // non obfuscated classes can be migrated
257 ClassEntry classEntry = oldObfType.getClassEntry();
258 if (!classEntry.getPackageName().equals(Constants.NonePackage)) {
259 return true;
260 }
261
262 // obfuscated classes with mappings can be migrated
263 return classMatches.getUniqueMatches().containsKey(classEntry);
238 } 264 }
239 265
240 public static void convertMappings(Mappings mappings, BiMap<ClassEntry,ClassEntry> changes) { 266 public static void convertMappings(Mappings mappings, BiMap<ClassEntry,ClassEntry> changes) {