From f803eaa313307faffb0f80668cee71388345103a Mon Sep 17 00:00:00 2001 From: Matt Date: Tue, 7 Jan 2025 00:48:07 -0500 Subject: [PATCH] More engima parsing fallbacks --- .../mapping/format/EnigmaMappings.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/recaf-core/src/main/java/software/coley/recaf/services/mapping/format/EnigmaMappings.java b/recaf-core/src/main/java/software/coley/recaf/services/mapping/format/EnigmaMappings.java index 683712fa1..76c484947 100644 --- a/recaf-core/src/main/java/software/coley/recaf/services/mapping/format/EnigmaMappings.java +++ b/recaf-core/src/main/java/software/coley/recaf/services/mapping/format/EnigmaMappings.java @@ -15,6 +15,8 @@ /** * Enigma mappings file implementation. + *

+ * Specification: enigma_mappings * * @author Matt Coley */ @@ -71,12 +73,17 @@ public IntermediateMappings parse(@Nonnull String mappingText) { break; case "FIELD": // Check if no longer within inner-class scope - if (strIndent < currentClass.size()) { + if (strIndent < currentClass.size()) currentClass.pop(); - } + // Parse field if (currentClass.empty()) throw new IllegalArgumentException(FAIL + "could not map field, no class context"); + + // Skip if there aren't enough arguments to pull the necessary items + if (args.length < 4) + continue; + String currentField = removeNonePackage(args[1]); String renamedField = removeNonePackage(args[2]); String currentFieldDesc = removeNonePackage(args[3]); @@ -84,15 +91,22 @@ public IntermediateMappings parse(@Nonnull String mappingText) { break; case "METHOD": // Check if no longer within inner-class scope - if (strIndent < currentClass.size()) { + if (strIndent < currentClass.size()) currentClass.pop(); - } + // Parse method if (currentClass.empty()) throw new IllegalArgumentException(FAIL + "could not map method, no class context"); + + // Skip if there aren't enough arguments to pull the necessary items + if (args.length < 4) + continue; + + // Skip constructors/initializers String currentMethod = args[1]; - if (currentMethod.equals("")) + if (currentMethod.startsWith("<")) continue; + // Not all methods need to be renamed if they have child arg elements that are renamed if (args.length >= 4) { String renamedMethod = args[2];