From 9d7a3eef8f2efea57cfdc293229ac7d7854cb58b Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Fri, 7 Oct 2022 10:28:53 +0100 Subject: [PATCH] Fix crash. More small fixes. --- .../ifaceinject/InterfaceInjectionProcessor.java | 8 +++++++- .../fabricmc/loom/util/gradle/SourceSetHelper.java | 1 + .../loom/util/service/BuildSharedServiceManager.java | 4 ++++ .../loom/util/service/SharedServiceManager.java | 11 ++++++----- .../loom/test/benchmark/FabricAPIBenchmark.groovy | 2 +- 5 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/configuration/ifaceinject/InterfaceInjectionProcessor.java b/src/main/java/net/fabricmc/loom/configuration/ifaceinject/InterfaceInjectionProcessor.java index 9a28819c..15ea74c8 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ifaceinject/InterfaceInjectionProcessor.java +++ b/src/main/java/net/fabricmc/loom/configuration/ifaceinject/InterfaceInjectionProcessor.java @@ -258,7 +258,13 @@ public class InterfaceInjectionProcessor implements JarProcessor, GenerateSource * Reads the injected interfaces contained in a mod jar, or returns empty if there is none. */ public static List fromModJar(Path modJarPath) { - return fromFabricModJson(FabricModJsonFactory.createFromZip(modJarPath)); + FabricModJson fabricModJson = FabricModJsonFactory.createFromZipNullable(modJarPath); + + if (fabricModJson == null) { + return Collections.emptyList(); + } + + return fromFabricModJson(fabricModJson); } public static List fromFabricModJson(FabricModJson fabricModJson) { diff --git a/src/main/java/net/fabricmc/loom/util/gradle/SourceSetHelper.java b/src/main/java/net/fabricmc/loom/util/gradle/SourceSetHelper.java index 50c811bd..2bdbf248 100644 --- a/src/main/java/net/fabricmc/loom/util/gradle/SourceSetHelper.java +++ b/src/main/java/net/fabricmc/loom/util/gradle/SourceSetHelper.java @@ -32,6 +32,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Objects; import java.util.Set; import javax.xml.xpath.XPath; diff --git a/src/main/java/net/fabricmc/loom/util/service/BuildSharedServiceManager.java b/src/main/java/net/fabricmc/loom/util/service/BuildSharedServiceManager.java index bde78bc3..6575611d 100644 --- a/src/main/java/net/fabricmc/loom/util/service/BuildSharedServiceManager.java +++ b/src/main/java/net/fabricmc/loom/util/service/BuildSharedServiceManager.java @@ -57,6 +57,10 @@ public abstract class BuildSharedServiceManager implements BuildService sharedServiceMap = new ConcurrentHashMap<>(); + private final Map sharedServiceMap = new HashMap<>(); private boolean shutdown = false; @@ -58,6 +58,7 @@ public abstract class SharedServiceManager { S sharedService = (S) sharedServiceMap.get(id); if (sharedService == null) { + LOGGER.debug("Creating service for {}", id); sharedService = function.get(); sharedServiceMap.put(id, sharedService); } @@ -85,14 +86,14 @@ public abstract class SharedServiceManager { sharedServiceMap.clear(); + // This is required to ensure that mercury releases all of the file handles. + System.gc(); + if (!exceptionList.isEmpty()) { // Done to try and close all the services. RuntimeException exception = new RuntimeException("Failed to close all shared services"); exceptionList.forEach(exception::addSuppressed); throw exception; } - - // This is required to ensure that mercury releases all of the file handles. - System.gc(); } } diff --git a/src/test/groovy/net/fabricmc/loom/test/benchmark/FabricAPIBenchmark.groovy b/src/test/groovy/net/fabricmc/loom/test/benchmark/FabricAPIBenchmark.groovy index a19b35be..8905380c 100644 --- a/src/test/groovy/net/fabricmc/loom/test/benchmark/FabricAPIBenchmark.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/benchmark/FabricAPIBenchmark.groovy @@ -43,7 +43,7 @@ class FabricAPIBenchmark implements GradleProjectTestTrait { allowExistingRepo: true, repo: "https://github.com/FabricMC/fabric.git", - commit: "71b634e5b7845296b11be3fa6545f4fbfacc017f", + commit: "5f243a8b7849eac4b30cd876a22a127797a1c406", patch: "fabric_api" )