diff options
author | shedaniel <daniel@shedaniel.me> | 2021-11-06 17:19:57 +0800 |
---|---|---|
committer | shedaniel <daniel@shedaniel.me> | 2021-11-06 17:19:57 +0800 |
commit | c412c1135474e7ec3db1ef8f9894113336b7c78f (patch) | |
tree | c664533cc80a73d93620476edc2f3528412aa2f9 /src/main/java | |
parent | a48989057d62dc573eb919d6cbbd1cabc471f5f1 (diff) | |
parent | cb5c009e1a8978f86e1ce0a0f872ddc20686ae6d (diff) | |
download | architectury-loom-c412c1135474e7ec3db1ef8f9894113336b7c78f.tar.gz architectury-loom-c412c1135474e7ec3db1ef8f9894113336b7c78f.tar.bz2 architectury-loom-c412c1135474e7ec3db1ef8f9894113336b7c78f.zip |
Merge remote-tracking branch 'FabricMC/dev/0.10' into dev/0.10.0
# Conflicts:
# src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java
# src/main/java/net/fabricmc/loom/extension/MinecraftGradleExtension.java
Diffstat (limited to 'src/main/java')
10 files changed, 94 insertions, 28 deletions
diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index c2d41460..85855067 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -106,8 +106,7 @@ public interface LoomGradleExtension extends LoomGradleExtensionAPI { } default String getIntermediaryUrl(String minecraftVersion) { - // TODO reimplement a way to change this, was never really supported api anyway - return String.format("https://maven.fabricmc.net/net/fabricmc/intermediary/%1$s/intermediary-%1$s-v2.jar", minecraftVersion); + return String.format(this.getIntermediaryUrl().get(), minecraftVersion); } @Override diff --git a/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java b/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java index 01101461..fbbd3e37 100644 --- a/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java +++ b/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java @@ -217,6 +217,13 @@ public interface LoomGradleExtensionAPI { */ Property<Boolean> getEnableTransitiveAccessWideners(); + /** + * Use "%1$s" as a placeholder for the minecraft version. + * + * @return the intermediary url template + */ + Property<String> getIntermediaryUrl(); + // =================== // Architectury Loom // =================== diff --git a/src/main/java/net/fabricmc/loom/api/decompilers/DecompilationMetadata.java b/src/main/java/net/fabricmc/loom/api/decompilers/DecompilationMetadata.java index a4f6dcfa..191a045b 100644 --- a/src/main/java/net/fabricmc/loom/api/decompilers/DecompilationMetadata.java +++ b/src/main/java/net/fabricmc/loom/api/decompilers/DecompilationMetadata.java @@ -26,8 +26,9 @@ package net.fabricmc.loom.api.decompilers; import java.nio.file.Path; import java.util.Collection; +import java.util.Map; import net.fabricmc.loom.util.IOStringConsumer; -public record DecompilationMetadata(int numberOfThreads, Path javaDocs, Collection<Path> libraries, IOStringConsumer logger) { +public record DecompilationMetadata(int numberOfThreads, Path javaDocs, Collection<Path> libraries, IOStringConsumer logger, Map<String, String> options) { } diff --git a/src/main/java/net/fabricmc/loom/decompilers/cfr/CFRObfuscationMapping.java b/src/main/java/net/fabricmc/loom/decompilers/cfr/CFRObfuscationMapping.java index c8baa2a7..aae26019 100644 --- a/src/main/java/net/fabricmc/loom/decompilers/cfr/CFRObfuscationMapping.java +++ b/src/main/java/net/fabricmc/loom/decompilers/cfr/CFRObfuscationMapping.java @@ -30,6 +30,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -126,6 +127,10 @@ public class CFRObfuscationMapping extends NullMapping { } } + if (comment != null && !recordComponentDocs.isEmpty()) { + print(" * "); + } + for (String componentDoc : recordComponentDocs) { print(" * ").print(componentDoc).newln(); } @@ -154,13 +159,23 @@ public class CFRObfuscationMapping extends NullMapping { lines.addAll(Arrays.asList(comment.split("\\R"))); } - for (MappingTree.MethodArgMapping arg : mapping.getArgs()) { + final Collection<? extends MappingTree.MethodArgMapping> methodArgs = mapping.getArgs(); + final List<String> params = new ArrayList<>(); + + for (MappingTree.MethodArgMapping arg : methodArgs) { String argComment = arg.getComment(); if (argComment != null) { - lines.addAll(Arrays.asList(("@param " + arg.getSrcName() + " " + argComment).split("\\R"))); + params.addAll(Arrays.asList(("@param " + arg.getSrcName() + " " + argComment).split("\\R"))); } } + + // Add a blank line between params and the comment. + if (!lines.isEmpty() && !params.isEmpty()) { + lines.add(""); + } + + lines.addAll(params); } if (!lines.isEmpty()) { diff --git a/src/main/java/net/fabricmc/loom/decompilers/cfr/LoomCFRDecompiler.java b/src/main/java/net/fabricmc/loom/decompilers/cfr/LoomCFRDecompiler.java index bbfb0be2..cb715139 100644 --- a/src/main/java/net/fabricmc/loom/decompilers/cfr/LoomCFRDecompiler.java +++ b/src/main/java/net/fabricmc/loom/decompilers/cfr/LoomCFRDecompiler.java @@ -32,6 +32,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Collections; +import java.util.HashMap; import java.util.Map; import java.util.jar.Attributes; import java.util.jar.JarOutputStream; @@ -64,7 +65,10 @@ public class LoomCFRDecompiler implements LoomDecompiler { @Override public void decompile(Path compiledJar, Path sourcesDestination, Path linemapDestination, DecompilationMetadata metaData) { final String path = compiledJar.toAbsolutePath().toString(); - final Options options = OptionsImpl.getFactory().create(DECOMPILE_OPTIONS); + final Map<String, String> allOptions = new HashMap<>(DECOMPILE_OPTIONS); + allOptions.putAll(metaData.options()); + + final Options options = OptionsImpl.getFactory().create(allOptions); ClassFileSourceImpl classFileSource = new ClassFileSourceImpl(options); @@ -138,7 +142,7 @@ public class LoomCFRDecompiler implements LoomDecompiler { decompiler.decompile(Paths.get("input.jar"), Paths.get("output-sources.jar"), lineMap, - new DecompilationMetadata(4, null, Collections.emptyList(), null) + new DecompilationMetadata(4, null, Collections.emptyList(), null, Collections.emptyMap()) ); LineNumberRemapper lineNumberRemapper = new LineNumberRemapper(); diff --git a/src/main/java/net/fabricmc/loom/decompilers/fernflower/FabricFernFlowerDecompiler.java b/src/main/java/net/fabricmc/loom/decompilers/fernflower/FabricFernFlowerDecompiler.java index c3009448..9ad8111e 100644 --- a/src/main/java/net/fabricmc/loom/decompilers/fernflower/FabricFernFlowerDecompiler.java +++ b/src/main/java/net/fabricmc/loom/decompilers/fernflower/FabricFernFlowerDecompiler.java @@ -25,6 +25,7 @@ package net.fabricmc.loom.decompilers.fernflower; import java.nio.file.Path; +import java.util.HashMap; import java.util.Map; import org.jetbrains.java.decompiler.main.Fernflower; @@ -38,21 +39,25 @@ import net.fabricmc.loom.api.decompilers.LoomDecompiler; public final class FabricFernFlowerDecompiler implements LoomDecompiler { @Override public String name() { - return "FabricFlower"; // Or something else? + return "FernFlower"; } @Override public void decompile(Path compiledJar, Path sourcesDestination, Path linemapDestination, DecompilationMetadata metaData) { - Map<String, Object> options = Map.of( - IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "1", - IFernflowerPreferences.BYTECODE_SOURCE_MAPPING, "1", - IFernflowerPreferences.REMOVE_SYNTHETIC, "1", - IFernflowerPreferences.LOG_LEVEL, "trace", - IFernflowerPreferences.THREADS, String.valueOf(metaData.numberOfThreads()), - IFernflowerPreferences.INDENT_STRING, "\t", - IFabricJavadocProvider.PROPERTY_NAME, new TinyJavadocProvider(metaData.javaDocs().toFile()) + final Map<String, Object> options = new HashMap<>( + Map.of( + IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "1", + IFernflowerPreferences.BYTECODE_SOURCE_MAPPING, "1", + IFernflowerPreferences.REMOVE_SYNTHETIC, "1", + IFernflowerPreferences.LOG_LEVEL, "trace", + IFernflowerPreferences.THREADS, String.valueOf(metaData.numberOfThreads()), + IFernflowerPreferences.INDENT_STRING, "\t", + IFabricJavadocProvider.PROPERTY_NAME, new TinyJavadocProvider(metaData.javaDocs().toFile()) + ) ); + options.putAll(metaData.options()); + IResultSaver saver = new ThreadSafeResultSaver(sourcesDestination::toFile, linemapDestination::toFile); Fernflower ff = new Fernflower(FernFlowerUtils::getBytecode, saver, options, new FernflowerLogger(metaData.logger())); diff --git a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java index 66ddeb0b..b1bdb30d 100644 --- a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java +++ b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java @@ -77,6 +77,7 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA protected final Property<String> customManifest; protected final Property<Boolean> setupRemappedVariants; protected final Property<Boolean> transitiveAccessWideners; + protected final Property<String> intermediary; private final ModVersionParser versionParser; @@ -111,6 +112,8 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA this.transitiveAccessWideners = project.getObjects().property(Boolean.class) .convention(true); this.transitiveAccessWideners.finalizeValueOnRead(); + this.intermediary = project.getObjects().property(String.class) + .convention("https://maven.fabricmc.net/net/fabricmc/intermediary/%1$s/intermediary-%1$s-v2.jar"); this.versionParser = new ModVersionParser(project); @@ -220,6 +223,11 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA protected abstract LoomFiles getFiles(); @Override + public Property<String> getIntermediaryUrl() { + return intermediary; + } + + @Override public void disableDeprecatedPomGeneration(MavenPublication publication) { net.fabricmc.loom.configuration.MavenPublication.excludePublication(publication); } diff --git a/src/main/java/net/fabricmc/loom/extension/MinecraftGradleExtension.java b/src/main/java/net/fabricmc/loom/extension/MinecraftGradleExtension.java index 36497f4f..04c667e8 100644 --- a/src/main/java/net/fabricmc/loom/extension/MinecraftGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/extension/MinecraftGradleExtension.java @@ -166,6 +166,12 @@ public class MinecraftGradleExtension implements LoomGradleExtensionAPI { } @Override + public Property<String> getIntermediaryUrl() { + reportDeprecation(); + return parent.getIntermediaryUrl(); + } + + @Override public void silentMojangMappingsLicense() { reportDeprecation(); parent.silentMojangMappingsLicense(); diff --git a/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java b/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java index 2dbbdec6..f9c75b9e 100644 --- a/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java @@ -44,6 +44,7 @@ import javax.inject.Inject; import org.gradle.api.Project; import org.gradle.api.file.ConfigurableFileCollection; import org.gradle.api.file.RegularFileProperty; +import org.gradle.api.provider.MapProperty; import org.gradle.api.provider.Property; import org.gradle.api.tasks.Input; import org.gradle.api.tasks.InputFile; @@ -84,6 +85,9 @@ public abstract class GenerateSourcesTask extends AbstractLoomTask { @Input public abstract Property<Long> getMaxMemory(); + @Input + public abstract MapProperty<String, String> getOptions(); + @Inject public abstract WorkerExecutor getWorkerExecutor(); @@ -99,6 +103,7 @@ public abstract class GenerateSourcesTask extends AbstractLoomTask { getOutputs().upToDateWhen((o) -> false); getMaxMemory().convention(4096L).finalizeValueOnRead(); + getOptions().finalizeValueOnRead(); } @TaskAction @@ -135,6 +140,8 @@ public abstract class GenerateSourcesTask extends AbstractLoomTask { workQueue.submit(DecompileAction.class, params -> { params.getDecompilerClass().set(decompiler.getClass().getCanonicalName()); + params.getOptions().set(getOptions()); + params.getInputJar().set(getInputJar()); params.getRuntimeJar().set(getExtension().getMappingsProvider().mappedProvider.getMappedJar()); params.getSourcesDestinationJar().set(getMappedJarFileWithSuffix("-sources.jar")); @@ -183,6 +190,8 @@ public abstract class GenerateSourcesTask extends AbstractLoomTask { public interface DecompileParams extends WorkParameters { Property<String> getDecompilerClass(); + MapProperty<String, String> getOptions(); + RegularFileProperty getInputJar(); RegularFileProperty getRuntimeJar(); RegularFileProperty getSourcesDestinationJar(); @@ -232,7 +241,8 @@ public abstract class GenerateSourcesTask extends AbstractLoomTask { Runtime.getRuntime().availableProcessors(), getParameters().getMappings().get().getAsFile().toPath(), getLibraries(), - logger + logger, + getParameters().getOptions().get() ); decompiler.decompile( diff --git a/src/main/java/net/fabricmc/loom/task/LoomTasks.java b/src/main/java/net/fabricmc/loom/task/LoomTasks.java index 57b9da84..c2857fa7 100644 --- a/src/main/java/net/fabricmc/loom/task/LoomTasks.java +++ b/src/main/java/net/fabricmc/loom/task/LoomTasks.java @@ -37,7 +37,6 @@ import net.fabricmc.loom.api.decompilers.LoomDecompiler; import net.fabricmc.loom.configuration.ide.RunConfigSettings; import net.fabricmc.loom.configuration.ide.SetupIntelijRunConfigs; import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl; -import net.fabricmc.loom.decompilers.fernflower.FabricFernFlowerDecompiler; import net.fabricmc.loom.util.Constants; public final class LoomTasks { @@ -157,7 +156,7 @@ public final class LoomTasks { return; } - File inputJar = mappingsProvider.mappedProvider.getMappedJar(); + File mappedJar = mappingsProvider.mappedProvider.getMappedJar(); if (mappingsProvider.hasUnpickDefinitions()) { File outputJar = mappingsProvider.mappedProvider.getUnpickedJar(); @@ -168,21 +167,33 @@ public final class LoomTasks { unpickJarTask.getOutputJar().set(outputJar); }); - inputJar = outputJar; + mappedJar = outputJar; } + final File inputJar = mappedJar; + extension.getGameDecompilers().finalizeValue(); for (LoomDecompiler decompiler : extension.getGameDecompilers().get()) { - String taskName = decompiler instanceof FabricFernFlowerDecompiler ? "genSources" : "genSourcesWith" + decompiler.name(); - // decompiler will be passed to the constructor of GenerateSourcesTask - GenerateSourcesTask generateSourcesTask = tasks.register(taskName, GenerateSourcesTask.class, decompiler).get(); - generateSourcesTask.getInputJar().set(inputJar); - - if (mappingsProvider.hasUnpickDefinitions()) { - generateSourcesTask.dependsOn(tasks.getByName("unpickJar")); - } + String taskName = "genSourcesWith" + decompiler.name(); + // Decompiler will be passed to the constructor of GenerateSourcesTask + tasks.register(taskName, GenerateSourcesTask.class, decompiler).configure(task -> { + task.setDescription("Decompile minecraft using %s.".formatted(decompiler.name())); + task.setGroup(Constants.TaskGroup.FABRIC); + task.getInputJar().set(inputJar); + + if (mappingsProvider.hasUnpickDefinitions()) { + task.dependsOn(tasks.getByName("unpickJar")); + } + }); } + + tasks.register("genSources", task -> { + task.setDescription("Decompile minecraft using the default decompiler."); + task.setGroup(Constants.TaskGroup.FABRIC); + + task.dependsOn(project.getTasks().getByName("genSourcesWithCfr")); + }); }); } } |