diff options
author | asie <kontakt@asie.pl> | 2019-05-10 13:32:11 +0200 |
---|---|---|
committer | asie <kontakt@asie.pl> | 2019-05-10 13:32:11 +0200 |
commit | 64c21c01b8210297b4ef04919ca0fc251a69033a (patch) | |
tree | 89c99a272f4ae2ed8e7e368943624982afb921ca /src/main/java/net/fabricmc/loom/task | |
parent | eff108344fae0bfd403ef2bdd1aa37070b746ab8 (diff) | |
download | architectury-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')
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 { + + } + } +} |