diff options
Diffstat (limited to 'src/main/java/net/fabricmc/loom/configuration/providers')
2 files changed, 29 insertions, 12 deletions
| 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) { | 
