Add 'compact srg' output format
This is a simpler mapping format, somewhat easier to parse, and without the redundant information in the original .srg file format.
This commit is contained in:
parent
a11c2c4698
commit
1b15d3b29f
42
src/main/java/net/md_5/specialsource/CompactSrgWriter.java
Normal file
42
src/main/java/net/md_5/specialsource/CompactSrgWriter.java
Normal file
@ -0,0 +1,42 @@
|
||||
package net.md_5.specialsource;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.PrintWriter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class CompactSrgWriter implements ISrgWriter {
|
||||
private PrintWriter out;
|
||||
private List<String> lines;
|
||||
|
||||
public CompactSrgWriter(PrintWriter out) {
|
||||
this.out = out;
|
||||
this.lines = new ArrayList<String>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addClassMap(String oldClass, String newClass) {
|
||||
lines.add(oldClass+" "+newClass);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addFieldMap(Ownable oldField, Ownable newField) {
|
||||
lines.add(oldField.owner+" "+oldField.name+" "+newField.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMethodMap(Ownable oldMethod, Ownable newMethod) {
|
||||
lines.add(oldMethod.owner+" "+oldMethod.name+" "+oldMethod.descriptor+" "+newMethod.name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write() throws IOException {
|
||||
Collections.sort(lines);
|
||||
|
||||
for (String s : lines) {
|
||||
out.println(s);
|
||||
}
|
||||
out.close();
|
||||
}
|
||||
}
|
14
src/main/java/net/md_5/specialsource/ISrgWriter.java
Normal file
14
src/main/java/net/md_5/specialsource/ISrgWriter.java
Normal file
@ -0,0 +1,14 @@
|
||||
package net.md_5.specialsource;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
public interface ISrgWriter {
|
||||
void addClassMap(String oldClass, String newClass);
|
||||
|
||||
void addFieldMap(Ownable oldField, Ownable newField);
|
||||
|
||||
void addMethodMap(Ownable oldMethod, Ownable newMethod);
|
||||
|
||||
void write() throws IOException;
|
||||
}
|
@ -42,10 +42,22 @@ public class JarMapping {
|
||||
public final Map<String, String> methods = new HashMap<String, String>();
|
||||
|
||||
|
||||
public JarMapping(JarComparer oldJar, JarComparer newJar, File logfile) throws IOException {
|
||||
public JarMapping(JarComparer oldJar, JarComparer newJar, File logfile, boolean compact) throws IOException {
|
||||
SpecialSource.validate(oldJar, newJar);
|
||||
|
||||
SrgWriter srgWriter = new SrgWriter();
|
||||
PrintWriter out;
|
||||
if (logfile == null) {
|
||||
out = new PrintWriter(System.out);
|
||||
} else {
|
||||
out = new PrintWriter(logfile);
|
||||
}
|
||||
|
||||
ISrgWriter srgWriter;
|
||||
if (compact) {
|
||||
srgWriter = new CompactSrgWriter(out);
|
||||
} else {
|
||||
srgWriter = new SrgWriter(out, oldJar.jar.file.getName(), newJar.jar.file.getName());
|
||||
}
|
||||
|
||||
for (int i = 0; i < oldJar.classes.size(); i++) {
|
||||
String oldClass = oldJar.classes.get(i);
|
||||
@ -81,6 +93,6 @@ public class JarMapping {
|
||||
}
|
||||
}
|
||||
|
||||
srgWriter.write(logfile, oldJar.jar.file.getName(), newJar.jar.file.getName());
|
||||
srgWriter.write();
|
||||
}
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ public class SpecialSource {
|
||||
.withRequiredArg()
|
||||
.ofType(File.class);
|
||||
|
||||
acceptsAll(asList("s", "srg-out"), "Mapping srg output")
|
||||
acceptsAll(asList("s", "srg-out"), "Mapping file output")
|
||||
.withRequiredArg()
|
||||
.ofType(File.class);
|
||||
|
||||
@ -67,6 +67,7 @@ public class SpecialSource {
|
||||
.ofType(File.class);
|
||||
|
||||
acceptsAll(asList("q", "quiet"), "Quiet mode");
|
||||
acceptsAll(asList("c", "compact"), "Output mapping file in compact format");
|
||||
}
|
||||
};
|
||||
|
||||
@ -104,7 +105,7 @@ public class SpecialSource {
|
||||
JarComparer visitor2 = new JarComparer(jar2);
|
||||
visit(new Pair<Jar>(jar1, jar2), new Pair<JarComparer>(visitor1, visitor2), new Pair<String>(jar1.main, jar2.main));
|
||||
|
||||
JarMapping jarMapping = new JarMapping(visitor1, visitor2, (File)options.valueOf("srg-out"));
|
||||
JarMapping jarMapping = new JarMapping(visitor1, visitor2, (File)options.valueOf("srg-out"), options.has("c"));
|
||||
|
||||
if (options.has("in-jar")) {
|
||||
log("Remapping final jar");
|
||||
|
@ -9,7 +9,7 @@ import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
public class SrgWriter {
|
||||
public class SrgWriter implements ISrgWriter {
|
||||
private static final String HEADER = ""
|
||||
+ "# THESE ARE AUTOMATICALLY GENERATED MAPPINGS BETWEEN {0} and {1}\n"
|
||||
+ "# THEY WERE GENERATED ON {2} USING Special Source (c) md_5 2012.\n"
|
||||
@ -17,8 +17,16 @@ public class SrgWriter {
|
||||
|
||||
private List<String> lines;
|
||||
|
||||
public SrgWriter() {
|
||||
private PrintWriter out;
|
||||
private String oldJarName;
|
||||
private String newJarName;
|
||||
|
||||
public SrgWriter(PrintWriter out, String oldJarName, String newJarName) {
|
||||
this.lines = new ArrayList<String>();
|
||||
|
||||
this.out = out;
|
||||
this.oldJarName = oldJarName;
|
||||
this.newJarName = newJarName;
|
||||
}
|
||||
|
||||
public void addClassMap(String oldClass, String newClass) {
|
||||
@ -33,14 +41,7 @@ public class SrgWriter {
|
||||
lines.add("MD: " + oldMethod.owner + "/" + oldMethod.name + " " + oldMethod.descriptor + " " + newMethod.owner + "/" + newMethod.name + " " + newMethod.descriptor);
|
||||
}
|
||||
|
||||
public void write(File logfile, String oldJarName, String newJarName) throws IOException {
|
||||
PrintWriter out;
|
||||
if (logfile == null) {
|
||||
out = new PrintWriter(System.out);
|
||||
} else {
|
||||
out = new PrintWriter(logfile);
|
||||
}
|
||||
|
||||
public void write() throws IOException {
|
||||
Collections.sort(lines);
|
||||
// No try with resources for us!
|
||||
try {
|
||||
|
Loading…
Reference in New Issue
Block a user