From 05f38c567e2a709a6f86ed980c604a33a8d402d4 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Mon, 13 Nov 2023 21:22:09 +0800 Subject: [PATCH] Revert "Split mods.toml parsing" This reverts commit ede04957cc275f42047ba40f4c5c8d87d56ed15d. --- .../loom/metadata/ForgeModsToml.java | 29 -------- .../loom/metadata/ModMetadataFiles.java | 72 ++++++------------- .../architectury/loom/metadata/ModsToml.java | 23 +++--- .../loom/metadata/NeoForgeModsToml.java | 47 ------------ .../accesswidener/AccessWidenerFile.java | 5 +- .../mods/AccessWidenerUtils.java | 2 +- .../processors/SpecContextImpl.java | 4 +- .../net/fabricmc/loom/task/RemapJarTask.java | 4 +- .../loom/util/fmj/FabricModJsonFactory.java | 20 +++--- .../loom/util/fmj/FabricModJsonHelpers.java | 2 +- 10 files changed, 51 insertions(+), 157 deletions(-) delete mode 100644 src/main/java/dev/architectury/loom/metadata/ForgeModsToml.java delete mode 100644 src/main/java/dev/architectury/loom/metadata/NeoForgeModsToml.java diff --git a/src/main/java/dev/architectury/loom/metadata/ForgeModsToml.java b/src/main/java/dev/architectury/loom/metadata/ForgeModsToml.java deleted file mode 100644 index a6364971fa..0000000000 --- a/src/main/java/dev/architectury/loom/metadata/ForgeModsToml.java +++ /dev/null @@ -1,29 +0,0 @@ -package dev.architectury.loom.metadata; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Path; - -import com.electronwill.nightconfig.core.Config; - -public final class ForgeModsToml extends ModsToml { - private ForgeModsToml(Config config) { - super(config); - } - - public static ForgeModsToml of(byte[] utf8) { - return of(utf8, ForgeModsToml::new); - } - - public static ForgeModsToml of(String text) { - return of(text, ForgeModsToml::new); - } - - public static ForgeModsToml of(Path path) throws IOException { - return of(path, ForgeModsToml::new); - } - - public static ForgeModsToml of(File file) throws IOException { - return of(file.toPath(), ForgeModsToml::new); - } -} diff --git a/src/main/java/dev/architectury/loom/metadata/ModMetadataFiles.java b/src/main/java/dev/architectury/loom/metadata/ModMetadataFiles.java index 4de5211fcc..ab98500fae 100644 --- a/src/main/java/dev/architectury/loom/metadata/ModMetadataFiles.java +++ b/src/main/java/dev/architectury/loom/metadata/ModMetadataFiles.java @@ -5,6 +5,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Map; +import java.util.function.Function; import java.util.function.Supplier; import com.google.common.collect.ImmutableMap; @@ -13,7 +14,6 @@ import org.gradle.api.tasks.SourceSet; import org.jetbrains.annotations.Nullable; -import net.fabricmc.loom.util.ModPlatform; import net.fabricmc.loom.util.ZipUtils; import net.fabricmc.loom.util.gradle.SourceSetHelper; @@ -22,27 +22,35 @@ */ public final class ModMetadataFiles { private static final Logger LOGGER = Logging.getLogger(ModMetadataFiles.class); - private static final Map SINGLE_FILE_METADATA_TYPES = ImmutableMap.builder() - .put(QuiltModJson.FILE_NAME, MetadataFileProvider.withPlatform((bytes, platform) -> QuiltModJson.of(bytes), ModPlatform.QUILT)) - .put(ArchitecturyCommonJson.FILE_NAME, (bytes, platform) -> ArchitecturyCommonJson.of(bytes)) - .put(ModsToml.FILE_PATH, MetadataFileProvider.concat( - MetadataFileProvider.withPlatform((bytes, platform) -> ForgeModsToml.of(bytes), ModPlatform.FORGE), - MetadataFileProvider.withPlatform((bytes, platform) -> NeoForgeModsToml.of(bytes), ModPlatform.NEOFORGE) - ).onError("Could not load mods.toml", () -> new ErroringModMetadataFile("mods.toml"))) + private static final Map> SINGLE_FILE_METADATA_TYPES = ImmutableMap.>builder() + .put(QuiltModJson.FILE_NAME, QuiltModJson::of) + .put(ArchitecturyCommonJson.FILE_NAME, ArchitecturyCommonJson::of) + .put(ModsToml.FILE_PATH, onError(ModsToml::of, "Could not load mods.toml", () -> new ErroringModMetadataFile("mods.toml"))) .build(); + private static Function onError(Function fn, String message, Supplier onError) { + return a -> { + try { + return fn.apply(a); + } catch (Exception e) { + LOGGER.info(message, e); + return onError.get(); + } + }; + } + /** * Reads the mod metadata file from a jar. * * @param jar the path to the jar file * @return the mod metadata file, or {@code null} if not found */ - public static @Nullable ModMetadataFile fromJar(Path jar, @Nullable ModPlatform platform) throws IOException { + public static @Nullable ModMetadataFile fromJar(Path jar) throws IOException { for (final String filePath : SINGLE_FILE_METADATA_TYPES.keySet()) { final byte @Nullable [] bytes = ZipUtils.unpackNullable(jar, filePath); if (bytes != null) { - return SINGLE_FILE_METADATA_TYPES.get(filePath).apply(bytes, platform); + return SINGLE_FILE_METADATA_TYPES.get(filePath).apply(bytes); } } @@ -55,12 +63,12 @@ public final class ModMetadataFiles { * @param directory the path to the directory * @return the mod metadata file, or {@code null} if not found */ - public static @Nullable ModMetadataFile fromDirectory(Path directory, @Nullable ModPlatform platform) throws IOException { + public static @Nullable ModMetadataFile fromDirectory(Path directory) throws IOException { for (final String filePath : SINGLE_FILE_METADATA_TYPES.keySet()) { final Path metadataPath = directory.resolve(filePath); if (Files.exists(metadataPath)) { - return SINGLE_FILE_METADATA_TYPES.get(filePath).apply(Files.readAllBytes(metadataPath), platform); + return SINGLE_FILE_METADATA_TYPES.get(filePath).apply(Files.readAllBytes(metadataPath)); } } @@ -73,51 +81,15 @@ public final class ModMetadataFiles { * @param sourceSets the source sets to read from * @return the mod metadata file, or {@code null} if not found */ - public static @Nullable ModMetadataFile fromSourceSets(@Nullable ModPlatform platform, SourceSet... sourceSets) throws IOException { + public static @Nullable ModMetadataFile fromSourceSets(SourceSet... sourceSets) throws IOException { for (final String filePath : SINGLE_FILE_METADATA_TYPES.keySet()) { final @Nullable File file = SourceSetHelper.findFirstFileInResource(filePath, sourceSets); if (file != null) { - return SINGLE_FILE_METADATA_TYPES.get(filePath).apply(Files.readAllBytes(file.toPath()), platform); + return SINGLE_FILE_METADATA_TYPES.get(filePath).apply(Files.readAllBytes(file.toPath())); } } return null; } - - @FunctionalInterface - private interface MetadataFileProvider { - @Nullable - ModMetadataFile apply(byte[] bytes, @Nullable ModPlatform platform); - - default MetadataFileProvider onError(String message, Supplier onError) { - MetadataFileProvider provider = this; - return (bytes, platform) -> { - try { - return provider.apply(bytes, platform); - } catch (Exception e) { - LOGGER.info(message, e); - return onError.get(); - } - }; - } - - static MetadataFileProvider withPlatform(MetadataFileProvider provider, ModPlatform requiredPlatform) { - return (bytes, platform) -> { - if (requiredPlatform != platform) return null; - return provider.apply(bytes, platform); - }; - } - - static MetadataFileProvider concat(MetadataFileProvider... providers) { - return (bytes, platform) -> { - for (MetadataFileProvider provider : providers) { - ModMetadataFile file = provider.apply(bytes, platform); - if (file != null) return file; - } - - return null; - }; - } - } } diff --git a/src/main/java/dev/architectury/loom/metadata/ModsToml.java b/src/main/java/dev/architectury/loom/metadata/ModsToml.java index 04d393abe4..5546a85360 100644 --- a/src/main/java/dev/architectury/loom/metadata/ModsToml.java +++ b/src/main/java/dev/architectury/loom/metadata/ModsToml.java @@ -10,7 +10,6 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.function.Function; import com.electronwill.nightconfig.core.Config; import com.electronwill.nightconfig.core.io.ParsingException; @@ -21,36 +20,36 @@ import net.fabricmc.loom.configuration.ifaceinject.InterfaceInjectionProcessor; import net.fabricmc.loom.util.ExceptionUtil; -public abstract sealed class ModsToml implements ModMetadataFile permits ForgeModsToml, NeoForgeModsToml { +public final class ModsToml implements ModMetadataFile { public static final String FILE_PATH = "META-INF/mods.toml"; - protected final Config config; + private final Config config; - protected ModsToml(Config config) { + private ModsToml(Config config) { this.config = Objects.requireNonNull(config); } - static T of(byte[] utf8, Function constructor) { - return of(new String(utf8, StandardCharsets.UTF_8), constructor); + public static ModsToml of(byte[] utf8) { + return of(new String(utf8, StandardCharsets.UTF_8)); } - static T of(String text, Function constructor) { + public static ModsToml of(String text) { try { - return constructor.apply(new TomlParser().parse(text)); + return new ModsToml(new TomlParser().parse(text)); } catch (ParsingException e) { throw ExceptionUtil.createDescriptiveWrapper(IllegalArgumentException::new, "Could not parse mods.toml", e); } } - static T of(Path path, Function constructor) throws IOException { + public static ModsToml of(Path path) throws IOException { try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) { - return constructor.apply(new TomlParser().parse(reader)); + return new ModsToml(new TomlParser().parse(reader)); } catch (ParsingException e) { throw ExceptionUtil.createDescriptiveWrapper(IllegalArgumentException::new, "Could not parse mods.toml", e); } } - static T of(File file, Function constructor) throws IOException { - return of(file.toPath(), constructor); + public static ModsToml of(File file) throws IOException { + return of(file.toPath()); } @Override diff --git a/src/main/java/dev/architectury/loom/metadata/NeoForgeModsToml.java b/src/main/java/dev/architectury/loom/metadata/NeoForgeModsToml.java deleted file mode 100644 index 01146a1c57..0000000000 --- a/src/main/java/dev/architectury/loom/metadata/NeoForgeModsToml.java +++ /dev/null @@ -1,47 +0,0 @@ -package dev.architectury.loom.metadata; - -import java.io.File; -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.Optional; - -import com.electronwill.nightconfig.core.Config; -import com.google.common.collect.ImmutableList; - -public final class NeoForgeModsToml extends ModsToml { - private NeoForgeModsToml(Config config) { - super(config); - } - - public static NeoForgeModsToml of(byte[] utf8) { - return of(utf8, NeoForgeModsToml::new); - } - - public static NeoForgeModsToml of(String text) { - return of(text, NeoForgeModsToml::new); - } - - public static NeoForgeModsToml of(Path path) throws IOException { - return of(path, NeoForgeModsToml::new); - } - - public static NeoForgeModsToml of(File file) throws IOException { - return of(file.toPath(), NeoForgeModsToml::new); - } - - @Override - public List getMixinConfigs() { - Optional> mixins = config.getOptional("mixins"); - if (mixins.isEmpty()) return List.of(); - - final ImmutableList.Builder configs = ImmutableList.builder(); - - for (final Config mixin : mixins.get()) { - final Optional config = mixin.getOptional("config"); - config.ifPresent(configs::add); - } - - return configs.build(); - } -} diff --git a/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java b/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java index 2526ec07da..522c43b7eb 100644 --- a/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java +++ b/src/main/java/net/fabricmc/loom/configuration/accesswidener/AccessWidenerFile.java @@ -37,7 +37,6 @@ import dev.architectury.loom.metadata.ModMetadataFile; import dev.architectury.loom.metadata.ModMetadataFiles; -import net.fabricmc.loom.util.ModPlatform; import net.fabricmc.loom.util.ZipUtils; import net.fabricmc.loom.util.function.CollectionUtil; @@ -49,7 +48,7 @@ public record AccessWidenerFile( /** * Reads the access-widener contained in a mod jar, or returns null if there is none. */ - public static AccessWidenerFile fromModJar(Path modJarPath, ModPlatform platform) { + public static AccessWidenerFile fromModJar(Path modJarPath) { byte[] modJsonBytes; try { @@ -63,7 +62,7 @@ public static AccessWidenerFile fromModJar(Path modJarPath, ModPlatform platform String awPath; try { - modMetadata = ModMetadataFiles.fromJar(modJarPath, platform); + modMetadata = ModMetadataFiles.fromJar(modJarPath); if (modMetadata != null) { final Set accessWideners = modMetadata.getAccessWideners(); diff --git a/src/main/java/net/fabricmc/loom/configuration/mods/AccessWidenerUtils.java b/src/main/java/net/fabricmc/loom/configuration/mods/AccessWidenerUtils.java index e8de21ee28..bc9170d1d5 100644 --- a/src/main/java/net/fabricmc/loom/configuration/mods/AccessWidenerUtils.java +++ b/src/main/java/net/fabricmc/loom/configuration/mods/AccessWidenerUtils.java @@ -62,7 +62,7 @@ public static AccessWidenerData readAccessWidenerData(Path inputJar, ModPlatform return null; } - final FabricModJson fabricModJson = FabricModJsonFactory.createFromZip(inputJar, platform); + final FabricModJson fabricModJson = FabricModJsonFactory.createFromZip(inputJar); final List classTweakers = List.copyOf(fabricModJson.getClassTweakers().keySet()); if (classTweakers.isEmpty()) { diff --git a/src/main/java/net/fabricmc/loom/configuration/processors/SpecContextImpl.java b/src/main/java/net/fabricmc/loom/configuration/processors/SpecContextImpl.java index 9fbbd8722c..622a0a1c67 100644 --- a/src/main/java/net/fabricmc/loom/configuration/processors/SpecContextImpl.java +++ b/src/main/java/net/fabricmc/loom/configuration/processors/SpecContextImpl.java @@ -69,7 +69,7 @@ private static List getDependentMods(Project project) { final Set artifacts = entry.getSourceConfiguration().get().resolve(); for (File artifact : artifacts) { - final FabricModJson fabricModJson = FabricModJsonFactory.createFromZipNullable(artifact.toPath(), extension.getPlatform().get()); + final FabricModJson fabricModJson = FabricModJsonFactory.createFromZipNullable(artifact.toPath()); if (fabricModJson != null) { mods.add(fabricModJson); @@ -118,7 +118,7 @@ private static Stream getCompileRuntimeModsFromRemapConfigs(Proje .filter(settings -> settings.getApplyDependencyTransforms().get()) .flatMap(resolveArtifacts(project, false)) .filter(runtimeEntries::contains) // Use the intersection of the two configurations. - .map(zipPath -> FabricModJsonFactory.createFromZipOptional(zipPath, extension.getPlatform().get())) + .map(FabricModJsonFactory::createFromZipOptional) .filter(Optional::isPresent) .map(Optional::get) .sorted(Comparator.comparing(FabricModJson::getId)); diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java index 0629db0488..ff2d328dd6 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java @@ -234,7 +234,7 @@ private void setupLegacyMixinRefmapRemapping(RemapParams params) { final MixinExtension mixinExtension = extension.getMixin(); final Collection allMixinConfigs = new LinkedHashSet<>(); - final FabricModJson fabricModJson = FabricModJsonFactory.createFromZipNullable(getInputFile().getAsFile().get().toPath(), extension.getPlatform().get()); + final FabricModJson fabricModJson = FabricModJsonFactory.createFromZipNullable(getInputFile().getAsFile().get().toPath()); if (fabricModJson != null) { allMixinConfigs.addAll(fabricModJson.getMixinConfigurations()); @@ -395,7 +395,7 @@ private boolean injectAccessWidener() throws IOException { } private void remapAccessWidener() throws IOException { - final AccessWidenerFile accessWidenerFile = AccessWidenerFile.fromModJar(inputFile, getParameters().getPlatform().get()); + final AccessWidenerFile accessWidenerFile = AccessWidenerFile.fromModJar(inputFile); if (accessWidenerFile == null) { return; diff --git a/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonFactory.java b/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonFactory.java index a899cfe1c4..bf10137062 100644 --- a/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonFactory.java +++ b/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonFactory.java @@ -71,13 +71,13 @@ public static FabricModJson create(JsonObject jsonObject, FabricModJsonSource so }; } - public static FabricModJson createFromZip(Path zipPath, ModPlatform platform) { + public static FabricModJson createFromZip(Path zipPath) { try { return create(ZipUtils.unpackGson(zipPath, FABRIC_MOD_JSON, JsonObject.class), new FabricModJsonSource.ZipSource(zipPath)); } catch (IOException e) { // Try another mod metadata file if fabric.mod.json wasn't found. try { - @Nullable ModMetadataFile modMetadata = ModMetadataFiles.fromJar(zipPath, platform); + @Nullable ModMetadataFile modMetadata = ModMetadataFiles.fromJar(zipPath); if (modMetadata != null) { return new ModMetadataFabricModJson(modMetadata, new FabricModJsonSource.ZipSource(zipPath)); @@ -93,7 +93,7 @@ public static FabricModJson createFromZip(Path zipPath, ModPlatform platform) { } @Nullable - public static FabricModJson createFromZipNullable(Path zipPath, ModPlatform platform) { + public static FabricModJson createFromZipNullable(Path zipPath) { JsonObject jsonObject; try { @@ -105,7 +105,7 @@ public static FabricModJson createFromZipNullable(Path zipPath, ModPlatform plat if (jsonObject == null) { // Try another mod metadata file if fabric.mod.json wasn't found. try { - final @Nullable ModMetadataFile modMetadata = ModMetadataFiles.fromJar(zipPath, platform); + final @Nullable ModMetadataFile modMetadata = ModMetadataFiles.fromJar(zipPath); if (modMetadata != null) { return new ModMetadataFabricModJson(modMetadata, new FabricModJsonSource.ZipSource(zipPath)); @@ -120,16 +120,16 @@ public static FabricModJson createFromZipNullable(Path zipPath, ModPlatform plat return create(jsonObject, new FabricModJsonSource.ZipSource(zipPath)); } - public static Optional createFromZipOptional(Path zipPath, ModPlatform platform) { - return Optional.ofNullable(createFromZipNullable(zipPath, platform)); + public static Optional createFromZipOptional(Path zipPath) { + return Optional.ofNullable(createFromZipNullable(zipPath)); } - public static FabricModJson createFromDirectory(Path directory, ModPlatform platform) throws IOException { + public static FabricModJson createFromDirectory(Path directory) throws IOException { final Path path = directory.resolve(FABRIC_MOD_JSON); // Try another mod metadata file if fabric.mod.json wasn't found. if (Files.notExists(path)) { - final @Nullable ModMetadataFile modMetadata = ModMetadataFiles.fromDirectory(directory, platform); + final @Nullable ModMetadataFile modMetadata = ModMetadataFiles.fromDirectory(directory); if (modMetadata != null) { return new ModMetadataFabricModJson(modMetadata, new FabricModJsonSource.DirectorySource(directory)); @@ -142,12 +142,12 @@ public static FabricModJson createFromDirectory(Path directory, ModPlatform plat } @Nullable - public static FabricModJson createFromSourceSetsNullable(ModPlatform platform, SourceSet... sourceSets) throws IOException { + public static FabricModJson createFromSourceSetsNullable(SourceSet... sourceSets) throws IOException { final File file = SourceSetHelper.findFirstFileInResource(FABRIC_MOD_JSON, sourceSets); if (file == null) { // Try another mod metadata file if fabric.mod.json wasn't found. - final @Nullable ModMetadataFile modMetadata = ModMetadataFiles.fromSourceSets(platform, sourceSets); + final @Nullable ModMetadataFile modMetadata = ModMetadataFiles.fromSourceSets(sourceSets); if (modMetadata != null) { return new ModMetadataFabricModJson(modMetadata, new FabricModJsonSource.SourceSetSource(sourceSets)); diff --git a/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonHelpers.java b/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonHelpers.java index 77e3eda7b2..923c7a30d4 100644 --- a/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonHelpers.java +++ b/src/main/java/net/fabricmc/loom/util/fmj/FabricModJsonHelpers.java @@ -48,7 +48,7 @@ public static List getModsInProject(Project project) { } try { - final FabricModJson fabricModJson = FabricModJsonFactory.createFromSourceSetsNullable(extension.getPlatform().get(), sourceSets.toArray(SourceSet[]::new)); + final FabricModJson fabricModJson = FabricModJsonFactory.createFromSourceSetsNullable(sourceSets.toArray(SourceSet[]::new)); if (fabricModJson != null) { return List.of(fabricModJson);