fix try...catch segments not closing files in some cases

This commit is contained in:
asie 2018-11-12 00:17:44 +01:00
parent cffd468b68
commit dbaba22207
4 changed files with 43 additions and 17 deletions

View file

@ -64,17 +64,24 @@ public class MapJarsTiny {
.withMappings(TinyUtils.createTinyMappingProvider(mappings, fromM, toM))
.build();
OutputConsumerPath outputConsumer = null;
try {
OutputConsumerPath outputConsumer = new OutputConsumerPath(output);
outputConsumer = new OutputConsumerPath(output);
outputConsumer.addNonClassFiles(input);
remapper.read(input);
remapper.read(classpath);
remapper.apply(input, outputConsumer);
outputConsumer.finish();
remapper.finish();
} catch (Exception e) {
throw new RuntimeException("Failed to remap JAR", e);
} finally {
if (outputConsumer != null) {
try {
outputConsumer.finish();
} catch (Exception e) {
e.printStackTrace();
}
}
remapper.finish();
throw new RuntimeException("Failed to remap minecraft to " + toM, e);
}
}
}

View file

@ -80,11 +80,9 @@ public final class MixinRefmapHelper {
ZipUtil.iterate(output, (stream, entry) -> {
if (!entry.isDirectory() && entry.getName().endsWith(".json") && !entry.getName().contains("/") && !entry.getName().contains("\\")) {
// JSON file in root directory
InputStreamReader inputStreamReader = new InputStreamReader(stream);
try {
InputStreamReader inputStreamReader = new InputStreamReader(stream);
JsonObject json = GSON.fromJson(inputStreamReader, JsonObject.class);
inputStreamReader.close();
stream.close();
if (json != null && json.has("mixins") && json.get("mixins").isJsonArray()) {
if (!onlyWithoutRefmap || !json.has("refmap")) {
mixinFilename.add(entry.getName());
@ -92,6 +90,9 @@ public final class MixinRefmapHelper {
}
} catch (Exception e) {
// ...
} finally {
inputStreamReader.close();
stream.close();
}
}
});
@ -105,16 +106,17 @@ public final class MixinRefmapHelper {
ZipUtil.iterate(output, (stream, entry) -> {
if (!entry.isDirectory() && entry.getName().endsWith(".json") && !entry.getName().contains("/") && !entry.getName().contains("\\")) {
// JSON file in root directory
InputStreamReader inputStreamReader = new InputStreamReader(stream);
try {
InputStreamReader inputStreamReader = new InputStreamReader(stream);
JsonObject json = GSON.fromJson(inputStreamReader, JsonObject.class);
inputStreamReader.close();
stream.close();
if (json != null && json.has("refmap")) {
mixinRefmapFilenames.add(json.get("refmap").getAsString());
}
} catch (Exception e) {
// ...
} finally {
inputStreamReader.close();
stream.close();
}
}
});

View file

@ -99,8 +99,9 @@ public class ModProcessor {
.withMappings(TinyUtils.createTinyMappingProvider(mappings, fromM, toM))
.build();
OutputConsumerPath outputConsumer = null;
try {
OutputConsumerPath outputConsumer = new OutputConsumerPath(Paths.get(output.getAbsolutePath()));
outputConsumer = new OutputConsumerPath(Paths.get(output.getAbsolutePath()));
outputConsumer.addNonClassFiles(input.toPath());
if (!modCompileFiles.contains(input)) {
remapper.read(input.toPath());
@ -112,9 +113,18 @@ public class ModProcessor {
outputConsumer.finish();
remapper.finish();
} catch (Exception e){
remapper.finish();
throw new RuntimeException("Failed to remap JAR to " + toM, e);
} finally {
if (outputConsumer != null) {
try {
outputConsumer.finish();
} catch (Exception e) {
e.printStackTrace();
}
}
remapper.finish();
}
if(!output.exists()){
throw new RuntimeException("Failed to remap JAR to " + toM + " file not found: " + output.getAbsolutePath());
}

View file

@ -79,17 +79,24 @@ public class ModRemapper {
TinyRemapper remapper = remapperBuilder.build();
OutputConsumerPath outputConsumer = null;
try {
OutputConsumerPath outputConsumer = new OutputConsumerPath(modJarOutputPath);
outputConsumer = new OutputConsumerPath(modJarOutputPath);
outputConsumer.addNonClassFiles(modJarPath);
remapper.read(classpath);
remapper.read(modJarPath);
remapper.apply(modJarPath, outputConsumer);
outputConsumer.finish();
remapper.finish();
} catch (Exception e){
remapper.finish();
} catch (Exception e) {
throw new RuntimeException("Failed to remap JAR", e);
} finally {
if (outputConsumer != null) {
try {
outputConsumer.finish();
} catch (Exception e) {
e.printStackTrace();
}
}
remapper.finish();
}
if (!modJarOutput.exists()){