aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/fabricmc/loom
diff options
context:
space:
mode:
authorFudge <natan.lifsiz@gmail.com>2020-08-24 22:10:21 +0300
committerGitHub <noreply@github.com>2020-08-24 20:10:21 +0100
commitc4f25622a21e280deafa2e5dd95250db74948b97 (patch)
treea48a3dafb77b0eba66f40e931cd39efe0d9b4c70 /src/main/java/net/fabricmc/loom
parent032ee6f9f110192e9243ee8d38eb966564823e21 (diff)
downloadarchitectury-loom-c4f25622a21e280deafa2e5dd95250db74948b97.tar.gz
architectury-loom-c4f25622a21e280deafa2e5dd95250db74948b97.tar.bz2
architectury-loom-c4f25622a21e280deafa2e5dd95250db74948b97.zip
Allow adding additional jar processors (#247)
* processors * cleanup * oops * make changes * blargh
Diffstat (limited to 'src/main/java/net/fabricmc/loom')
-rw-r--r--src/main/java/net/fabricmc/loom/LoomGradleExtension.java17
-rw-r--r--src/main/java/net/fabricmc/loom/processors/JarProcessor.java10
-rw-r--r--src/main/java/net/fabricmc/loom/processors/JarProcessorManager.java28
-rw-r--r--src/main/java/net/fabricmc/loom/providers/MappingsProvider.java19
-rw-r--r--src/main/java/net/fabricmc/loom/util/accesswidener/AccessWidenerJarProcessor.java13
5 files changed, 50 insertions, 37 deletions
diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
index a93a0c3f..a15623c2 100644
--- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
+++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java
@@ -47,6 +47,7 @@ import org.gradle.api.file.ConfigurableFileCollection;
import org.gradle.api.plugins.BasePluginConvention;
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
+import net.fabricmc.loom.processors.JarProcessor;
import net.fabricmc.loom.processors.JarProcessorManager;
import net.fabricmc.loom.providers.MappingsProvider;
import net.fabricmc.loom.providers.MinecraftMappedProvider;
@@ -67,6 +68,7 @@ public class LoomGradleExtension {
private final ConfigurableFileCollection unmappedMods;
final List<LoomDecompiler> decompilers = new ArrayList<>();
+ private final List<JarProcessor> jarProcessors = new ArrayList<>();
// Not to be set in the build.gradle
private final Project project;
@@ -84,6 +86,17 @@ public class LoomGradleExtension {
decompilers.add(decompiler);
}
+ /**
+ * Add a transformation over the mapped mc jar.
+ * Adding any jar processor will cause mapped mc jars to be stored per-project so that
+ * different transformation can be applied in different projects.
+ * This means remapping will need to be done individually per-project, which is slower when developing
+ * more than one project using the same minecraft version.
+ */
+ public void addJarProcessor(JarProcessor processor) {
+ jarProcessors.add(processor);
+ }
+
public MappingSet getOrCreateSrcMappingCache(int id, Supplier<MappingSet> factory) {
return srcMappingCache[id] != null ? srcMappingCache[id] : (srcMappingCache[id] = factory.get());
}
@@ -338,6 +351,10 @@ public class LoomGradleExtension {
this.jarProcessorManager = jarProcessorManager;
}
+ public List<JarProcessor> getJarProcessors() {
+ return jarProcessors;
+ }
+
public String getRefmapName() {
if (refmapName == null || refmapName.isEmpty()) {
String defaultRefmapName = project.getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName() + "-refmap.json";
diff --git a/src/main/java/net/fabricmc/loom/processors/JarProcessor.java b/src/main/java/net/fabricmc/loom/processors/JarProcessor.java
index 59bd5485..0a028942 100644
--- a/src/main/java/net/fabricmc/loom/processors/JarProcessor.java
+++ b/src/main/java/net/fabricmc/loom/processors/JarProcessor.java
@@ -26,12 +26,16 @@ package net.fabricmc.loom.processors;
import java.io.File;
-import org.gradle.api.Project;
-
public interface JarProcessor {
- void setup(Project project);
+ void setup();
+ /**
+ * Currently this is a destructive process that replaces the existing jar.
+ */
void process(File file);
+ /**
+ * Return true to make all jar processors run again, return false to use the existing results of jar processing.
+ */
boolean isInvalid(File file);
}
diff --git a/src/main/java/net/fabricmc/loom/processors/JarProcessorManager.java b/src/main/java/net/fabricmc/loom/processors/JarProcessorManager.java
index 579296cb..ab0d86d3 100644
--- a/src/main/java/net/fabricmc/loom/processors/JarProcessorManager.java
+++ b/src/main/java/net/fabricmc/loom/processors/JarProcessorManager.java
@@ -25,37 +25,17 @@
package net.fabricmc.loom.processors;
import java.io.File;
-import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
-import org.gradle.api.Project;
-
-import net.fabricmc.loom.util.accesswidener.AccessWidenerJarProcessor;
-import net.fabricmc.loom.LoomGradleExtension;
-
public class JarProcessorManager {
- private final Project project;
- private final LoomGradleExtension extension;
-
private final List<JarProcessor> jarProcessors;
- public JarProcessorManager(Project project) {
- this.project = project;
- this.extension = project.getExtensions().getByType(LoomGradleExtension.class);
- jarProcessors = setupProcessors();
+ public JarProcessorManager(List<JarProcessor> jarProcessors) {
+ this.jarProcessors = jarProcessors;
}
- //TODO possibly expand via an API?
- private List<JarProcessor> setupProcessors() {
- List<JarProcessor> jarProcessors = new ArrayList<>();
-
- if (extension.accessWidener != null) {
- jarProcessors.add(new AccessWidenerJarProcessor());
- }
-
- jarProcessors.forEach(jarProcessor -> jarProcessor.setup(project));
- return Collections.unmodifiableList(jarProcessors);
+ public void setupProcessors() {
+ jarProcessors.forEach(JarProcessor::setup);
}
public boolean active() {
diff --git a/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java b/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java
index 17b4daa7..21c9b1f8 100644
--- a/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java
+++ b/src/main/java/net/fabricmc/loom/providers/MappingsProvider.java
@@ -44,18 +44,20 @@ import org.zeroturnaround.zip.FileSource;
import org.zeroturnaround.zip.ZipEntrySource;
import org.zeroturnaround.zip.ZipUtil;
+import net.fabricmc.loom.LoomGradleExtension;
+import net.fabricmc.loom.processors.JarProcessorManager;
+import net.fabricmc.loom.processors.MinecraftProcessedProvider;
import net.fabricmc.loom.util.Constants;
+import net.fabricmc.loom.util.DeletingFileVisitor;
import net.fabricmc.loom.util.DependencyProvider;
import net.fabricmc.loom.util.DownloadUtil;
+import net.fabricmc.loom.util.accesswidener.AccessWidenerJarProcessor;
import net.fabricmc.mapping.reader.v2.TinyV2Factory;
import net.fabricmc.mapping.tree.TinyTree;
import net.fabricmc.stitch.Command;
import net.fabricmc.stitch.commands.CommandProposeFieldNames;
import net.fabricmc.stitch.commands.tinyv2.CommandMergeTinyV2;
import net.fabricmc.stitch.commands.tinyv2.CommandReorderTinyV2;
-import net.fabricmc.loom.processors.JarProcessorManager;
-import net.fabricmc.loom.processors.MinecraftProcessedProvider;
-import net.fabricmc.loom.util.DeletingFileVisitor;
public class MappingsProvider extends DependencyProvider {
public MinecraftMappedProvider mappedProvider;
@@ -140,8 +142,15 @@ public class MappingsProvider extends DependencyProvider {
addDependency(tinyMappingsJar, Constants.MAPPINGS_FINAL);
- JarProcessorManager processorManager = new JarProcessorManager(getProject());
- getExtension().setJarProcessorManager(processorManager);
+ LoomGradleExtension extension = getExtension();
+
+ if (extension.accessWidener != null) {
+ extension.addJarProcessor(new AccessWidenerJarProcessor(getProject()));
+ }
+
+ JarProcessorManager processorManager = new JarProcessorManager(extension.getJarProcessors());
+ extension.setJarProcessorManager(processorManager);
+ processorManager.setupProcessors();
if (processorManager.active()) {
mappedProvider = new MinecraftProcessedProvider(getProject(), processorManager);
diff --git a/src/main/java/net/fabricmc/loom/util/accesswidener/AccessWidenerJarProcessor.java b/src/main/java/net/fabricmc/loom/util/accesswidener/AccessWidenerJarProcessor.java
index ede382b6..4770c385 100644
--- a/src/main/java/net/fabricmc/loom/util/accesswidener/AccessWidenerJarProcessor.java
+++ b/src/main/java/net/fabricmc/loom/util/accesswidener/AccessWidenerJarProcessor.java
@@ -50,20 +50,23 @@ import org.zeroturnaround.zip.transform.ByteArrayZipEntryTransformer;
import org.zeroturnaround.zip.transform.ZipEntryTransformer;
import org.zeroturnaround.zip.transform.ZipEntryTransformerEntry;
-import net.fabricmc.mappings.EntryTriple;
import net.fabricmc.loom.LoomGradleExtension;
-import net.fabricmc.loom.util.Checksum;
import net.fabricmc.loom.processors.JarProcessor;
+import net.fabricmc.loom.util.Checksum;
+import net.fabricmc.mappings.EntryTriple;
import net.fabricmc.tinyremapper.TinyRemapper;
public class AccessWidenerJarProcessor implements JarProcessor {
private AccessWidener accessWidener = new AccessWidener();
- private Project project;
+ private final Project project;
private byte[] inputHash;
- @Override
- public void setup(Project project) {
+ public AccessWidenerJarProcessor(Project project) {
this.project = project;
+ }
+
+ @Override
+ public void setup() {
LoomGradleExtension loomGradleExtension = project.getExtensions().getByType(LoomGradleExtension.class);
if (!loomGradleExtension.accessWidener.exists()) {