diff options
Diffstat (limited to 'src/main/java/net/fabricmc/loom/task')
-rw-r--r-- | src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java | 6 | ||||
-rw-r--r-- | src/main/java/net/fabricmc/loom/task/RemapJarTask.java | 50 |
2 files changed, 30 insertions, 26 deletions
diff --git a/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java b/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java index ecd9ad84..22211b01 100644 --- a/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java @@ -62,6 +62,7 @@ import net.fabricmc.loom.configuration.accesswidener.TransitiveAccessWidenerMapp import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl; import net.fabricmc.loom.decompilers.LineNumberRemapper; import net.fabricmc.loom.util.Constants; +import net.fabricmc.loom.util.FileSystemUtil; import net.fabricmc.loom.util.IOStringConsumer; import net.fabricmc.loom.util.OperatingSystem; import net.fabricmc.loom.util.gradle.ThreadedProgressLoggerConsumer; @@ -69,7 +70,6 @@ import net.fabricmc.loom.util.gradle.ThreadedSimpleProgressLogger; import net.fabricmc.loom.util.gradle.WorkerDaemonClientsManagerHelper; import net.fabricmc.loom.util.ipc.IPCClient; import net.fabricmc.loom.util.ipc.IPCServer; -import net.fabricmc.stitch.util.StitchUtil; public abstract class GenerateSourcesTask extends AbstractLoomTask { public final LoomDecompiler decompiler; @@ -265,8 +265,8 @@ public abstract class GenerateSourcesTask extends AbstractLoomTask { LineNumberRemapper remapper = new LineNumberRemapper(); remapper.readMappings(linemap.toFile()); - try (StitchUtil.FileSystemDelegate inFs = StitchUtil.getJarFileSystem(oldCompiledJar.toFile(), true); - StitchUtil.FileSystemDelegate outFs = StitchUtil.getJarFileSystem(linemappedJarDestination.toFile(), true)) { + try (FileSystemUtil.Delegate inFs = FileSystemUtil.getJarFileSystem(oldCompiledJar.toFile(), true); + FileSystemUtil.Delegate outFs = FileSystemUtil.getJarFileSystem(linemappedJarDestination.toFile(), true)) { remapper.process(logger, inFs.get().getPath("/"), outFs.get().getPath("/")); } } diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java index 37293266..600d6821 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java @@ -24,20 +24,21 @@ package net.fabricmc.loom.task; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.UncheckedIOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; import java.util.jar.Manifest; -import java.util.zip.ZipEntry; import com.google.common.base.Preconditions; import org.gradle.api.Action; @@ -52,9 +53,6 @@ import org.gradle.api.tasks.InputFile; import org.gradle.api.tasks.TaskAction; import org.gradle.jvm.tasks.Jar; import org.jetbrains.annotations.ApiStatus; -import org.zeroturnaround.zip.ZipUtil; -import org.zeroturnaround.zip.transform.StreamZipEntryTransformer; -import org.zeroturnaround.zip.transform.ZipEntryTransformerEntry; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.api.mappings.layered.MappingsNamespace; @@ -72,6 +70,7 @@ import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl; import net.fabricmc.loom.util.Constants; import net.fabricmc.loom.util.TinyRemapperHelper; import net.fabricmc.loom.util.ZipReprocessorUtil; +import net.fabricmc.loom.util.ZipUtils; import net.fabricmc.stitch.util.Pair; import net.fabricmc.tinyremapper.TinyRemapper; import net.fabricmc.tinyremapper.TinyUtils; @@ -190,26 +189,31 @@ public class RemapJarTask extends Jar { } if (accessWidener != null) { - boolean replaced = ZipUtil.replaceEntry(data.output.toFile(), accessWidener.getLeft(), accessWidener.getRight()); - Preconditions.checkArgument(replaced, "Failed to remap access widener"); + try { + ZipUtils.replace(data.output, accessWidener.getLeft(), accessWidener.getRight()); + } catch (IOException e) { + throw new UncheckedIOException("Failed to replace access widener in output jar", e); + } } // Add data to the manifest - boolean transformed = ZipUtil.transformEntries(data.output.toFile(), new ZipEntryTransformerEntry[]{ - new ZipEntryTransformerEntry(MANIFEST_PATH, new StreamZipEntryTransformer() { - @Override - protected void transform(ZipEntry zipEntry, InputStream in, OutputStream out) throws IOException { - var manifest = new Manifest(in); - var manifestConfiguration = new JarManifestConfiguration(project); - - manifestConfiguration.configure(manifest); - manifest.getMainAttributes().putValue("Fabric-Mapping-Namespace", toM); - - manifest.write(out); - } - }) - }); - Preconditions.checkArgument(transformed, "Failed to transform jar manifest"); + try { + int count = ZipUtils.transform(data.output, Map.of(MANIFEST_PATH, bytes -> { + var manifest = new Manifest(new ByteArrayInputStream(bytes)); + var manifestConfiguration = new JarManifestConfiguration(project); + + manifestConfiguration.configure(manifest); + manifest.getMainAttributes().putValue("Fabric-Mapping-Namespace", toM); + + ByteArrayOutputStream out = new ByteArrayOutputStream(); + manifest.write(out); + return out.toByteArray(); + })); + + Preconditions.checkState(count > 0, "Did not transform any jar manifest"); + } catch (IOException e) { + throw new UncheckedIOException("Failed to transform jar manifest", e); + } if (isReproducibleFileOrder() || !isPreserveFileTimestamps()) { try { |