Skip to content

Commit

Permalink
Add XSrg variant support to SrgMappings
Browse files Browse the repository at this point in the history
  • Loading branch information
Col-E committed Sep 30, 2024
1 parent 78093b8 commit ac6e07c
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,25 +59,61 @@ public IntermediateMappings parse(@Nonnull String mappingText) {
mappings.addClass(obfClass, renamedClass);
}
case "FD:" -> {
// Common format:
// 0 1
// FD obf-owner/obf-name
String obfKey = args[1];
int splitPos = obfKey.lastIndexOf('/');
String obfOwner = obfKey.substring(0, splitPos);
String obfName = obfKey.substring(splitPos + 1);
String renamedKey = args[2];
splitPos = renamedKey.lastIndexOf('/');
String renamedName = renamedKey.substring(splitPos + 1);
mappings.addField(obfOwner, null, obfName, renamedName);

// Handle SRG variants
if (args.length == 5) {
// XSRG format:
// 0 1 2 3 4
// FD obf-owner/obf-name obf-desc clean-owner/clean-name clean-desc
String obfDesc = args[2];
String renamedKey = args[3];
splitPos = renamedKey.lastIndexOf('/');
String renamedName = renamedKey.substring(splitPos + 1);
mappings.addField(obfOwner, obfDesc, obfName, renamedName);
} else {
// SRG format:
// FD obf-owner/obf-name clean-owner/clean-name
String renamedKey = args[2];
splitPos = renamedKey.lastIndexOf('/');
String renamedName = renamedKey.substring(splitPos + 1);
mappings.addField(obfOwner, null, obfName, renamedName);
}
}
case "MD:" -> {
// Common format:
// 0 1 3
// MD obf-owner/obf-name obf-desc
String obfKey = args[1];
int splitPos = obfKey.lastIndexOf('/');
String obfOwner = obfKey.substring(0, splitPos);
String obfName = obfKey.substring(splitPos + 1);
String obfDesc = args[2];
String renamedKey = args[3];
splitPos = renamedKey.lastIndexOf('/');
String renamedName = renamedKey.substring(splitPos + 1);
mappings.addMethod(obfOwner, obfDesc, obfName, renamedName);

// Handle SRG variants
if (args.length == 5) {
// XSRG format:
// 0 1 2 3 4
// MD obf-owner/obf-name obf-desc clean-owner/clean-name clean-desc
String renamedKey = args[3];
splitPos = renamedKey.lastIndexOf('/');
String renamedName = renamedKey.substring(splitPos + 1);
mappings.addMethod(obfOwner, obfDesc, obfName, renamedName);
} else {
// SRG format:
// 0 1 2 3
// MD obf-owner/obf-name obf-desc clean-owner/clean-name
String renamedKey = args[3];
splitPos = renamedKey.lastIndexOf('/');
String renamedName = renamedKey.substring(splitPos + 1);
mappings.addMethod(obfOwner, obfDesc, obfName, renamedName);
}
}
default -> logger.trace("Unknown SRG mappings line type: \"{}\" @line {}", type, line);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,28 @@ void testSrg() {
assertInheritMap(mappings);
}

@Test
void testSrgWithCleanName() {
String mappingsText = """
CL: test/Greetings rename/Hello
FD: test/Greetings/oldField rename/Hello/newField
MD: test/Greetings/say ()V rename/Hello/speak""";
MappingFileFormat format = new SrgMappings();
IntermediateMappings mappings = assertDoesNotThrow(() -> format.parse(mappingsText));
assertInheritMap(mappings);
}

@Test
void testXSrg() {
String mappingsText = """
CL: test/Greetings rename/Hello
FD: test/Greetings/oldField Ljava/lang/String; rename/Hello/newField Ljava/lang/String;
MD: test/Greetings/say ()V rename/Hello/speak""";
MappingFileFormat format = new SrgMappings();
IntermediateMappings mappings = assertDoesNotThrow(() -> format.parse(mappingsText));
assertInheritMap(mappings);
}

@Test
void testSrgPackageMapping() {
String mappingsText = """
Expand Down

0 comments on commit ac6e07c

Please sign in to comment.