From 72bdd3caa5bc21e4830e764eaf804bd42cedf23e Mon Sep 17 00:00:00 2001 From: Thog Date: Thu, 27 Oct 2016 19:28:10 +0200 Subject: Rework setFieldName to only check name in the actual class mapping and mothers classes mappings (Fix #51) --- .../java/cuchaz/enigma/mapping/MappingsRenamer.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java') diff --git a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java index 5c299e3..4e812b1 100644 --- a/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java +++ b/src/main/java/cuchaz/enigma/mapping/MappingsRenamer.java @@ -90,8 +90,23 @@ public class MappingsRenamer { public void setFieldName(FieldEntry obf, String deobfName) { deobfName = NameValidator.validateFieldName(deobfName); FieldEntry targetEntry = new FieldEntry(obf.getClassEntry(), deobfName, obf.getType()); - if (m_mappings.containsDeobfField(obf.getClassEntry(), deobfName, obf.getType()) || m_index.containsObfField(targetEntry)) { - throw new IllegalNameException(deobfName, "There is already a field with that name"); + ClassEntry definedClass = null; + if (m_mappings.containsDeobfField(obf.getClassEntry(), deobfName) || m_index.containsEntryWithSameName(targetEntry)) + definedClass = obf.getClassEntry(); + else { + for (ClassEntry ancestorEntry : this.m_index.getTranslationIndex().getAncestry(obf.getClassEntry())) { + if (m_mappings.containsDeobfField(ancestorEntry, deobfName) || m_index.containsEntryWithSameName(targetEntry.cloneToNewClass(ancestorEntry))) { + definedClass = ancestorEntry; + break; + } + } + } + + if (definedClass != null) { + String className = m_mappings.getTranslator(TranslationDirection.Deobfuscating, m_index.getTranslationIndex()).translateClass(definedClass.getClassName()); + if (className == null) + className = definedClass.getClassName(); + throw new IllegalNameException(deobfName, "There is already a field with that name in " + className); } ClassMapping classMapping = getOrCreateClassMapping(obf.getClassEntry()); -- cgit v1.2.3