Ensure all resources are closed

Also updates to Java 7 to allow try-with-resources
This commit is contained in:
Pokechu22 2018-01-24 22:26:00 -08:00 committed by md-5
parent b342037b99
commit 98cadeffbf
5 changed files with 33 additions and 19 deletions

View File

@ -36,8 +36,8 @@
</issueManagement> </issueManagement>
<properties> <properties>
<maven.compiler.source>1.6</maven.compiler.source> <maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target> <maven.compiler.target>1.7</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>

View File

@ -90,7 +90,9 @@ public class AccessMap {
} }
public void loadAccessTransformer(File file) throws IOException { public void loadAccessTransformer(File file) throws IOException {
loadAccessTransformer(new BufferedReader(new FileReader(file))); try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
loadAccessTransformer(reader);
}
} }
/** /**

View File

@ -92,6 +92,7 @@ public class Jar implements Closeable {
* @param name The name of the resource * @param name The name of the resource
* @return true Whether a resource with the given name exists * @return true Whether a resource with the given name exists
*/ */
@SuppressWarnings("resource") // closed when the this Jar is closed
public boolean containsResource(String name) { public boolean containsResource(String name) {
JarFile jarFile = jarForResource.get(name); JarFile jarFile = jarForResource.get(name);
return jarFile != null && jarFile.getEntry(name) != null; return jarFile != null && jarFile.getEntry(name) != null;
@ -104,6 +105,7 @@ public class Jar implements Closeable {
* @return * @return
* @throws IOException * @throws IOException
*/ */
@SuppressWarnings("resource") // closed when the this Jar is closed
public InputStream getResource(String name) throws IOException { public InputStream getResource(String name) throws IOException {
JarFile jarFile = jarForResource.get(name); JarFile jarFile = jarForResource.get(name);
if (jarFile == null) { if (jarFile == null) {

View File

@ -191,7 +191,9 @@ public class JarMapping {
} }
public void loadMappings(File file) throws IOException { public void loadMappings(File file) throws IOException {
loadMappings(new BufferedReader(new FileReader(file)), null, null, false); try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
loadMappings(reader, null, null, false);
}
} }
/** /**
@ -233,7 +235,9 @@ public class JarMapping {
throw new IllegalArgumentException("loadMappings(" + filename + "): numeric only supported on directories, not files"); throw new IllegalArgumentException("loadMappings(" + filename + "): numeric only supported on directories, not files");
} }
loadMappings(new BufferedReader(new FileReader(FileLocator.getFile(filename))), inputTransformer, outputTransformer, reverse); try (BufferedReader reader = new BufferedReader(new FileReader(FileLocator.getFile(filename)))) {
loadMappings(reader, inputTransformer, outputTransformer, reverse);
}
} }
} }

View File

@ -155,6 +155,13 @@ public class SpecialSource {
return; return;
} }
if (options.has("in-jar") && !options.has("out-jar")) {
System.err.println("No output jar given, in-jar requires out-jar");
parser.printHelpOn(System.err);
System.exit(-1);
return;
}
JarMapping jarMapping; JarMapping jarMapping;
verbose = !options.has("quiet"); verbose = !options.has("quiet");
kill_source = options.has("kill-source"); kill_source = options.has("kill-source");
@ -174,11 +181,13 @@ public class SpecialSource {
FileLocator.useCache = !options.has("force-redownload"); FileLocator.useCache = !options.has("force-redownload");
Jar jar1 = null, jar2 = null, jar3 = null;
if (options.has("first-jar") && options.has("second-jar")) { if (options.has("first-jar") && options.has("second-jar")) {
// Generate mappings from two otherwise-identical jars // Generate mappings from two otherwise-identical jars
log("Reading jars"); log("Reading jars");
Jar jar1 = Jar.init(FileLocator.getFile((String) options.valueOf("first-jar"))); jar1 = Jar.init(FileLocator.getFile((String) options.valueOf("first-jar")));
Jar jar2 = Jar.init(FileLocator.getFile((String) options.valueOf("second-jar"))); jar2 = Jar.init(FileLocator.getFile((String) options.valueOf("second-jar")));
log("Creating jar compare"); log("Creating jar compare");
JarComparer visitor1 = new JarComparer(jar1); JarComparer visitor1 = new JarComparer(jar1);
@ -229,10 +238,11 @@ public class SpecialSource {
if (options.has("read-inheritance")) { if (options.has("read-inheritance")) {
InheritanceMap inheritanceMap = new InheritanceMap(); InheritanceMap inheritanceMap = new InheritanceMap();
BufferedReader reader = new BufferedReader(new FileReader(FileLocator.getFile((String) options.valueOf("read-inheritance"))));
BiMap<String, String> inverseClassMap = HashBiMap.create(jarMapping.classes).inverse(); BiMap<String, String> inverseClassMap = HashBiMap.create(jarMapping.classes).inverse();
File inheritanceFile = FileLocator.getFile((String) options.valueOf("read-inheritance"));
try (BufferedReader reader = new BufferedReader(new FileReader(inheritanceFile))) {
inheritanceMap.load(reader, inverseClassMap); inheritanceMap.load(reader, inverseClassMap);
}
log("Loaded inheritance map for " + inheritanceMap.size() + " classes"); log("Loaded inheritance map for " + inheritanceMap.size() + " classes");
inheritanceProviders.add(inheritanceMap); inheritanceProviders.add(inheritanceMap);
@ -246,14 +256,7 @@ public class SpecialSource {
accessMapper = new RemapperProcessor(null, jarMapping, access); accessMapper = new RemapperProcessor(null, jarMapping, access);
} }
if (options.has("in-jar")) { if (options.has("in-jar") && options.has("out-jar")) {
if (!options.has("out-jar")) {
System.err.println("No output jar given, in-jar requires out-jar");
parser.printHelpOn(System.err);
System.exit(-1);
return;
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
List<String> filenames = (List<String>) options.valuesOf("in-jar"); List<String> filenames = (List<String>) options.valuesOf("in-jar");
List<File> files = new ArrayList<File>(); List<File> files = new ArrayList<File>();
@ -261,7 +264,7 @@ public class SpecialSource {
files.add(FileLocator.getFile(filename)); files.add(FileLocator.getFile(filename));
} }
Jar jar3 = Jar.init(files); jar3 = Jar.init(files);
inheritanceProviders.add(new JarProvider(jar3)); inheritanceProviders.add(new JarProvider(jar3));
@ -287,6 +290,9 @@ public class SpecialSource {
} }
} }
} }
if (jar1 != null) jar1.close();
if (jar2 != null) jar2.close();
if (jar3 != null) jar3.close();
} }
public static void log(String message) { public static void log(String message) {