mirror of
https://github.com/architectury/architectury-loom.git
synced 2026-04-02 13:37:45 -05:00
Remap AT method descriptor
This commit is contained in:
@@ -33,9 +33,11 @@ import org.zeroturnaround.zip.transform.StringZipEntryTransformer;
|
||||
import org.zeroturnaround.zip.transform.ZipEntryTransformerEntry;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.StringReader;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.UnaryOperator;
|
||||
import java.util.zip.ZipEntry;
|
||||
|
||||
/**
|
||||
@@ -59,7 +61,7 @@ public final class AtRemapper {
|
||||
continue;
|
||||
}
|
||||
|
||||
String[] parts = line.split(" ");
|
||||
String[] parts = line.split("\\s+");
|
||||
if (parts.length < 2) {
|
||||
logger.warn("Invalid AT Line: " + line);
|
||||
output.add(i, line);
|
||||
@@ -70,6 +72,16 @@ public final class AtRemapper {
|
||||
mappings.getClasses(),
|
||||
def -> def.getName("srg").equals(name)
|
||||
).map(def -> def.getName("named")).orElse(name).replace('/', '.');
|
||||
if (parts.length >= 3) {
|
||||
if (parts[2].contains("(")) {
|
||||
parts[2] = parts[2].substring(0, parts[2].indexOf('(')) + remapDescriptor(parts[2].substring(parts[2].indexOf('(')), s -> {
|
||||
return CollectionUtil.find(
|
||||
mappings.getClasses(),
|
||||
def -> def.getName("srg").equals(s)
|
||||
).map(def -> def.getName("named")).orElse(s);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
output.add(i, String.join(" ", parts));
|
||||
}
|
||||
@@ -78,4 +90,35 @@ public final class AtRemapper {
|
||||
}
|
||||
}))});
|
||||
}
|
||||
|
||||
private static String remapDescriptor(String original, UnaryOperator<String> classMappings) {
|
||||
try {
|
||||
StringReader reader = new StringReader(original);
|
||||
StringBuilder result = new StringBuilder();
|
||||
boolean insideClassName = false;
|
||||
StringBuilder className = new StringBuilder();
|
||||
while (true) {
|
||||
int c = reader.read();
|
||||
if (c == -1) {
|
||||
break;
|
||||
}
|
||||
if ((char) c == ';') {
|
||||
insideClassName = false;
|
||||
result.append(classMappings.apply(className.toString()));
|
||||
}
|
||||
if (insideClassName) {
|
||||
className.append((char) c);
|
||||
} else {
|
||||
result.append((char) c);
|
||||
}
|
||||
if (!insideClassName && (char) c == 'L') {
|
||||
insideClassName = true;
|
||||
className.setLength(0);
|
||||
}
|
||||
}
|
||||
return result.toString();
|
||||
} catch (IOException e) {
|
||||
throw new AssertionError(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user