From 98cadeffbf34cdef28e0764c8f742b7b00393cd8 Mon Sep 17 00:00:00 2001 From: Pokechu22 Date: Wed, 24 Jan 2018 22:26:00 -0800 Subject: [PATCH] Ensure all resources are closed Also updates to Java 7 to allow try-with-resources --- pom.xml | 4 +-- .../net/md_5/specialsource/AccessMap.java | 4 ++- src/main/java/net/md_5/specialsource/Jar.java | 2 ++ .../net/md_5/specialsource/JarMapping.java | 8 +++-- .../net/md_5/specialsource/SpecialSource.java | 34 +++++++++++-------- 5 files changed, 33 insertions(+), 19 deletions(-) diff --git a/pom.xml b/pom.xml index 10b1e9e..7441b44 100644 --- a/pom.xml +++ b/pom.xml @@ -36,8 +36,8 @@ - 1.6 - 1.6 + 1.7 + 1.7 UTF-8 diff --git a/src/main/java/net/md_5/specialsource/AccessMap.java b/src/main/java/net/md_5/specialsource/AccessMap.java index 6f43ae7..fc9e0d2 100644 --- a/src/main/java/net/md_5/specialsource/AccessMap.java +++ b/src/main/java/net/md_5/specialsource/AccessMap.java @@ -90,7 +90,9 @@ public class AccessMap { } public void loadAccessTransformer(File file) throws IOException { - loadAccessTransformer(new BufferedReader(new FileReader(file))); + try (BufferedReader reader = new BufferedReader(new FileReader(file))) { + loadAccessTransformer(reader); + } } /** diff --git a/src/main/java/net/md_5/specialsource/Jar.java b/src/main/java/net/md_5/specialsource/Jar.java index 52f3ea8..37b207a 100644 --- a/src/main/java/net/md_5/specialsource/Jar.java +++ b/src/main/java/net/md_5/specialsource/Jar.java @@ -92,6 +92,7 @@ public class Jar implements Closeable { * @param name The name of the resource * @return true Whether a resource with the given name exists */ + @SuppressWarnings("resource") // closed when the this Jar is closed public boolean containsResource(String name) { JarFile jarFile = jarForResource.get(name); return jarFile != null && jarFile.getEntry(name) != null; @@ -104,6 +105,7 @@ public class Jar implements Closeable { * @return * @throws IOException */ + @SuppressWarnings("resource") // closed when the this Jar is closed public InputStream getResource(String name) throws IOException { JarFile jarFile = jarForResource.get(name); if (jarFile == null) { diff --git a/src/main/java/net/md_5/specialsource/JarMapping.java b/src/main/java/net/md_5/specialsource/JarMapping.java index 7fbd896..5e8dc41 100644 --- a/src/main/java/net/md_5/specialsource/JarMapping.java +++ b/src/main/java/net/md_5/specialsource/JarMapping.java @@ -191,7 +191,9 @@ public class JarMapping { } 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"); } - 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); + } } } diff --git a/src/main/java/net/md_5/specialsource/SpecialSource.java b/src/main/java/net/md_5/specialsource/SpecialSource.java index 1f5fcde..7df6c07 100644 --- a/src/main/java/net/md_5/specialsource/SpecialSource.java +++ b/src/main/java/net/md_5/specialsource/SpecialSource.java @@ -155,6 +155,13 @@ public class SpecialSource { 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; verbose = !options.has("quiet"); kill_source = options.has("kill-source"); @@ -174,11 +181,13 @@ public class SpecialSource { FileLocator.useCache = !options.has("force-redownload"); + Jar jar1 = null, jar2 = null, jar3 = null; + if (options.has("first-jar") && options.has("second-jar")) { // Generate mappings from two otherwise-identical jars log("Reading jars"); - Jar jar1 = Jar.init(FileLocator.getFile((String) options.valueOf("first-jar"))); - Jar jar2 = Jar.init(FileLocator.getFile((String) options.valueOf("second-jar"))); + jar1 = Jar.init(FileLocator.getFile((String) options.valueOf("first-jar"))); + jar2 = Jar.init(FileLocator.getFile((String) options.valueOf("second-jar"))); log("Creating jar compare"); JarComparer visitor1 = new JarComparer(jar1); @@ -229,10 +238,11 @@ public class SpecialSource { if (options.has("read-inheritance")) { InheritanceMap inheritanceMap = new InheritanceMap(); - BufferedReader reader = new BufferedReader(new FileReader(FileLocator.getFile((String) options.valueOf("read-inheritance")))); - BiMap inverseClassMap = HashBiMap.create(jarMapping.classes).inverse(); - inheritanceMap.load(reader, inverseClassMap); + File inheritanceFile = FileLocator.getFile((String) options.valueOf("read-inheritance")); + try (BufferedReader reader = new BufferedReader(new FileReader(inheritanceFile))) { + inheritanceMap.load(reader, inverseClassMap); + } log("Loaded inheritance map for " + inheritanceMap.size() + " classes"); inheritanceProviders.add(inheritanceMap); @@ -246,14 +256,7 @@ public class SpecialSource { accessMapper = new RemapperProcessor(null, jarMapping, access); } - if (options.has("in-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; - } - + if (options.has("in-jar") && options.has("out-jar")) { @SuppressWarnings("unchecked") List filenames = (List) options.valuesOf("in-jar"); List files = new ArrayList(); @@ -261,7 +264,7 @@ public class SpecialSource { files.add(FileLocator.getFile(filename)); } - Jar jar3 = Jar.init(files); + jar3 = Jar.init(files); 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) {