From f08b1bdf9a37c4c70beac6772d8c69131bf1d606 Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Wed, 17 Nov 2021 11:38:00 +0000 Subject: Don't drop none root method mappings that have args/local mappings. (#434) --- .../translation/mapping/MappingsChecker.java | 23 +++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java index 392b1a67..33247fa6 100644 --- a/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java +++ b/enigma/src/main/java/cuchaz/enigma/translation/mapping/MappingsChecker.java @@ -67,8 +67,29 @@ public class MappingsChecker { if (!index.getEntryIndex().hasEntry(entry)) { return true; } + + if (entry instanceof LocalVariableEntry localVariableEntry) { + // Drop local variables only if the method entry is to be dropped + return shouldDropEntry(localVariableEntry.getParent()); + } + Collection> resolvedEntries = index.getEntryResolver().resolveEntry(entry, ResolutionStrategy.RESOLVE_ROOT); - return !resolvedEntries.contains(entry); + + if (resolvedEntries.isEmpty()) { + // Entry doesn't exist at all, drop it. + return true; + } else if (resolvedEntries.contains(entry)) { + // Entry is the root, don't drop it. + return false; + } + + if (entry instanceof MethodEntry && mappings.getChildren(entry).size() > 0) { + // Method entry has parameter names, keep it even though it's not the root. + return false; + } + + // Entry is not the root, and is not a method with params + return true; } public static class Dropped { -- cgit v1.2.3