aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/fabricmc/loom/task
diff options
context:
space:
mode:
authorasie <kontakt@asie.pl>2019-05-10 13:32:11 +0200
committerasie <kontakt@asie.pl>2019-05-10 13:32:11 +0200
commit64c21c01b8210297b4ef04919ca0fc251a69033a (patch)
tree89c99a272f4ae2ed8e7e368943624982afb921ca /src/main/java/net/fabricmc/loom/task
parenteff108344fae0bfd403ef2bdd1aa37070b746ab8 (diff)
downloadarchitectury-loom-64c21c01b8210297b4ef04919ca0fc251a69033a.tar.gz
architectury-loom-64c21c01b8210297b4ef04919ca0fc251a69033a.tar.bz2
architectury-loom-64c21c01b8210297b4ef04919ca0fc251a69033a.zip
add updateMappings task
Diffstat (limited to 'src/main/java/net/fabricmc/loom/task')
-rw-r--r--src/main/java/net/fabricmc/loom/task/AbstractDecompileTask.java2
-rw-r--r--src/main/java/net/fabricmc/loom/task/AbstractLoomTask.java (renamed from src/main/java/net/fabricmc/loom/task/DefaultLoomTask.java)4
-rw-r--r--src/main/java/net/fabricmc/loom/task/AbstractRunTask.java (renamed from src/main/java/net/fabricmc/loom/task/RunTaskBase.java)4
-rw-r--r--src/main/java/net/fabricmc/loom/task/CleanLoomBinaries.java2
-rw-r--r--src/main/java/net/fabricmc/loom/task/CleanLoomMappings.java2
-rw-r--r--src/main/java/net/fabricmc/loom/task/DownloadAssetsTask.java2
-rw-r--r--src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java2
-rw-r--r--src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java2
-rw-r--r--src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java2
-rw-r--r--src/main/java/net/fabricmc/loom/task/RemapJar.java2
-rw-r--r--src/main/java/net/fabricmc/loom/task/RemapLineNumbersTask.java5
-rw-r--r--src/main/java/net/fabricmc/loom/task/RemapSourcesJar.java2
-rw-r--r--src/main/java/net/fabricmc/loom/task/RunClientTask.java12
-rw-r--r--src/main/java/net/fabricmc/loom/task/RunServerTask.java9
-rw-r--r--src/main/java/net/fabricmc/loom/task/UpdateMappingsTask.java145
15 files changed, 161 insertions, 36 deletions
diff --git a/src/main/java/net/fabricmc/loom/task/AbstractDecompileTask.java b/src/main/java/net/fabricmc/loom/task/AbstractDecompileTask.java
index b2f98b90..db26ad50 100644
--- a/src/main/java/net/fabricmc/loom/task/AbstractDecompileTask.java
+++ b/src/main/java/net/fabricmc/loom/task/AbstractDecompileTask.java
@@ -30,7 +30,7 @@ import org.gradle.api.tasks.OutputFile;
import java.io.File;
-public abstract class AbstractDecompileTask extends DefaultLoomTask {
+public abstract class AbstractDecompileTask extends AbstractLoomTask {
private Object input;
private Object output;
private Object lineMapFile;
diff --git a/src/main/java/net/fabricmc/loom/task/DefaultLoomTask.java b/src/main/java/net/fabricmc/loom/task/AbstractLoomTask.java
index bdf42b2b..cd39ecf0 100644
--- a/src/main/java/net/fabricmc/loom/task/DefaultLoomTask.java
+++ b/src/main/java/net/fabricmc/loom/task/AbstractLoomTask.java
@@ -26,9 +26,9 @@ package net.fabricmc.loom.task;
import org.gradle.api.DefaultTask;
-public abstract class DefaultLoomTask extends DefaultTask {
+public abstract class AbstractLoomTask extends DefaultTask {
- public DefaultLoomTask() {
+ public AbstractLoomTask() {
setGroup("fabric");
}
diff --git a/src/main/java/net/fabricmc/loom/task/RunTaskBase.java b/src/main/java/net/fabricmc/loom/task/AbstractRunTask.java
index c88026b7..93964f2d 100644
--- a/src/main/java/net/fabricmc/loom/task/RunTaskBase.java
+++ b/src/main/java/net/fabricmc/loom/task/AbstractRunTask.java
@@ -39,11 +39,11 @@ import java.util.Collections;
import java.util.List;
import java.util.function.Function;
-public abstract class RunTaskBase extends JavaExec {
+public abstract class AbstractRunTask extends JavaExec {
private final Function<Project, RunConfig> configProvider;
private RunConfig config;
- public RunTaskBase(Function<Project, RunConfig> config) {
+ public AbstractRunTask(Function<Project, RunConfig> config) {
super();
setGroup("fabric");
this.configProvider = config;
diff --git a/src/main/java/net/fabricmc/loom/task/CleanLoomBinaries.java b/src/main/java/net/fabricmc/loom/task/CleanLoomBinaries.java
index 3b1a3c20..a885aad2 100644
--- a/src/main/java/net/fabricmc/loom/task/CleanLoomBinaries.java
+++ b/src/main/java/net/fabricmc/loom/task/CleanLoomBinaries.java
@@ -28,7 +28,7 @@ import net.fabricmc.loom.LoomGradleExtension;
import org.gradle.api.Project;
import org.gradle.api.tasks.TaskAction;
-public class CleanLoomBinaries extends DefaultLoomTask {
+public class CleanLoomBinaries extends AbstractLoomTask {
@TaskAction
public void run() {
Project project = this.getProject();
diff --git a/src/main/java/net/fabricmc/loom/task/CleanLoomMappings.java b/src/main/java/net/fabricmc/loom/task/CleanLoomMappings.java
index bdafc3c8..60569ae7 100644
--- a/src/main/java/net/fabricmc/loom/task/CleanLoomMappings.java
+++ b/src/main/java/net/fabricmc/loom/task/CleanLoomMappings.java
@@ -32,7 +32,7 @@ import org.gradle.api.tasks.TaskAction;
import java.io.IOException;
import java.nio.file.Files;
-public class CleanLoomMappings extends DefaultLoomTask {
+public class CleanLoomMappings extends AbstractLoomTask {
@TaskAction
public void run() {
Project project = this.getProject();
diff --git a/src/main/java/net/fabricmc/loom/task/DownloadAssetsTask.java b/src/main/java/net/fabricmc/loom/task/DownloadAssetsTask.java
index 91a71a03..3fce9928 100644
--- a/src/main/java/net/fabricmc/loom/task/DownloadAssetsTask.java
+++ b/src/main/java/net/fabricmc/loom/task/DownloadAssetsTask.java
@@ -31,7 +31,7 @@ import org.gradle.api.tasks.TaskAction;
import java.io.IOException;
-public class DownloadAssetsTask extends DefaultLoomTask {
+public class DownloadAssetsTask extends AbstractLoomTask {
@TaskAction
public void downloadAssets() throws IOException {
Project project = this.getProject();
diff --git a/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java b/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java
index 7c57561c..3d2065b3 100644
--- a/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java
+++ b/src/main/java/net/fabricmc/loom/task/GenEclipseRunsTask.java
@@ -33,7 +33,7 @@ import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
-public class GenEclipseRunsTask extends DefaultLoomTask {
+public class GenEclipseRunsTask extends AbstractLoomTask {
@TaskAction
public void genRuns() throws IOException {
diff --git a/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java b/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java
index 96c3d5b6..34a1bf58 100644
--- a/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java
+++ b/src/main/java/net/fabricmc/loom/task/GenIdeaProjectTask.java
@@ -46,7 +46,7 @@ import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.IOException;
-public class GenIdeaProjectTask extends DefaultLoomTask {
+public class GenIdeaProjectTask extends AbstractLoomTask {
@TaskAction
public void genIdeaRuns() throws IOException, ParserConfigurationException, SAXException, TransformerException {
diff --git a/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java b/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java
index 8d9cd4d7..aa64562a 100644
--- a/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java
+++ b/src/main/java/net/fabricmc/loom/task/GenVsCodeProjectTask.java
@@ -41,7 +41,7 @@ import java.util.List;
// https://marketplace.visualstudio.com/items?itemName=redhat.java
// https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug
// https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack
-public class GenVsCodeProjectTask extends DefaultLoomTask {
+public class GenVsCodeProjectTask extends AbstractLoomTask {
@TaskAction
public void genRuns() {
diff --git a/src/main/java/net/fabricmc/loom/task/RemapJar.java b/src/main/java/net/fabricmc/loom/task/RemapJar.java
index 6c94ffa2..b56221c8 100644
--- a/src/main/java/net/fabricmc/loom/task/RemapJar.java
+++ b/src/main/java/net/fabricmc/loom/task/RemapJar.java
@@ -33,7 +33,7 @@ import org.gradle.api.tasks.TaskAction;
import java.io.File;
import java.io.IOException;
-public class RemapJar extends DefaultLoomTask {
+public class RemapJar extends AbstractLoomTask {
public File jar;
public File destination;
public boolean nestJar = true;
diff --git a/src/main/java/net/fabricmc/loom/task/RemapLineNumbersTask.java b/src/main/java/net/fabricmc/loom/task/RemapLineNumbersTask.java
index c695c1d7..7d8ea913 100644
--- a/src/main/java/net/fabricmc/loom/task/RemapLineNumbersTask.java
+++ b/src/main/java/net/fabricmc/loom/task/RemapLineNumbersTask.java
@@ -29,7 +29,6 @@ import net.fabricmc.loom.util.LineNumberRemapper;
import net.fabricmc.loom.util.progress.ProgressLogger;
import net.fabricmc.stitch.util.StitchUtil;
import org.gradle.api.Project;
-import org.gradle.api.file.FileCollection;
import org.gradle.api.tasks.Input;
import org.gradle.api.tasks.InputFile;
import org.gradle.api.tasks.OutputFile;
@@ -37,10 +36,8 @@ import org.gradle.api.tasks.TaskAction;
import java.io.File;
import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-public class RemapLineNumbersTask extends DefaultLoomTask {
+public class RemapLineNumbersTask extends AbstractLoomTask {
private Object input;
private Object output;
private Object lineMapFile;
diff --git a/src/main/java/net/fabricmc/loom/task/RemapSourcesJar.java b/src/main/java/net/fabricmc/loom/task/RemapSourcesJar.java
index 8bc74d18..f71eec51 100644
--- a/src/main/java/net/fabricmc/loom/task/RemapSourcesJar.java
+++ b/src/main/java/net/fabricmc/loom/task/RemapSourcesJar.java
@@ -31,7 +31,7 @@ import org.gradle.api.tasks.TaskAction;
import java.io.File;
-public class RemapSourcesJar extends DefaultLoomTask {
+public class RemapSourcesJar extends AbstractLoomTask {
public File jar;
public File destinationJar;
public String direction = "intermediary";
diff --git a/src/main/java/net/fabricmc/loom/task/RunClientTask.java b/src/main/java/net/fabricmc/loom/task/RunClientTask.java
index 19f25a0a..0200b1ee 100644
--- a/src/main/java/net/fabricmc/loom/task/RunClientTask.java
+++ b/src/main/java/net/fabricmc/loom/task/RunClientTask.java
@@ -24,19 +24,9 @@
package net.fabricmc.loom.task;
-import net.fabricmc.loom.LoomGradleExtension;
-import net.fabricmc.loom.providers.MappingsProvider;
-import net.fabricmc.loom.util.Constants;
-import net.fabricmc.loom.util.MinecraftVersionInfo;
-import net.fabricmc.loom.util.OperatingSystem;
import net.fabricmc.loom.util.RunConfig;
-import org.gradle.api.tasks.JavaExec;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-public class RunClientTask extends RunTaskBase {
+public class RunClientTask extends AbstractRunTask {
public RunClientTask() {
super(RunConfig::clientRunConfig);
}
diff --git a/src/main/java/net/fabricmc/loom/task/RunServerTask.java b/src/main/java/net/fabricmc/loom/task/RunServerTask.java
index 40eb45e1..d1d3d954 100644
--- a/src/main/java/net/fabricmc/loom/task/RunServerTask.java
+++ b/src/main/java/net/fabricmc/loom/task/RunServerTask.java
@@ -24,16 +24,9 @@
package net.fabricmc.loom.task;
-import net.fabricmc.loom.LoomGradleExtension;
-import net.fabricmc.loom.util.Constants;
import net.fabricmc.loom.util.RunConfig;
-import org.gradle.api.tasks.JavaExec;
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-public class RunServerTask extends RunTaskBase {
+public class RunServerTask extends AbstractRunTask {
public RunServerTask() {
super(RunConfig::serverRunConfig);
}
diff --git a/src/main/java/net/fabricmc/loom/task/UpdateMappingsTask.java b/src/main/java/net/fabricmc/loom/task/UpdateMappingsTask.java
new file mode 100644
index 00000000..b52309a5
--- /dev/null
+++ b/src/main/java/net/fabricmc/loom/task/UpdateMappingsTask.java
@@ -0,0 +1,145 @@
+/*
+ * This file is part of fabric-loom, licensed under the MIT License (MIT).
+ *
+ * Copyright (c) 2016, 2017, 2018 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
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package net.fabricmc.loom.task;
+
+import net.fabricmc.loom.LoomGradleExtension;
+import net.fabricmc.loom.util.Constants;
+import net.fabricmc.mappings.*;
+import org.cadixdev.lorenz.MappingSet;
+import org.cadixdev.lorenz.io.MappingsReader;
+import org.cadixdev.mercury.Mercury;
+import org.cadixdev.mercury.remapper.MercuryRemapper;
+import org.gradle.api.Project;
+import org.gradle.api.tasks.TaskAction;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+public class UpdateMappingsTask extends AbstractLoomTask {
+ @TaskAction
+ public void doTask() throws Throwable {
+ Project project = getProject();
+ LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
+
+ project.getLogger().lifecycle(":loading mappings");
+
+ File mappingsFile = new File((String) project.getProperties().get("targetMappingsFile"));
+ File inputDir = new File((String) project.getProperties().get("inputDir"));
+ File outputDir = new File((String) project.getProperties().get("outputDir"));
+
+ Mappings sourceMappings = extension.getMappingsProvider().getMappings();
+ Mappings targetMappings;
+
+ try (FileInputStream stream = new FileInputStream(mappingsFile)) {
+ targetMappings = net.fabricmc.mappings.MappingsProvider.readTinyMappings(stream, false);
+ }
+
+ project.getLogger().lifecycle(":joining mappings");
+ MappingSet mappingSet = new MappingsJoiner(sourceMappings, targetMappings, "intermediary", "named").read();
+
+ project.getLogger().lifecycle(":remapping");
+ Mercury mercury = new Mercury();
+
+ for (File file : project.getConfigurations().getByName(Constants.MINECRAFT_DEPENDENCIES).getFiles()) {
+ mercury.getClassPath().add(file.toPath());
+ }
+
+ for (File file : project.getConfigurations().getByName(Constants.COMPILE_MODS_MAPPED).getFiles()) {
+ mercury.getClassPath().add(file.toPath());
+ }
+
+ mercury.getClassPath().add(extension.getMinecraftMappedProvider().MINECRAFT_MAPPED_JAR.toPath());
+ mercury.getClassPath().add(extension.getMinecraftMappedProvider().MINECRAFT_INTERMEDIARY_JAR.toPath());
+
+ mercury.getProcessors().add(MercuryRemapper.create(mappingSet));
+
+ try {
+ mercury.rewrite(inputDir.toPath(), outputDir.toPath());
+ } catch (Exception e) {
+ project.getLogger().warn("Could not remap fully!", e);
+ }
+
+ project.getLogger().lifecycle(":cleaning file descriptors");
+ System.gc();
+ }
+
+ public static class MappingsJoiner extends MappingsReader {
+ private final Mappings sourceMappings, targetMappings;
+ private final String fromNamespace, toNamespace;
+
+ public MappingsJoiner(Mappings sourceMappings, Mappings targetMappings, String fromNamespace, String toNamespace) {
+ this.sourceMappings = sourceMappings;
+ this.targetMappings = targetMappings;
+ this.fromNamespace = fromNamespace;
+ this.toNamespace = toNamespace;
+ }
+
+ @Override
+ public MappingSet read(MappingSet mappings) throws IOException {
+ Map<String, ClassEntry> targetClasses = new HashMap<>();
+ Map<EntryTriple, FieldEntry> targetFields = new HashMap<>();
+ Map<EntryTriple, MethodEntry> targetMethods = new HashMap<>();
+
+ targetMappings.getClassEntries().forEach((c) -> targetClasses.put(c.get(fromNamespace), c));
+ targetMappings.getFieldEntries().forEach((c) -> targetFields.put(c.get(fromNamespace), c));
+ targetMappings.getMethodEntries().forEach((c) -> targetMethods.put(c.get(fromNamespace), c));
+
+ for (ClassEntry entry : sourceMappings.getClassEntries()) {
+ String from = entry.get(toNamespace);
+ String to = targetClasses.getOrDefault(entry.get(fromNamespace), entry).get(toNamespace);
+
+ mappings.getOrCreateClassMapping(from).setDeobfuscatedName(to);
+ }
+
+ for (FieldEntry entry : sourceMappings.getFieldEntries()) {
+ EntryTriple fromEntry = entry.get(toNamespace);
+ EntryTriple toEntry = targetFields.getOrDefault(entry.get(fromNamespace), entry).get(toNamespace);
+
+ mappings.getOrCreateClassMapping(fromEntry.getOwner())
+ .getOrCreateFieldMapping(fromEntry.getName(), fromEntry.getDesc())
+ .setDeobfuscatedName(toEntry.getName());
+ }
+
+ for (MethodEntry entry : sourceMappings.getMethodEntries()) {
+ EntryTriple fromEntry = entry.get(toNamespace);
+ EntryTriple toEntry = targetMethods.getOrDefault(entry.get(fromNamespace), entry).get(toNamespace);
+
+ mappings.getOrCreateClassMapping(fromEntry.getOwner())
+ .getOrCreateMethodMapping(fromEntry.getName(), fromEntry.getDesc())
+ .setDeobfuscatedName(toEntry.getName());
+ }
+
+ return mappings;
+ }
+
+ @Override
+ public void close() throws IOException {
+
+ }
+ }
+}