From 8ec1ffe8b78463fc56b01b6dec13614130878feb Mon Sep 17 00:00:00 2001 From: Thog Date: Sun, 14 Aug 2016 21:41:07 +0200 Subject: Propagate arguments remapping to children classes TODO: support support not identical behavior (constructors) --- src/main/java/cuchaz/enigma/Constants.java | 2 +- .../java/cuchaz/enigma/mapping/Translator.java | 31 +++++++++++++--------- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/main/java/cuchaz/enigma/Constants.java b/src/main/java/cuchaz/enigma/Constants.java index c6a58259..25fe1065 100644 --- a/src/main/java/cuchaz/enigma/Constants.java +++ b/src/main/java/cuchaz/enigma/Constants.java @@ -12,7 +12,7 @@ package cuchaz.enigma; public class Constants { public static final String NAME = "Enigma"; - public static final String VERSION = "0.2 - Beta"; + public static final String VERSION = "0.11.0 (Chorus Fork)"; public static final String URL = "http://www.cuchazinteractive.com/enigma"; public static final int MiB = 1024 * 1024; // 1 mebibyte public static final int KiB = 1024; // 1 kebibyte diff --git a/src/main/java/cuchaz/enigma/mapping/Translator.java b/src/main/java/cuchaz/enigma/mapping/Translator.java index de48c9a1..125e03f4 100644 --- a/src/main/java/cuchaz/enigma/mapping/Translator.java +++ b/src/main/java/cuchaz/enigma/mapping/Translator.java @@ -203,22 +203,29 @@ public class Translator { throw new Error("Wrong entry type!"); } + // TODO: support not identical behavior (specific to constructor) public String translate(ArgumentEntry in) { - // look for the class - ClassMapping classMapping = findClassMapping(in.getClassEntry()); - if (classMapping != null) { + // look for identical behavior in superclasses + ClassEntry entry = this.index.resolveEntryClass(in, true); - // look for the method - MethodMapping methodMapping = this.direction.choose( - classMapping.getMethodByObf(in.getMethodName(), in.getMethodSignature()), - classMapping.getMethodByDeobf(in.getMethodName(), translateSignature(in.getMethodSignature())) - ); - if (methodMapping != null) { - return this.direction.choose( - methodMapping.getDeobfArgumentName(in.getIndex()), - methodMapping.getObfArgumentName(in.getIndex()) + if (entry != null) + { + // look for the class + ClassMapping classMapping = findClassMapping(entry); + if (classMapping != null) { + + // look for the method + MethodMapping methodMapping = this.direction.choose( + classMapping.getMethodByObf(in.getMethodName(), in.getMethodSignature()), + classMapping.getMethodByDeobf(in.getMethodName(), translateSignature(in.getMethodSignature())) ); + if (methodMapping != null) { + return this.direction.choose( + methodMapping.getDeobfArgumentName(in.getIndex()), + methodMapping.getObfArgumentName(in.getIndex()) + ); + } } } return null; -- cgit v1.2.3