diff --git a/src/main/java/net/fabricmc/loom/build/mixin/AnnotationProcessorInvoker.java b/src/main/java/net/fabricmc/loom/build/mixin/AnnotationProcessorInvoker.java index 7c10f695..7e3c3815 100644 --- a/src/main/java/net/fabricmc/loom/build/mixin/AnnotationProcessorInvoker.java +++ b/src/main/java/net/fabricmc/loom/build/mixin/AnnotationProcessorInvoker.java @@ -93,7 +93,7 @@ public abstract class AnnotationProcessorInvoker { LoomGradleExtension loom = LoomGradleExtension.get(project); String refmapName = Objects.requireNonNull(MixinExtension.getMixinInformationContainer(sourceSet)).refmapNameProvider().get(); Map args = new HashMap<>() {{ - put(Constants.MixinArguments.IN_MAP_FILE_NAMED_INTERMEDIARY, loom.getMappingsProvider().tinyMappings.toFile().getCanonicalPath()); + put(Constants.MixinArguments.IN_MAP_FILE_NAMED_INTERMEDIARY, loom.getMappingConfiguration().tinyMappings.toFile().getCanonicalPath()); put(Constants.MixinArguments.OUT_MAP_FILE_NAMED_INTERMEDIARY, getMixinMappingsForSourceSet(project, sourceSet).getCanonicalPath()); put(Constants.MixinArguments.OUT_REFMAP_FILE, getRefmapDestination(task, refmapName)); put(Constants.MixinArguments.DEFAULT_OBFUSCATION_ENV, "named:" + loom.getMixin().getRefmapTargetNamespace().get()); @@ -162,6 +162,6 @@ public abstract class AnnotationProcessorInvoker { public static File getMixinMappingsForSourceSet(Project project, SourceSet sourceSet) { final LoomGradleExtension extension = LoomGradleExtension.get(project); - return new File(extension.getFiles().getProjectBuildCache(), "mixin-map-" + extension.getMappingsProvider().mappingsIdentifier() + "." + sourceSet.getName() + ".tiny"); + return new File(extension.getFiles().getProjectBuildCache(), "mixin-map-" + extension.getMappingConfiguration().mappingsIdentifier() + "." + sourceSet.getName() + ".tiny"); } } diff --git a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java index 6e0712bf..49413b90 100644 --- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java @@ -32,8 +32,6 @@ import java.nio.file.Path; import java.util.List; import java.util.function.Consumer; -import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; - import org.gradle.api.NamedDomainObjectProvider; import org.gradle.api.Project; import org.gradle.api.artifacts.Configuration; @@ -54,6 +52,7 @@ import net.fabricmc.loom.configuration.accesswidener.TransitiveAccessWidenerJarP import net.fabricmc.loom.configuration.ifaceinject.InterfaceInjectionProcessor; import net.fabricmc.loom.configuration.processors.MinecraftJarProcessorManager; import net.fabricmc.loom.configuration.processors.ModJavadocProcessor; +import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftJarConfiguration; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftSourceSets; @@ -131,6 +130,8 @@ public final class CompileConfiguration { }); afterEvaluationWithService(project, (serviceManager) -> { + final ConfigContext configContext = new ConfigContextImpl(project, serviceManager, extension); + MinecraftSourceSets.get(project).afterEvaluate(project); final boolean previousRefreshDeps = extension.refreshDeps(); @@ -141,7 +142,7 @@ public final class CompileConfiguration { } try { - setupMinecraft(project, serviceManager); + setupMinecraft(configContext); } catch (Exception e) { throw ExceptionUtil.createDescriptiveWrapper(RuntimeException::new, "Failed to setup Minecraft", e); } @@ -159,7 +160,7 @@ public final class CompileConfiguration { setupMixinAp(project, mixin); } - configureDecompileTasks(project); + configureDecompileTasks(configContext); }); finalizedBy(project, "idea", "genIdeaWorkspace"); @@ -182,23 +183,24 @@ public final class CompileConfiguration { } // This is not thread safe across projects synchronize it here just to be sure, might be possible to move this further down, but for now this will do. - private static synchronized void setupMinecraft(Project project, SharedServiceManager serviceManager) throws Exception { - final LoomGradleExtension extension = LoomGradleExtension.get(project); + private static synchronized void setupMinecraft(ConfigContext configContext) throws Exception { + final Project project = configContext.project(); + final LoomGradleExtension extension = configContext.extension(); final MinecraftJarConfiguration jarConfiguration = extension.getMinecraftJarConfiguration().get(); // Provide the vanilla mc jars -- TODO share across projects. - final MinecraftProvider minecraftProvider = jarConfiguration.getMinecraftProviderFunction().apply(project); + final MinecraftProvider minecraftProvider = jarConfiguration.getMinecraftProviderFunction().apply(configContext); extension.setMinecraftProvider(minecraftProvider); minecraftProvider.provide(); final DependencyInfo mappingsDep = DependencyInfo.create(project, Constants.Configurations.MAPPINGS); - final MappingConfiguration mappingConfiguration = MappingConfiguration.create(project, serviceManager, mappingsDep, minecraftProvider); + final MappingConfiguration mappingConfiguration = MappingConfiguration.create(project, configContext.serviceManager(), mappingsDep, minecraftProvider); extension.setMappingConfiguration(mappingConfiguration); mappingConfiguration.applyToProject(project, mappingsDep); // Provide the remapped mc jars - final IntermediaryMinecraftProvider intermediaryMinecraftProvider = jarConfiguration.getIntermediaryMinecraftProviderBiFunction().apply(project, minecraftProvider); - NamedMinecraftProvider namedMinecraftProvider = jarConfiguration.getNamedMinecraftProviderBiFunction().apply(project, minecraftProvider); + final IntermediaryMinecraftProvider intermediaryMinecraftProvider = jarConfiguration.getIntermediaryMinecraftProviderBiFunction().apply(configContext, minecraftProvider); + NamedMinecraftProvider namedMinecraftProvider = jarConfiguration.getNamedMinecraftProviderBiFunction().apply(configContext, minecraftProvider); registerGameProcessors(project); MinecraftJarProcessorManager minecraftJarProcessorManager = MinecraftJarProcessorManager.create(project); @@ -238,7 +240,9 @@ public final class CompileConfiguration { } } - extension.addMinecraftJarProcessor(ModJavadocProcessor.class, "fabric-loom:mod-javadoc"); + if (extension.getEnableModProvidedJavadoc().get()) { + extension.addMinecraftJarProcessor(ModJavadocProcessor.class, "fabric-loom:mod-javadoc"); + } } private static void setupMixinAp(Project project, MixinExtension mixin) { @@ -269,11 +273,11 @@ public final class CompileConfiguration { } } - private static void configureDecompileTasks(Project project) { - final LoomGradleExtension extension = LoomGradleExtension.get(project); + private static void configureDecompileTasks(ConfigContext configContext) { + final LoomGradleExtension extension = configContext.extension(); extension.getMinecraftJarConfiguration().get().getDecompileConfigurationBiFunction() - .apply(project, extension.getNamedMinecraftProvider()).afterEvaluation(); + .apply(configContext, extension.getNamedMinecraftProvider()).afterEvaluation(); } private static Path getLockFile(Project project) { diff --git a/src/main/java/net/fabricmc/loom/configuration/ConfigContext.java b/src/main/java/net/fabricmc/loom/configuration/ConfigContext.java index 5c9b9898..470ac414 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ConfigContext.java +++ b/src/main/java/net/fabricmc/loom/configuration/ConfigContext.java @@ -1,10 +1,36 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2022 FabricMC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + package net.fabricmc.loom.configuration; -import net.fabricmc.loom.util.service.SharedServiceManager; - import org.gradle.api.Project; +import net.fabricmc.loom.LoomGradleExtension; +import net.fabricmc.loom.util.service.SharedServiceManager; + public interface ConfigContext { Project project(); SharedServiceManager serviceManager(); + LoomGradleExtension extension(); } diff --git a/src/main/java/net/fabricmc/loom/configuration/ConfigContextImpl.java b/src/main/java/net/fabricmc/loom/configuration/ConfigContextImpl.java new file mode 100644 index 00000000..94a4eee4 --- /dev/null +++ b/src/main/java/net/fabricmc/loom/configuration/ConfigContextImpl.java @@ -0,0 +1,33 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2022 FabricMC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package net.fabricmc.loom.configuration; + +import org.gradle.api.Project; + +import net.fabricmc.loom.LoomGradleExtension; +import net.fabricmc.loom.util.service.SharedServiceManager; + +public record ConfigContextImpl(Project project, SharedServiceManager serviceManager, LoomGradleExtension extension) implements ConfigContext { +} diff --git a/src/main/java/net/fabricmc/loom/configuration/accesswidener/TransitiveAccessWidenerJarProcessor.java b/src/main/java/net/fabricmc/loom/configuration/accesswidener/TransitiveAccessWidenerJarProcessor.java index 70715838..3da420b5 100644 --- a/src/main/java/net/fabricmc/loom/configuration/accesswidener/TransitiveAccessWidenerJarProcessor.java +++ b/src/main/java/net/fabricmc/loom/configuration/accesswidener/TransitiveAccessWidenerJarProcessor.java @@ -166,7 +166,12 @@ public class TransitiveAccessWidenerJarProcessor implements JarProcessor { private TinyRemapper createTinyRemapper() { try { - TinyRemapper tinyRemapper = TinyRemapperHelper.getTinyRemapper(project, "intermediary", "named"); + // TODO service manager, via new processor api + if (true) { + throw new UnsupportedOperationException("ToDO"); + } + + TinyRemapper tinyRemapper = TinyRemapperHelper.getTinyRemapper(project, null, "intermediary", "named"); tinyRemapper.readClassPath(TinyRemapperHelper.getMinecraftDependencies(project)); diff --git a/src/main/java/net/fabricmc/loom/configuration/decompile/DecompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/decompile/DecompileConfiguration.java index 645fb5bc..f535d093 100644 --- a/src/main/java/net/fabricmc/loom/configuration/decompile/DecompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/decompile/DecompileConfiguration.java @@ -26,12 +26,12 @@ package net.fabricmc.loom.configuration.decompile; import java.io.File; -import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; - import org.gradle.api.Project; import org.gradle.api.tasks.TaskProvider; import net.fabricmc.loom.LoomGradleExtension; +import net.fabricmc.loom.configuration.ConfigContext; +import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; import net.fabricmc.loom.configuration.providers.minecraft.mapped.MappedMinecraftProvider; import net.fabricmc.loom.task.UnpickJarTask; @@ -41,10 +41,10 @@ public abstract class DecompileConfiguration protected final LoomGradleExtension extension; protected final MappingConfiguration mappingConfiguration; - public DecompileConfiguration(Project project, T minecraftProvider) { - this.project = project; + public DecompileConfiguration(ConfigContext configContext, T minecraftProvider) { + this.project = configContext.project(); this.minecraftProvider = minecraftProvider; - this.extension = LoomGradleExtension.get(project); + this.extension = configContext.extension(); this.mappingConfiguration = extension.getMappingConfiguration(); } diff --git a/src/main/java/net/fabricmc/loom/configuration/decompile/SingleJarDecompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/decompile/SingleJarDecompileConfiguration.java index 07eace63..6fa25b5c 100644 --- a/src/main/java/net/fabricmc/loom/configuration/decompile/SingleJarDecompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/decompile/SingleJarDecompileConfiguration.java @@ -28,16 +28,15 @@ import java.io.File; import java.nio.file.Path; import java.util.List; -import org.gradle.api.Project; - import net.fabricmc.loom.LoomGradleExtension; +import net.fabricmc.loom.configuration.ConfigContext; import net.fabricmc.loom.configuration.providers.minecraft.mapped.MappedMinecraftProvider; import net.fabricmc.loom.task.GenerateSourcesTask; import net.fabricmc.loom.util.Constants; public class SingleJarDecompileConfiguration extends DecompileConfiguration { - public SingleJarDecompileConfiguration(Project project, MappedMinecraftProvider minecraftProvider) { - super(project, minecraftProvider); + public SingleJarDecompileConfiguration(ConfigContext configContext, MappedMinecraftProvider minecraftProvider) { + super(configContext, minecraftProvider); } @Override diff --git a/src/main/java/net/fabricmc/loom/configuration/decompile/SplitDecompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/decompile/SplitDecompileConfiguration.java index 280db04b..0dd69ff2 100644 --- a/src/main/java/net/fabricmc/loom/configuration/decompile/SplitDecompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/decompile/SplitDecompileConfiguration.java @@ -27,19 +27,19 @@ package net.fabricmc.loom.configuration.decompile; import java.io.File; import org.gradle.api.Action; -import org.gradle.api.Project; import org.gradle.api.Task; import org.gradle.api.tasks.TaskProvider; import net.fabricmc.loom.api.decompilers.DecompilerOptions; +import net.fabricmc.loom.configuration.ConfigContext; import net.fabricmc.loom.configuration.providers.minecraft.mapped.MappedMinecraftProvider; import net.fabricmc.loom.task.GenerateSourcesTask; import net.fabricmc.loom.task.UnpickJarTask; import net.fabricmc.loom.util.Constants; public final class SplitDecompileConfiguration extends DecompileConfiguration { - public SplitDecompileConfiguration(Project project, MappedMinecraftProvider.Split minecraftProvider) { - super(project, minecraftProvider); + public SplitDecompileConfiguration(ConfigContext configContext, MappedMinecraftProvider.Split minecraftProvider) { + super(configContext, minecraftProvider); } @Override 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 15ea74c8..e23ebd12 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ifaceinject/InterfaceInjectionProcessor.java +++ b/src/main/java/net/fabricmc/loom/configuration/ifaceinject/InterfaceInjectionProcessor.java @@ -329,7 +329,12 @@ public class InterfaceInjectionProcessor implements JarProcessor, GenerateSource private TinyRemapper createTinyRemapper() { try { - TinyRemapper tinyRemapper = TinyRemapperHelper.getTinyRemapper(project, "intermediary", "named"); + // TODO service manager, via new processor api + if (true) { + throw new UnsupportedOperationException("ToDO"); + } + + TinyRemapper tinyRemapper = TinyRemapperHelper.getTinyRemapper(project, null, "intermediary", "named"); tinyRemapper.readClassPath(TinyRemapperHelper.getMinecraftDependencies(project)); for (Path minecraftJar : extension.getMinecraftJars(MappingsNamespace.INTERMEDIARY)) { diff --git a/src/main/java/net/fabricmc/loom/configuration/processors/ModJavadocProcessor.java b/src/main/java/net/fabricmc/loom/configuration/processors/ModJavadocProcessor.java index cf9cdc4e..7a773e78 100644 --- a/src/main/java/net/fabricmc/loom/configuration/processors/ModJavadocProcessor.java +++ b/src/main/java/net/fabricmc/loom/configuration/processors/ModJavadocProcessor.java @@ -37,12 +37,10 @@ import java.util.List; import javax.inject.Inject; import com.google.gson.JsonElement; -import org.gradle.api.Project; import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; import net.fabricmc.loom.api.processor.MinecraftJarProcessor; import net.fabricmc.loom.api.processor.ProcessorContext; @@ -56,9 +54,6 @@ import net.fabricmc.mappingio.tree.MemoryMappingTree; public abstract class ModJavadocProcessor implements MinecraftJarProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(ModJavadocProcessor.class); - @Inject - public abstract Project getProject(); - private final String name; @Inject @@ -73,12 +68,6 @@ public abstract class ModJavadocProcessor implements MinecraftJarProcessor javadocs = new ArrayList<>(); for (FabricModJson fabricModJson : context.allMods()) { diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingConfiguration.java index aad48764..5cf47775 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingConfiguration.java @@ -116,8 +116,8 @@ public class MappingConfiguration { return mappingProvider; } - public MappingsService getMappingsService(SharedServiceManager serviceManager) { - return MappingsService.create(serviceManager, Objects.requireNonNull(tinyMappings)); + public TinyMappingsService getMappingsService(SharedServiceManager serviceManager) { + return TinyMappingsService.create(serviceManager, Objects.requireNonNull(tinyMappings)); } private void setup(Project project, SharedServiceManager serviceManager, MinecraftProvider minecraftProvider, Path inputJar) throws IOException { diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsService.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsService.java deleted file mode 100644 index 02c92398..00000000 --- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsService.java +++ /dev/null @@ -1,31 +0,0 @@ -package net.fabricmc.loom.configuration.providers.mappings; - -import java.io.IOException; -import java.io.UncheckedIOException; -import java.nio.file.Path; - -import net.fabricmc.loom.util.service.SharedService; -import net.fabricmc.loom.util.service.SharedServiceManager; -import net.fabricmc.mappingio.MappingReader; -import net.fabricmc.mappingio.tree.MemoryMappingTree; - -public final class MappingsService implements SharedService { - private final MemoryMappingTree mappingTree; - - public MappingsService(Path tinyMappings) { - try { - this.mappingTree = new MemoryMappingTree(); - MappingReader.read(tinyMappings, mappingTree); - } catch (IOException e) { - throw new UncheckedIOException("Failed to read mappings", e); - } - } - - public static synchronized MappingsService create(SharedServiceManager serviceManager, Path tinyMappings) { - return serviceManager.getOrCreateService("MappingsService:" + tinyMappings.toAbsolutePath(), () -> new MappingsService(tinyMappings)); - } - - public MemoryMappingTree getMappingTree() { - return mappingTree; - } -} diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/TinyMappingsService.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/TinyMappingsService.java new file mode 100644 index 00000000..cd32313d --- /dev/null +++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/TinyMappingsService.java @@ -0,0 +1,55 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2022 FabricMC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package net.fabricmc.loom.configuration.providers.mappings; + +import java.io.IOException; +import java.io.UncheckedIOException; +import java.nio.file.Path; + +import net.fabricmc.loom.util.service.SharedService; +import net.fabricmc.loom.util.service.SharedServiceManager; +import net.fabricmc.mappingio.MappingReader; +import net.fabricmc.mappingio.tree.MemoryMappingTree; + +public final class TinyMappingsService implements SharedService { + private final MemoryMappingTree mappingTree; + + public TinyMappingsService(Path tinyMappings) { + try { + this.mappingTree = new MemoryMappingTree(); + MappingReader.read(tinyMappings, mappingTree); + } catch (IOException e) { + throw new UncheckedIOException("Failed to read mappings", e); + } + } + + public static synchronized TinyMappingsService create(SharedServiceManager serviceManager, Path tinyMappings) { + return serviceManager.getOrCreateService("TinyMappingsService:" + tinyMappings.toAbsolutePath(), () -> new TinyMappingsService(tinyMappings)); + } + + public MemoryMappingTree getMappingTree() { + return mappingTree; + } +} diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MergedMinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MergedMinecraftProvider.java index 94fe014c..50ca208f 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MergedMinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MergedMinecraftProvider.java @@ -31,15 +31,14 @@ import java.nio.file.Path; import java.util.List; import java.util.Objects; -import org.gradle.api.Project; - +import net.fabricmc.loom.configuration.ConfigContext; import net.fabricmc.stitch.merge.JarMerger; public final class MergedMinecraftProvider extends MinecraftProvider { private Path minecraftMergedJar; - public MergedMinecraftProvider(Project project) { - super(project); + public MergedMinecraftProvider(ConfigContext configContext) { + super(configContext); } @Override diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftJarConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftJarConfiguration.java index c48102b2..04a7468a 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftJarConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftJarConfiguration.java @@ -28,8 +28,7 @@ import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; -import org.gradle.api.Project; - +import net.fabricmc.loom.configuration.ConfigContext; import net.fabricmc.loom.configuration.decompile.DecompileConfiguration; import net.fabricmc.loom.configuration.decompile.SingleJarDecompileConfiguration; import net.fabricmc.loom.configuration.decompile.SplitDecompileConfiguration; @@ -73,39 +72,39 @@ public enum MinecraftJarConfiguration { List.of("client", "server") ); - private final Function minecraftProviderFunction; - private final BiFunction> intermediaryMinecraftProviderBiFunction; - private final BiFunction> namedMinecraftProviderBiFunction; + private final Function minecraftProviderFunction; + private final BiFunction> intermediaryMinecraftProviderBiFunction; + private final BiFunction> namedMinecraftProviderBiFunction; private final BiFunction, MinecraftJarProcessorManager, ProcessedNamedMinecraftProvider> processedNamedMinecraftProviderBiFunction; - private final BiFunction> decompileConfigurationBiFunction; + private final BiFunction> decompileConfigurationBiFunction; private final List supportedEnvironments; @SuppressWarnings("unchecked") // Just a bit of a generic mess :) , Q extends MappedMinecraftProvider> MinecraftJarConfiguration( - Function minecraftProviderFunction, - BiFunction> intermediaryMinecraftProviderBiFunction, - BiFunction namedMinecraftProviderBiFunction, + Function minecraftProviderFunction, + BiFunction> intermediaryMinecraftProviderBiFunction, + BiFunction namedMinecraftProviderBiFunction, BiFunction> processedNamedMinecraftProviderBiFunction, - BiFunction> decompileConfigurationBiFunction, + BiFunction> decompileConfigurationBiFunction, List supportedEnvironments ) { - this.minecraftProviderFunction = (Function) minecraftProviderFunction; - this.intermediaryMinecraftProviderBiFunction = (BiFunction>) (Object) intermediaryMinecraftProviderBiFunction; - this.namedMinecraftProviderBiFunction = (BiFunction>) namedMinecraftProviderBiFunction; + this.minecraftProviderFunction = (Function) minecraftProviderFunction; + this.intermediaryMinecraftProviderBiFunction = (BiFunction>) (Object) intermediaryMinecraftProviderBiFunction; + this.namedMinecraftProviderBiFunction = (BiFunction>) namedMinecraftProviderBiFunction; this.processedNamedMinecraftProviderBiFunction = (BiFunction, MinecraftJarProcessorManager, ProcessedNamedMinecraftProvider>) (Object) processedNamedMinecraftProviderBiFunction; - this.decompileConfigurationBiFunction = (BiFunction>) decompileConfigurationBiFunction; + this.decompileConfigurationBiFunction = (BiFunction>) decompileConfigurationBiFunction; this.supportedEnvironments = supportedEnvironments; } - public Function getMinecraftProviderFunction() { + public Function getMinecraftProviderFunction() { return minecraftProviderFunction; } - public BiFunction> getIntermediaryMinecraftProviderBiFunction() { + public BiFunction> getIntermediaryMinecraftProviderBiFunction() { return intermediaryMinecraftProviderBiFunction; } - public BiFunction> getNamedMinecraftProviderBiFunction() { + public BiFunction> getNamedMinecraftProviderBiFunction() { return namedMinecraftProviderBiFunction; } @@ -113,7 +112,7 @@ public enum MinecraftJarConfiguration { return processedNamedMinecraftProviderBiFunction; } - public BiFunction> getDecompileConfigurationBiFunction() { + public BiFunction> getDecompileConfigurationBiFunction() { return decompileConfigurationBiFunction; } diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftProvider.java index 13189391..7079db7b 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftProvider.java @@ -38,6 +38,7 @@ import org.jetbrains.annotations.Nullable; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.LoomGradlePlugin; +import net.fabricmc.loom.configuration.ConfigContext; import net.fabricmc.loom.configuration.DependencyInfo; import net.fabricmc.loom.configuration.providers.BundleMetadata; import net.fabricmc.loom.util.Constants; @@ -67,8 +68,8 @@ public abstract class MinecraftProvider { private final Project project; - public MinecraftProvider(Project project) { - this.project = project; + public MinecraftProvider(ConfigContext configContext) { + this.project = configContext.project(); } protected boolean provideClient() { diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SignatureFixerApplyVisitor.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SignatureFixerApplyVisitor.java index 08a6e7c3..7094dbf0 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SignatureFixerApplyVisitor.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SignatureFixerApplyVisitor.java @@ -29,15 +29,15 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; - import org.gradle.api.Project; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.commons.Remapper; import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; +import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.TinyRemapperHelper; +import net.fabricmc.loom.util.service.SharedServiceManager; import net.fabricmc.tinyremapper.TinyRemapper; import net.fabricmc.tinyremapper.api.TrClass; @@ -56,7 +56,7 @@ public record SignatureFixerApplyVisitor(Map signatureFixes) imp }; } - public static Map getRemappedSignatures(boolean toIntermediary, MappingConfiguration mappingConfiguration, Project project, String targetNamespace) throws IOException { + public static Map getRemappedSignatures(boolean toIntermediary, MappingConfiguration mappingConfiguration, Project project, SharedServiceManager serviceManager, String targetNamespace) throws IOException { if (mappingConfiguration.getSignatureFixes() == null) { // No fixes return Collections.emptyMap(); @@ -69,7 +69,7 @@ public record SignatureFixerApplyVisitor(Map signatureFixes) imp // Remap the sig fixes from intermediary to the target namespace final Map remapped = new HashMap<>(); - final TinyRemapper sigTinyRemapper = TinyRemapperHelper.getTinyRemapper(project, MappingsNamespace.INTERMEDIARY.toString(), targetNamespace); + final TinyRemapper sigTinyRemapper = TinyRemapperHelper.getTinyRemapper(project, serviceManager, MappingsNamespace.INTERMEDIARY.toString(), targetNamespace); final Remapper sigAsmRemapper = sigTinyRemapper.getEnvironment().getRemapper(); // Remap the class names and the signatures using a new tiny remapper instance. diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SingleJarMinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SingleJarMinecraftProvider.java index 83743035..e63a5ac2 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SingleJarMinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SingleJarMinecraftProvider.java @@ -28,8 +28,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import org.gradle.api.Project; - +import net.fabricmc.loom.configuration.ConfigContext; import net.fabricmc.loom.configuration.providers.BundleMetadata; import net.fabricmc.tinyremapper.NonClassCopyMode; import net.fabricmc.tinyremapper.OutputConsumerPath; @@ -40,17 +39,17 @@ public final class SingleJarMinecraftProvider extends MinecraftProvider { private Path minecraftEnvOnlyJar; - private SingleJarMinecraftProvider(Project project, Environment environment) { - super(project); + private SingleJarMinecraftProvider(ConfigContext configContext, Environment environment) { + super(configContext); this.environment = environment; } - public static SingleJarMinecraftProvider server(Project project) { - return new SingleJarMinecraftProvider(project, new Server()); + public static SingleJarMinecraftProvider server(ConfigContext configContext) { + return new SingleJarMinecraftProvider(configContext, new Server()); } - public static SingleJarMinecraftProvider client(Project project) { - return new SingleJarMinecraftProvider(project, new Client()); + public static SingleJarMinecraftProvider client(ConfigContext configContext) { + return new SingleJarMinecraftProvider(configContext, new Client()); } @Override diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SplitMinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SplitMinecraftProvider.java index 1da1c36a..f970aa16 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SplitMinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/SplitMinecraftProvider.java @@ -28,16 +28,15 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import org.gradle.api.Project; - +import net.fabricmc.loom.configuration.ConfigContext; import net.fabricmc.loom.configuration.providers.BundleMetadata; public final class SplitMinecraftProvider extends MinecraftProvider { private Path minecraftClientOnlyJar; private Path minecraftCommonJar; - public SplitMinecraftProvider(Project project) { - super(project); + public SplitMinecraftProvider(ConfigContext configContext) { + super(configContext); } @Override diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java index 1b2c1754..63550225 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/AbstractMappedMinecraftProvider.java @@ -35,6 +35,7 @@ import org.gradle.api.Project; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; +import net.fabricmc.loom.configuration.ConfigContext; import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftSourceSets; @@ -45,13 +46,13 @@ import net.fabricmc.tinyremapper.TinyRemapper; public abstract class AbstractMappedMinecraftProvider implements MappedMinecraftProvider.ProviderImpl { protected final M minecraftProvider; - private final Project project; + protected final ConfigContext configContext; protected final LoomGradleExtension extension; - public AbstractMappedMinecraftProvider(Project project, M minecraftProvider) { - this.project = project; + public AbstractMappedMinecraftProvider(ConfigContext configContext, M minecraftProvider) { + this.configContext = configContext; this.minecraftProvider = minecraftProvider; - this.extension = LoomGradleExtension.get(project); + this.extension = configContext.extension(); } public abstract MappingsNamespace getTargetNamespace(); @@ -130,15 +131,15 @@ public abstract class AbstractMappedMinecraftProvider remappedSignatures = SignatureFixerApplyVisitor.getRemappedSignatures(getTargetNamespace() == MappingsNamespace.INTERMEDIARY, mappingConfiguration, project, toM); - TinyRemapper remapper = TinyRemapperHelper.getTinyRemapper(project, fromM, toM, true, (builder) -> { + final Map remappedSignatures = SignatureFixerApplyVisitor.getRemappedSignatures(getTargetNamespace() == MappingsNamespace.INTERMEDIARY, mappingConfiguration, getProject(), configContext.serviceManager(), toM); + TinyRemapper remapper = TinyRemapperHelper.getTinyRemapper(getProject(), configContext.serviceManager(), fromM, toM, true, (builder) -> { builder.extraPostApplyVisitor(new SignatureFixerApplyVisitor(remappedSignatures)); configureRemapper(remappedJars, builder); }); try (OutputConsumerPath outputConsumer = new OutputConsumerPath.Builder(remappedJars.outputJar()).build()) { outputConsumer.addNonClassFiles(remappedJars.inputJar()); - remapper.readClassPath(TinyRemapperHelper.getMinecraftDependencies(project)); + remapper.readClassPath(TinyRemapperHelper.getMinecraftDependencies(getProject())); for (Path path : remappedJars.remapClasspath()) { remapper.readClassPath(path); @@ -162,8 +163,12 @@ public abstract class AbstractMappedMinecraftProvider extends AbstractMappedMinecraftProvider permits IntermediaryMinecraftProvider.MergedImpl, IntermediaryMinecraftProvider.SingleJarImpl, IntermediaryMinecraftProvider.SplitImpl { - public IntermediaryMinecraftProvider(Project project, M minecraftProvider) { - super(project, minecraftProvider); + public IntermediaryMinecraftProvider(ConfigContext configContext, M minecraftProvider) { + super(configContext, minecraftProvider); } @Override @@ -54,8 +53,8 @@ public abstract sealed class IntermediaryMinecraftProvider implements Merged { - public MergedImpl(Project project, MergedMinecraftProvider minecraftProvider) { - super(project, minecraftProvider); + public MergedImpl(ConfigContext configContext, MergedMinecraftProvider minecraftProvider) { + super(configContext, minecraftProvider); } @Override @@ -67,8 +66,8 @@ public abstract sealed class IntermediaryMinecraftProvider implements Split { - public SplitImpl(Project project, SplitMinecraftProvider minecraftProvider) { - super(project, minecraftProvider); + public SplitImpl(ConfigContext configContext, SplitMinecraftProvider minecraftProvider) { + super(configContext, minecraftProvider); } @Override @@ -90,17 +89,17 @@ public abstract sealed class IntermediaryMinecraftProvider implements SingleJar { private final SingleJarEnvType env; - private SingleJarImpl(Project project, SingleJarMinecraftProvider minecraftProvider, SingleJarEnvType env) { - super(project, minecraftProvider); + private SingleJarImpl(ConfigContext configContext, SingleJarMinecraftProvider minecraftProvider, SingleJarEnvType env) { + super(configContext, minecraftProvider); this.env = env; } - public static SingleJarImpl server(Project project, SingleJarMinecraftProvider minecraftProvider) { - return new SingleJarImpl(project, minecraftProvider, SingleJarEnvType.SERVER); + public static SingleJarImpl server(ConfigContext configContext, SingleJarMinecraftProvider minecraftProvider) { + return new SingleJarImpl(configContext, minecraftProvider, SingleJarEnvType.SERVER); } - public static SingleJarImpl client(Project project, SingleJarMinecraftProvider minecraftProvider) { - return new SingleJarImpl(project, minecraftProvider, SingleJarEnvType.CLIENT); + public static SingleJarImpl client(ConfigContext configContext, SingleJarMinecraftProvider minecraftProvider) { + return new SingleJarImpl(configContext, minecraftProvider, SingleJarEnvType.CLIENT); } @Override diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/NamedMinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/NamedMinecraftProvider.java index 1e5f80b5..97de6d96 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/NamedMinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/NamedMinecraftProvider.java @@ -27,9 +27,8 @@ package net.fabricmc.loom.configuration.providers.minecraft.mapped; import java.nio.file.Path; import java.util.List; -import org.gradle.api.Project; - import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; +import net.fabricmc.loom.configuration.ConfigContext; import net.fabricmc.loom.configuration.providers.minecraft.MergedMinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider; import net.fabricmc.loom.configuration.providers.minecraft.SingleJarEnvType; @@ -39,8 +38,8 @@ import net.fabricmc.loom.util.SidedClassVisitor; import net.fabricmc.tinyremapper.TinyRemapper; public abstract class NamedMinecraftProvider extends AbstractMappedMinecraftProvider { - public NamedMinecraftProvider(Project project, M minecraftProvider) { - super(project, minecraftProvider); + public NamedMinecraftProvider(ConfigContext configContext, M minecraftProvider) { + super(configContext, minecraftProvider); } @Override @@ -54,8 +53,8 @@ public abstract class NamedMinecraftProvider extend } public static final class MergedImpl extends NamedMinecraftProvider implements Merged { - public MergedImpl(Project project, MergedMinecraftProvider minecraftProvider) { - super(project, minecraftProvider); + public MergedImpl(ConfigContext configContext, MergedMinecraftProvider minecraftProvider) { + super(configContext, minecraftProvider); } @Override @@ -72,8 +71,8 @@ public abstract class NamedMinecraftProvider extend } public static final class SplitImpl extends NamedMinecraftProvider implements Split { - public SplitImpl(Project project, SplitMinecraftProvider minecraftProvider) { - super(project, minecraftProvider); + public SplitImpl(ConfigContext configContext, SplitMinecraftProvider minecraftProvider) { + super(configContext, minecraftProvider); } @Override @@ -100,17 +99,17 @@ public abstract class NamedMinecraftProvider extend public static final class SingleJarImpl extends NamedMinecraftProvider implements SingleJar { private final SingleJarEnvType env; - private SingleJarImpl(Project project, SingleJarMinecraftProvider minecraftProvider, SingleJarEnvType env) { - super(project, minecraftProvider); + private SingleJarImpl(ConfigContext configContext, SingleJarMinecraftProvider minecraftProvider, SingleJarEnvType env) { + super(configContext, minecraftProvider); this.env = env; } - public static SingleJarImpl server(Project project, SingleJarMinecraftProvider minecraftProvider) { - return new SingleJarImpl(project, minecraftProvider, SingleJarEnvType.SERVER); + public static SingleJarImpl server(ConfigContext configContext, SingleJarMinecraftProvider minecraftProvider) { + return new SingleJarImpl(configContext, minecraftProvider, SingleJarEnvType.SERVER); } - public static SingleJarImpl client(Project project, SingleJarMinecraftProvider minecraftProvider) { - return new SingleJarImpl(project, minecraftProvider, SingleJarEnvType.CLIENT); + public static SingleJarImpl client(ConfigContext configContext, SingleJarMinecraftProvider minecraftProvider) { + return new SingleJarImpl(configContext, minecraftProvider, SingleJarEnvType.CLIENT); } @Override diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/ProcessedNamedMinecraftProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/ProcessedNamedMinecraftProvider.java index 8f8e3e0e..2a4d8901 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/ProcessedNamedMinecraftProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/mapped/ProcessedNamedMinecraftProvider.java @@ -50,7 +50,7 @@ public abstract class ProcessedNamedMinecraftProvider new SourceRemapperService(MappingsService.createDefault(project, serviceManager, from, to), task.getClasspath() diff --git a/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java b/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java index 6d29b9d9..5e38ef8c 100644 --- a/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java +++ b/src/main/java/net/fabricmc/loom/task/service/TinyRemapperService.java @@ -66,7 +66,7 @@ public class TinyRemapperService implements SharedService { // Generates an id that is used to share the remapper across projects. This tasks in the remap jar task name to handle custom remap jar tasks separately. final var joiner = new StringJoiner(":"); - joiner.add(extension.getMappingsProvider().getBuildServiceName("remapJarService", from, to)); + joiner.add(extension.getMappingConfiguration().getBuildServiceName("remapJarService", from, to)); joiner.add(remapJarTask.getName()); if (kotlinClasspathService != null) { diff --git a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java index 8fed7ac0..ab2e7983 100644 --- a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java @@ -33,10 +33,6 @@ import java.util.List; import java.util.Set; import java.util.function.Consumer; -import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; - -import net.fabricmc.loom.util.service.SharedServiceManager; - import org.cadixdev.lorenz.MappingSet; import org.cadixdev.mercury.Mercury; import org.cadixdev.mercury.remapper.MercuryRemapper; @@ -49,6 +45,8 @@ import org.slf4j.Logger; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.api.RemapConfigurationSettings; import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; +import net.fabricmc.loom.configuration.providers.mappings.MappingConfiguration; +import net.fabricmc.loom.util.service.SharedServiceManager; import net.fabricmc.lorenztiny.TinyMappingsReader; import net.fabricmc.mappingio.tree.MemoryMappingTree; diff --git a/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java b/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java index 4f0bdfac..01e8d9a3 100644 --- a/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java +++ b/src/main/java/net/fabricmc/loom/util/TinyRemapperHelper.java @@ -32,13 +32,11 @@ import java.util.function.Consumer; import java.util.regex.Pattern; import com.google.common.collect.ImmutableMap; - -import net.fabricmc.loom.util.service.SharedServiceManager; - import org.gradle.api.Project; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; +import net.fabricmc.loom.util.service.SharedServiceManager; import net.fabricmc.mappingio.MappingReader; import net.fabricmc.mappingio.tree.MappingTree; import net.fabricmc.mappingio.tree.MemoryMappingTree;