aboutsummaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-11-06 17:19:57 +0800
committershedaniel <daniel@shedaniel.me>2021-11-06 17:19:57 +0800
commitc412c1135474e7ec3db1ef8f9894113336b7c78f (patch)
treec664533cc80a73d93620476edc2f3528412aa2f9 /src/main
parenta48989057d62dc573eb919d6cbbd1cabc471f5f1 (diff)
parentcb5c009e1a8978f86e1ce0a0f872ddc20686ae6d (diff)
downloadarchitectury-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')
-rw-r--r--src/main/java/net/fabricmc/loom/LoomGradleExtension.java3
-rw-r--r--src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java7
-rw-r--r--src/main/java/net/fabricmc/loom/api/decompilers/DecompilationMetadata.java3
-rw-r--r--src/main/java/net/fabricmc/loom/decompilers/cfr/CFRObfuscationMapping.java19
-rw-r--r--src/main/java/net/fabricmc/loom/decompilers/cfr/LoomCFRDecompiler.java8
-rw-r--r--src/main/java/net/fabricmc/loom/decompilers/fernflower/FabricFernFlowerDecompiler.java23
-rw-r--r--src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java8
-rw-r--r--src/main/java/net/fabricmc/loom/extension/MinecraftGradleExtension.java6
-rw-r--r--src/main/java/net/fabricmc/loom/task/GenerateSourcesTask.java12
-rw-r--r--src/main/java/net/fabricmc/loom/task/LoomTasks.java33
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"));
+ });
});
}
}