diff options
8 files changed, 39 insertions, 18 deletions
diff --git a/build.gradle b/build.gradle index 51a03448..45daaeb4 100644 --- a/build.gradle +++ b/build.gradle @@ -69,8 +69,8 @@ dependencies { } // tinyfile management - compileOnly ('net.fabricmc:tiny-remapper:0.3.2-architectury.5') - shadow ('net.fabricmc:tiny-remapper:0.3.2-architectury.5') + compileOnly ('net.fabricmc:tiny-remapper:0.3.2-architectury.6') + shadow ('net.fabricmc:tiny-remapper:0.3.2-architectury.6') implementation ('net.fabricmc:tiny-mappings-parser:0.3.0+build.17') implementation 'net.fabricmc:access-widener:1.0.0' diff --git a/src/main/java/net/fabricmc/loom/build/JarRemapper.java b/src/main/java/net/fabricmc/loom/build/JarRemapper.java index fab51e2d..6d8f4287 100644 --- a/src/main/java/net/fabricmc/loom/build/JarRemapper.java +++ b/src/main/java/net/fabricmc/loom/build/JarRemapper.java @@ -35,6 +35,7 @@ import java.util.function.BiConsumer; import java.util.function.BiFunction; import org.gradle.api.Action; +import org.gradle.api.Project; import org.objectweb.asm.commons.Remapper; import net.fabricmc.loom.util.LoggerFilter; @@ -64,9 +65,10 @@ public class JarRemapper { return data; } - public void remap() throws IOException { + public void remap(Project project) throws IOException { LoggerFilter.replaceSystemOut(); TinyRemapper.Builder remapperBuilder = TinyRemapper.newRemapper(); + remapperBuilder.logger(project.getLogger()::lifecycle); mappingProviders.forEach(remapperBuilder::withMappings); if (remapOptions != null) { diff --git a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java index d75dd318..01310e6d 100644 --- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java @@ -320,7 +320,7 @@ public final class CompileConfiguration { rootProject.getTasks().register("remapAllJars", AbstractLoomTask.class, task -> { task.doLast(t -> { try { - jarRemapper.remap(); + jarRemapper.remap(rootProject); } catch (IOException e) { throw new RuntimeException("Failed to remap jars", e); } diff --git a/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerJarProcessor.java b/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerJarProcessor.java index ae73c145..42f0e7bf 100644 --- a/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerJarProcessor.java +++ b/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerJarProcessor.java @@ -95,7 +95,8 @@ public class AccessWidenerJarProcessor implements JarProcessor { throw new UnsupportedOperationException(String.format("Access Widener namespace '%s' is not a valid namespace, it must be one of: '%s'", accessWidener.getNamespace(), String.join(", ", validNamespaces))); } - TinyRemapper tinyRemapper = loomGradleExtension.getMinecraftMappedProvider().getTinyRemapper(null, "official", "named"); + TinyRemapper tinyRemapper = loomGradleExtension.getMinecraftMappedProvider().getTinyRemapper(); + tinyRemapper.replaceMappings(loomGradleExtension.getMinecraftMappedProvider().getMappings(null, "official", "named")); loomGradleExtension.getMinecraftMappedProvider(); tinyRemapper.readClassPath(MinecraftMappedProvider.getRemapClasspath(project)); diff --git a/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java b/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java index 14f14e88..990c042c 100644 --- a/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java +++ b/src/main/java/net/fabricmc/loom/configuration/mods/ModProcessor.java @@ -155,6 +155,7 @@ public class ModProcessor { TinyTree mappings = extension.isForge() ? mappingsProvider.getMappingsWithSrg() : mappingsProvider.getMappings(); LoggerFilter.replaceSystemOut(); TinyRemapper remapper = TinyRemapper.newRemapper() + .logger(project.getLogger()::lifecycle) .withMappings(TinyRemapperMappingsHelper.create(mappings, fromM, toM, false)) .renameInvalidLocals(false) .build(); diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java index 2afd3eed..cccfc7f8 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/MinecraftPatchedProvider.java @@ -428,6 +428,7 @@ public class MinecraftPatchedProvider extends DependencyProvider { Files.deleteIfExists(output); TinyRemapper remapper = TinyRemapper.newRemapper() + .logger(getProject().getLogger()::lifecycle) .withMappings(TinyRemapperMappingsHelper.create(mappingsWithSrg, "srg", "official", true)) .withMappings(InnerClassRemapper.of(input, mappingsWithSrg, "srg", "official")) .renameInvalidLocals(true) diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftMappedProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftMappedProvider.java index 93068ba4..1a9a5db0 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftMappedProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/minecraft/MinecraftMappedProvider.java @@ -35,7 +35,9 @@ import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; +import java.util.HashSet; import java.util.Map; +import java.util.Set; import java.util.function.Consumer; import java.util.jar.Attributes; import java.util.jar.Manifest; @@ -48,12 +50,12 @@ import net.fabricmc.loom.configuration.DependencyProvider; import net.fabricmc.loom.configuration.providers.MinecraftProvider; import net.fabricmc.loom.configuration.providers.mappings.MappingsProvider; import net.fabricmc.loom.util.Constants; -import net.fabricmc.loom.util.ThreadingUtils; import net.fabricmc.loom.util.TinyRemapperMappingsHelper; import net.fabricmc.loom.util.srg.AtRemapper; import net.fabricmc.loom.util.srg.CoreModClassRemapper; import net.fabricmc.loom.util.srg.InnerClassRemapper; import net.fabricmc.mapping.tree.TinyTree; +import net.fabricmc.tinyremapper.IMappingProvider; import net.fabricmc.tinyremapper.NonClassCopyMode; import net.fabricmc.tinyremapper.OutputConsumerPath; import net.fabricmc.tinyremapper.TinyRemapper; @@ -137,14 +139,15 @@ public class MinecraftMappedProvider extends DependencyProvider { Path outputSrg = minecraftSrgJar == null ? null : minecraftSrgJar.toPath(); Path[] libraries = getRemapClasspath(getProject()); + TinyRemapper remapper = getTinyRemapper(); + remapper.readClassPath(libraries); + remapper.prepareClasses(); - ThreadingUtils.run(getExtension().isForge() ? Arrays.asList("named", "intermediary", "srg") : Arrays.asList("named", "intermediary"), toM -> { + for (String toM : getExtension().isForge() ? Arrays.asList("named", "intermediary", "srg") : Arrays.asList("named", "intermediary")) { Path output = "named".equals(toM) ? outputMapped : "srg".equals(toM) ? outputSrg : outputIntermediary; getProject().getLogger().lifecycle(":remapping minecraft (TinyRemapper, " + fromM + " -> " + toM + ")"); - TinyRemapper remapper = getTinyRemapper(input, fromM, toM); - try (OutputConsumerPath outputConsumer = new OutputConsumerPath.Builder(output).build()) { if (getExtension().isForge()) { outputConsumer.addNonClassFiles(input, NonClassCopyMode.FIX_META_INF, remapper); @@ -152,14 +155,14 @@ public class MinecraftMappedProvider extends DependencyProvider { outputConsumer.addNonClassFiles(input); } - remapper.readClassPath(libraries); + remapper.replaceMappings(getMappings(input, fromM, toM)); remapper.readInputs(input); remapper.apply(outputConsumer); } catch (Exception e) { Files.deleteIfExists(output); throw new RuntimeException("Failed to remap JAR " + input + " with mappings from " + mappingsProvider.tinyMappings, e); } finally { - remapper.finish(); + remapper.removeInput(); } if (getExtension().isForge() && !"srg".equals(toM)) { @@ -196,14 +199,18 @@ public class MinecraftMappedProvider extends DependencyProvider { AtRemapper.remap(getProject().getLogger(), output, yarnWithSrg); CoreModClassRemapper.remapJar(output, yarnWithSrg, getProject().getLogger()); } - }); + } + + remapper.finish(); } - public TinyRemapper getTinyRemapper(@Nullable Path fromJar, String fromM, String toM) throws IOException { + public TinyRemapper getTinyRemapper() throws IOException { TinyRemapper.Builder builder = TinyRemapper.newRemapper() - .withMappings(TinyRemapperMappingsHelper.create(getExtension().isForge() ? getExtension().getMappingsProvider().getMappingsWithSrg() : getExtension().getMappingsProvider().getMappings(), fromM, toM, true)) .renameInvalidLocals(true) .ignoreConflicts(getExtension().isForge()) + .cacheMappings(true) + .threads(Runtime.getRuntime().availableProcessors()) + .logger(getProject().getLogger()::lifecycle) .rebuildSourceFilenames(true); if (getExtension().isForge()) { @@ -211,15 +218,24 @@ public class MinecraftMappedProvider extends DependencyProvider { * They won't get remapped to their proper packages, so IllegalAccessErrors will happen without ._. */ builder.fixPackageAccess(true); + } + + return builder.build(); + } + + public Set<IMappingProvider> getMappings(@Nullable Path fromJar, String fromM, String toM) throws IOException { + Set<IMappingProvider> providers = new HashSet<>(); + providers.add(TinyRemapperMappingsHelper.create(getExtension().isForge() ? getExtension().getMappingsProvider().getMappingsWithSrg() : getExtension().getMappingsProvider().getMappings(), fromM, toM, true)); + if (getExtension().isForge()) { if (fromJar != null) { - builder.withMappings(InnerClassRemapper.of(fromJar, getExtension().getMappingsProvider().getMappingsWithSrg(), fromM, toM)); + providers.add(InnerClassRemapper.of(fromJar, getExtension().getMappingsProvider().getMappingsWithSrg(), fromM, toM)); } } else { - builder.withMappings(out -> JSR_TO_JETBRAINS.forEach(out::acceptClass)); + providers.add(out -> JSR_TO_JETBRAINS.forEach(out::acceptClass)); } - return builder.build(); + return providers; } public static Path[] getRemapClasspath(Project project) { diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java index 62ffd1d4..0d06f9b9 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java @@ -119,7 +119,7 @@ public class RemapJarTask extends Jar { LoggerFilter.replaceSystemOut(); TinyRemapper.Builder remapperBuilder = TinyRemapper.newRemapper(); - + remapperBuilder.logger(getProject().getLogger()::lifecycle); remapperBuilder = remapperBuilder.withMappings(TinyRemapperMappingsHelper.create(extension.isForge() ? mappingsProvider.getMappingsWithSrg() : mappingsProvider.getMappings(), fromM, toM, false)); for (File mixinMapFile : extension.getAllMixinMappings()) { |
