mirror of
https://github.com/architectury/architectury-loom.git
synced 2026-03-30 13:05:27 -05:00
Use TR's ref coutning FileSystemHandler (#639)
* Dont depend on other prepare tasks, only run after. * Update for: https://github.com/FabricMC/tiny-remapper/pull/93 * Cleanup * Bump deps
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2018-2021 FabricMC
|
||||
* Copyright (c) 2018-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
|
||||
@@ -24,46 +24,21 @@
|
||||
|
||||
package net.fabricmc.loom.build;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.StreamSupport;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import net.fabricmc.loom.LoomGradlePlugin;
|
||||
|
||||
public final class MixinRefmapHelper {
|
||||
private MixinRefmapHelper() { }
|
||||
|
||||
private static final String FABRIC_MOD_JSON = "fabric.mod.json";
|
||||
|
||||
@Nullable
|
||||
public static JsonObject readFabricModJson(File output) {
|
||||
try (ZipFile zip = new ZipFile(output)) {
|
||||
ZipEntry entry = zip.getEntry(FABRIC_MOD_JSON);
|
||||
|
||||
if (entry == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try (InputStreamReader reader = new InputStreamReader(zip.getInputStream(entry))) {
|
||||
return LoomGradlePlugin.GSON.fromJson(reader, JsonObject.class);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Cannot read file fabric.mod.json in the jar.", e);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static Collection<String> getMixinConfigurationFiles(JsonObject fabricModJson) {
|
||||
JsonArray mixins = fabricModJson.getAsJsonArray("mixins");
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2016-2021 FabricMC
|
||||
* Copyright (c) 2016-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
|
||||
@@ -56,6 +56,7 @@ import net.fabricmc.loom.configuration.providers.minecraft.MergedMinecraftProvid
|
||||
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftProvider;
|
||||
import net.fabricmc.loom.util.Constants;
|
||||
import net.fabricmc.loom.util.DeletingFileVisitor;
|
||||
import net.fabricmc.loom.util.FileSystemUtil;
|
||||
import net.fabricmc.loom.util.ZipUtils;
|
||||
import net.fabricmc.loom.util.service.SharedService;
|
||||
import net.fabricmc.loom.util.service.SharedServiceManager;
|
||||
@@ -184,9 +185,9 @@ public class MappingsProviderImpl implements MappingsProvider, SharedService {
|
||||
private void storeMappings(MinecraftProvider minecraftProvider, Path inputJar) throws IOException {
|
||||
LOGGER.info(":extracting " + inputJar.getFileName());
|
||||
|
||||
try (FileSystem fileSystem = FileSystems.newFileSystem(inputJar, (ClassLoader) null)) {
|
||||
extractMappings(fileSystem, baseTinyMappings);
|
||||
extractExtras(fileSystem);
|
||||
try (FileSystemUtil.Delegate delegate = FileSystemUtil.getJarFileSystem(inputJar)) {
|
||||
extractMappings(delegate.fs(), baseTinyMappings);
|
||||
extractExtras(delegate.fs());
|
||||
}
|
||||
|
||||
if (areMappingsV2(baseTinyMappings)) {
|
||||
@@ -221,8 +222,8 @@ public class MappingsProviderImpl implements MappingsProvider, SharedService {
|
||||
}
|
||||
|
||||
public static void extractMappings(Path jar, Path extractTo) throws IOException {
|
||||
try (FileSystem unmergedIntermediaryFs = FileSystems.newFileSystem(jar, (ClassLoader) null)) {
|
||||
extractMappings(unmergedIntermediaryFs, extractTo);
|
||||
try (FileSystemUtil.Delegate delegate = FileSystemUtil.getJarFileSystem(jar)) {
|
||||
extractMappings(delegate.fs(), extractTo);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2021 FabricMC
|
||||
* 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
|
||||
@@ -25,17 +25,13 @@
|
||||
package net.fabricmc.loom.configuration.providers.mappings.extras.signatures;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
|
||||
import net.fabricmc.loom.LoomGradlePlugin;
|
||||
import net.fabricmc.loom.api.mappings.layered.MappingLayer;
|
||||
import net.fabricmc.loom.util.ZipUtils;
|
||||
import net.fabricmc.mappingio.MappingVisitor;
|
||||
|
||||
@ApiStatus.Experimental
|
||||
@@ -49,14 +45,9 @@ public record SignatureFixesLayerImpl(Path mappingsFile) implements MappingLayer
|
||||
|
||||
@Override
|
||||
public Map<String, String> getSignatureFixes() {
|
||||
try (var zipFile = new ZipFile(mappingsFile().toFile())) {
|
||||
ZipEntry zipFileEntry = zipFile.getEntry(SIGNATURE_FIXES_PATH);
|
||||
Objects.requireNonNull(zipFileEntry, "Could not find %s in file".formatted(SIGNATURE_FIXES_PATH));
|
||||
|
||||
try (var reader = new InputStreamReader(zipFile.getInputStream(zipFileEntry))) {
|
||||
//noinspection unchecked
|
||||
return LoomGradlePlugin.OBJECT_MAPPER.readValue(reader, Map.class);
|
||||
}
|
||||
try {
|
||||
//noinspection unchecked
|
||||
return ZipUtils.unpackJackson(mappingsFile(), SIGNATURE_FIXES_PATH, Map.class);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("Failed to extract signature fixes", e);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2016-2021 FabricMC
|
||||
* Copyright (c) 2016-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
|
||||
@@ -25,15 +25,11 @@
|
||||
package net.fabricmc.loom.configuration.providers.mappings.parchment;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Objects;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import net.fabricmc.loom.LoomGradlePlugin;
|
||||
import net.fabricmc.loom.api.mappings.layered.MappingLayer;
|
||||
import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
|
||||
import net.fabricmc.loom.util.ZipUtils;
|
||||
import net.fabricmc.mappingio.MappingVisitor;
|
||||
|
||||
public record ParchmentMappingLayer(Path parchmentFile, boolean removePrefix) implements MappingLayer {
|
||||
@@ -51,13 +47,6 @@ public record ParchmentMappingLayer(Path parchmentFile, boolean removePrefix) im
|
||||
}
|
||||
|
||||
private ParchmentTreeV1 getParchmentData() throws IOException {
|
||||
try (var zipFile = new ZipFile(parchmentFile().toFile())) {
|
||||
ZipEntry zipFileEntry = zipFile.getEntry(PARCHMENT_DATA_FILE_NAME);
|
||||
Objects.requireNonNull(zipFileEntry, "Could not find %s in parchment data file".formatted(PARCHMENT_DATA_FILE_NAME));
|
||||
|
||||
try (var reader = new InputStreamReader(zipFile.getInputStream(zipFileEntry))) {
|
||||
return LoomGradlePlugin.OBJECT_MAPPER.readValue(reader, ParchmentTreeV1.class);
|
||||
}
|
||||
}
|
||||
return ZipUtils.unpackJackson(parchmentFile, PARCHMENT_DATA_FILE_NAME, ParchmentTreeV1.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,12 +27,11 @@ package net.fabricmc.loom.configuration.providers.mappings.tiny;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.nio.file.FileSystem;
|
||||
import java.nio.file.FileSystems;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Optional;
|
||||
|
||||
import net.fabricmc.loom.util.FileSystemUtil;
|
||||
import net.fabricmc.mappingio.MappingReader;
|
||||
import net.fabricmc.mappingio.format.MappingFormat;
|
||||
|
||||
@@ -46,8 +45,8 @@ public record TinyJarInfo(boolean v2, Optional<String> minecraftVersionId) {
|
||||
}
|
||||
|
||||
private static boolean doesJarContainV2Mappings(Path path) throws IOException {
|
||||
try (FileSystem fs = FileSystems.newFileSystem(path, (ClassLoader) null)) {
|
||||
try (BufferedReader reader = Files.newBufferedReader(fs.getPath("mappings", "mappings.tiny"))) {
|
||||
try (FileSystemUtil.Delegate delegate = FileSystemUtil.getJarFileSystem(path)) {
|
||||
try (BufferedReader reader = Files.newBufferedReader(delegate.fs().getPath("mappings", "mappings.tiny"))) {
|
||||
return MappingReader.detectFormat(reader) == MappingFormat.TINY_2;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2016-2020 FabricMC
|
||||
* Copyright (c) 2016-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
|
||||
@@ -26,11 +26,11 @@ package net.fabricmc.loom.decompilers.fernflower;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipFile;
|
||||
|
||||
import org.jetbrains.java.decompiler.util.InterpreterUtil;
|
||||
|
||||
import net.fabricmc.loom.util.ZipUtils;
|
||||
|
||||
public class FernFlowerUtils {
|
||||
public static byte[] getBytecode(String externalPath, String internalPath) throws IOException {
|
||||
File file = new File(externalPath);
|
||||
@@ -38,15 +38,7 @@ public class FernFlowerUtils {
|
||||
if (internalPath == null) {
|
||||
return InterpreterUtil.getBytes(file);
|
||||
} else {
|
||||
try (ZipFile archive = new ZipFile(file)) {
|
||||
ZipEntry entry = archive.getEntry(internalPath);
|
||||
|
||||
if (entry == null) {
|
||||
throw new IOException("Entry not found: " + internalPath);
|
||||
}
|
||||
|
||||
return InterpreterUtil.getBytes(archive, entry);
|
||||
}
|
||||
return ZipUtils.unpack(file.toPath(), internalPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2019-2021 FabricMC
|
||||
* Copyright (c) 2019-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
|
||||
@@ -26,8 +26,6 @@ package net.fabricmc.loom.task;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.FileSystem;
|
||||
import java.nio.file.FileSystems;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Set;
|
||||
@@ -51,6 +49,7 @@ import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
|
||||
import net.fabricmc.loom.api.mappings.layered.spec.LayeredMappingSpecBuilder;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.LayeredMappingsDependency;
|
||||
import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl;
|
||||
import net.fabricmc.loom.util.FileSystemUtil;
|
||||
import net.fabricmc.loom.util.SourceRemapper;
|
||||
import net.fabricmc.lorenztiny.TinyMappingsJoiner;
|
||||
import net.fabricmc.mappingio.MappingReader;
|
||||
@@ -149,8 +148,8 @@ public class MigrateMappingsTask extends AbstractLoomTask {
|
||||
private static MemoryMappingTree getMappings(File mappings) throws IOException {
|
||||
MemoryMappingTree mappingTree = new MemoryMappingTree();
|
||||
|
||||
try (FileSystem fileSystem = FileSystems.newFileSystem(mappings.toPath(), (ClassLoader) null)) {
|
||||
MappingReader.read(fileSystem.getPath("mappings/mappings.tiny"), mappingTree);
|
||||
try (FileSystemUtil.Delegate delegate = FileSystemUtil.getJarFileSystem(mappings.toPath())) {
|
||||
MappingReader.read(delegate.fs().getPath("mappings/mappings.tiny"), mappingTree);
|
||||
}
|
||||
|
||||
return mappingTree;
|
||||
|
||||
@@ -76,6 +76,7 @@ import net.fabricmc.loom.task.service.JarManifestService;
|
||||
import net.fabricmc.loom.task.service.TinyRemapperService;
|
||||
import net.fabricmc.loom.util.Constants;
|
||||
import net.fabricmc.loom.util.ExceptionUtil;
|
||||
import net.fabricmc.loom.util.ModUtils;
|
||||
import net.fabricmc.loom.util.Pair;
|
||||
import net.fabricmc.loom.util.SidedClassVisitor;
|
||||
import net.fabricmc.loom.util.ZipUtils;
|
||||
@@ -168,7 +169,7 @@ public abstract class RemapJarTask extends AbstractRemapJarTask {
|
||||
final LoomGradleExtension extension = LoomGradleExtension.get(getProject());
|
||||
final MixinExtension mixinExtension = extension.getMixin();
|
||||
|
||||
final JsonObject fabricModJson = MixinRefmapHelper.readFabricModJson(getInputFile().getAsFile().get());
|
||||
final JsonObject fabricModJson = ModUtils.getFabricModJson(getInputFile().getAsFile().get().toPath());
|
||||
|
||||
if (fabricModJson == null) {
|
||||
getProject().getLogger().warn("Could not find fabric.mod.json file in: " + getInputFile().getAsFile().get().getName());
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of fabric-loom, licensed under the MIT License (MIT).
|
||||
*
|
||||
* Copyright (c) 2016-2017 FabricMC
|
||||
* Copyright (c) 2016-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
|
||||
@@ -27,20 +27,17 @@ package net.fabricmc.loom.util;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.FileSystem;
|
||||
import java.nio.file.FileSystemAlreadyExistsException;
|
||||
import java.nio.file.FileSystems;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.NoSuchFileException;
|
||||
import java.nio.file.Path;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
import net.fabricmc.tinyremapper.FileSystemReference;
|
||||
|
||||
public final class FileSystemUtil {
|
||||
public record Delegate(FileSystem fs, boolean owner) implements AutoCloseable, Supplier<FileSystem> {
|
||||
public record Delegate(FileSystemReference reference) implements AutoCloseable, Supplier<FileSystem> {
|
||||
public byte[] readAllBytes(String path) throws IOException {
|
||||
Path fsPath = get().getPath(path);
|
||||
|
||||
@@ -57,23 +54,23 @@ public final class FileSystemUtil {
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
if (owner) {
|
||||
fs.close();
|
||||
}
|
||||
reference.close();
|
||||
}
|
||||
|
||||
@Override
|
||||
public FileSystem get() {
|
||||
return fs;
|
||||
return reference.getFs();
|
||||
}
|
||||
|
||||
// TODO cleanup
|
||||
public FileSystem fs() {
|
||||
return get();
|
||||
}
|
||||
}
|
||||
|
||||
private FileSystemUtil() {
|
||||
}
|
||||
|
||||
private static final Map<String, String> jfsArgsCreate = Map.of("create", "true");
|
||||
private static final Map<String, String> jfsArgsEmpty = Collections.emptyMap();
|
||||
|
||||
public static Delegate getJarFileSystem(File file, boolean create) throws IOException {
|
||||
return getJarFileSystem(file.toURI(), create);
|
||||
}
|
||||
@@ -87,18 +84,6 @@ public final class FileSystemUtil {
|
||||
}
|
||||
|
||||
public static Delegate getJarFileSystem(URI uri, boolean create) throws IOException {
|
||||
URI jarUri;
|
||||
|
||||
try {
|
||||
jarUri = new URI("jar:" + uri.getScheme(), uri.getHost(), uri.getPath(), uri.getFragment());
|
||||
} catch (URISyntaxException e) {
|
||||
throw new IOException(e);
|
||||
}
|
||||
|
||||
try {
|
||||
return new Delegate(FileSystems.newFileSystem(jarUri, create ? jfsArgsCreate : jfsArgsEmpty), true);
|
||||
} catch (FileSystemAlreadyExistsException e) {
|
||||
return new Delegate(FileSystems.getFileSystem(jarUri), false);
|
||||
}
|
||||
return new Delegate(FileSystemReference.open(uri, create));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,14 +27,11 @@ package net.fabricmc.loom.util;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Path;
|
||||
|
||||
import com.google.gson.JsonObject;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import net.fabricmc.loom.LoomGradlePlugin;
|
||||
|
||||
public final class ModUtils {
|
||||
private ModUtils() {
|
||||
}
|
||||
@@ -49,18 +46,10 @@ public final class ModUtils {
|
||||
|
||||
@Nullable
|
||||
public static JsonObject getFabricModJson(Path path) {
|
||||
final byte[] modJsonBytes;
|
||||
|
||||
try {
|
||||
modJsonBytes = ZipUtils.unpackNullable(path, "fabric.mod.json");
|
||||
return ZipUtils.unpackGson(path, "fabric.mod.json", JsonObject.class);
|
||||
} catch (IOException e) {
|
||||
throw new UncheckedIOException("Failed to extract fabric.mod.json from " + path, e);
|
||||
}
|
||||
|
||||
if (modJsonBytes == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return LoomGradlePlugin.GSON.fromJson(new String(modJsonBytes, StandardCharsets.UTF_8), JsonObject.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,6 +107,16 @@ public class ZipUtils {
|
||||
}
|
||||
}
|
||||
|
||||
public static <T> T unpackGson(Path zip, String path, Class<T> clazz) throws IOException {
|
||||
final byte[] bytes = unpack(zip, path);
|
||||
return LoomGradlePlugin.GSON.fromJson(new String(bytes, StandardCharsets.UTF_8), clazz);
|
||||
}
|
||||
|
||||
public static <T> T unpackJackson(Path zip, String path, Class<T> clazz) throws IOException {
|
||||
final byte[] bytes = unpack(zip, path);
|
||||
return LoomGradlePlugin.OBJECT_MAPPER.readValue(new String(bytes, StandardCharsets.UTF_8), clazz);
|
||||
}
|
||||
|
||||
public static void pack(Path from, Path zip) throws IOException {
|
||||
Files.deleteIfExists(zip);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user