Add remapping from csrg input file
This commit is contained in:
parent
642612e1c3
commit
5437eb4c9e
33
src/main/java/net/md_5/specialsource/CompactSrgReader.java
Normal file
33
src/main/java/net/md_5/specialsource/CompactSrgReader.java
Normal file
@ -0,0 +1,33 @@
|
||||
package net.md_5.specialsource;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.io.IOException;
|
||||
|
||||
public class CompactSrgReader {
|
||||
public CompactSrgReader(File file, JarMapping jarMapping) throws IOException {
|
||||
BufferedReader reader = new BufferedReader(new FileReader(file));
|
||||
|
||||
String line;
|
||||
while((line = reader.readLine()) != null) {
|
||||
String[] tokens = line.split(" ");
|
||||
if (tokens.length == 2) {
|
||||
String oldClassName = tokens[0];
|
||||
String newClassName = tokens[1];
|
||||
jarMapping.classes.put(oldClassName, newClassName);
|
||||
} else if (tokens.length == 3) {
|
||||
String oldClassName = tokens[0];
|
||||
String oldFieldName = tokens[1];
|
||||
String newFieldName = tokens[2];
|
||||
jarMapping.fields.put(oldClassName + "/" + oldFieldName, newFieldName);
|
||||
} else if (tokens.length == 4) {
|
||||
String oldClassName = tokens[0];
|
||||
String oldMethodName = tokens[1];
|
||||
String oldMethodDescriptor = tokens[2];
|
||||
String newMethodName = tokens[3];
|
||||
jarMapping.methods.put(oldClassName + "/" + oldMethodName + " " + oldMethodDescriptor, newMethodName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -41,7 +41,23 @@ public class JarMapping {
|
||||
public final Map<String, String> fields = new HashMap<String, String>();
|
||||
public final Map<String, String> methods = new HashMap<String, String>();
|
||||
|
||||
/**
|
||||
* Load a mapping given a .csrg file
|
||||
* @param file
|
||||
* @throws IOException
|
||||
*/
|
||||
public JarMapping(File file) throws IOException {
|
||||
new CompactSrgReader(file, this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a mapping given an original jar and renamed jar
|
||||
* @param oldJar Original jar
|
||||
* @param newJar Renamed jar
|
||||
* @param logfile Optional .srg file to output mappings to
|
||||
* @param compact If true, generate .csrg logfile instead
|
||||
* @throws IOException
|
||||
*/
|
||||
public JarMapping(JarComparer oldJar, JarComparer newJar, File logfile, boolean compact) throws IOException {
|
||||
SpecialSource.validate(oldJar, newJar);
|
||||
|
||||
|
@ -58,7 +58,11 @@ public class SpecialSource {
|
||||
.withRequiredArg()
|
||||
.ofType(File.class);
|
||||
|
||||
acceptsAll(asList("i", "remap-jar"), "Input jar to remap")
|
||||
acceptsAll(asList("m", "srg-in"), "Mapping file input")
|
||||
.withRequiredArg()
|
||||
.ofType(File.class);
|
||||
|
||||
acceptsAll(asList("i", "in-jar"), "Input jar to remap")
|
||||
.withRequiredArg()
|
||||
.ofType(File.class);
|
||||
|
||||
@ -78,9 +82,9 @@ public class SpecialSource {
|
||||
return;
|
||||
}
|
||||
|
||||
if (options == null || options.has("?") || !options.has("a") || !options.has("b")) {
|
||||
if (options == null || options.has("?")) {
|
||||
try {
|
||||
parser.printHelpOn(System.out);
|
||||
parser.printHelpOn(System.err);
|
||||
return;
|
||||
} catch (IOException ex) {
|
||||
System.out.println(ex.getLocalizedMessage());
|
||||
@ -96,20 +100,40 @@ public class SpecialSource {
|
||||
return;
|
||||
}*/
|
||||
|
||||
log("Reading jars");
|
||||
Jar jar1 = Jar.init((File)options.valueOf("first-jar"));
|
||||
Jar jar2 = Jar.init((File)options.valueOf("second-jar"));
|
||||
JarMapping jarMapping;
|
||||
|
||||
log("Creating jar compare");
|
||||
JarComparer visitor1 = new JarComparer(jar1);
|
||||
JarComparer visitor2 = new JarComparer(jar2);
|
||||
visit(new Pair<Jar>(jar1, jar2), new Pair<JarComparer>(visitor1, visitor2), new Pair<String>(jar1.main, jar2.main));
|
||||
if (options.has("first-jar") && options.has("second-jar")) {
|
||||
// Generate mappings from two otherwise-identical jars
|
||||
log("Reading jars");
|
||||
Jar jar1 = Jar.init((File)options.valueOf("first-jar"));
|
||||
Jar jar2 = Jar.init((File)options.valueOf("second-jar"));
|
||||
|
||||
JarMapping jarMapping = new JarMapping(visitor1, visitor2, (File)options.valueOf("srg-out"), options.has("c"));
|
||||
log("Creating jar compare");
|
||||
JarComparer visitor1 = new JarComparer(jar1);
|
||||
JarComparer visitor2 = new JarComparer(jar2);
|
||||
visit(new Pair<Jar>(jar1, jar2), new Pair<JarComparer>(visitor1, visitor2), new Pair<String>(jar1.main, jar2.main));
|
||||
|
||||
jarMapping = new JarMapping(visitor1, visitor2, (File)options.valueOf("srg-out"), options.has("compact"));
|
||||
} else if (options.has("srg-in")) {
|
||||
// Load mappings
|
||||
log("Loading mappings");
|
||||
jarMapping = new JarMapping((File)options.valueOf("srg-in"));
|
||||
} else {
|
||||
System.err.println("No mappings given, first-jar/second-jar or srg-in required");
|
||||
parser.printHelpOn(System.err);
|
||||
return;
|
||||
}
|
||||
log(jarMapping.classes.size()+" classes, "+jarMapping.fields.size()+" fields, "+jarMapping.methods.size()+" methods");
|
||||
|
||||
if (options.has("in-jar")) {
|
||||
if (!options.has("out-jar")) {
|
||||
System.err.println("No output jar given, in-jar requires in-jar");
|
||||
parser.printHelpOn(System.err);
|
||||
return;
|
||||
}
|
||||
|
||||
log("Remapping final jar");
|
||||
Jar jar3 = Jar.init((File)options.valueOf("remap-jar"));
|
||||
Jar jar3 = Jar.init((File)options.valueOf("in-jar"));
|
||||
JarRemapper.renameJar(jar3, (File)options.valueOf("out-jar"), jarMapping);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user