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:
Agaricus 2013-01-21 20:47:38 -08:00
parent a11c2c4698
commit 1b15d3b29f
5 changed files with 85 additions and 15 deletions

View 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();
}
}

View 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;
}

View File

@ -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();
}
}

View File

@ -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");

View File

@ -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 {