refactor genSources into multiple reusable tasks
parent
7e59a90463
commit
eff108344f
|
@ -33,6 +33,7 @@ import net.fabricmc.loom.util.LineNumberRemapper;
|
||||||
import net.fabricmc.loom.util.progress.ProgressLogger;
|
import net.fabricmc.loom.util.progress.ProgressLogger;
|
||||||
import net.fabricmc.stitch.util.StitchUtil;
|
import net.fabricmc.stitch.util.StitchUtil;
|
||||||
import org.gradle.api.Project;
|
import org.gradle.api.Project;
|
||||||
|
import org.gradle.api.Task;
|
||||||
import org.gradle.api.tasks.TaskContainer;
|
import org.gradle.api.tasks.TaskContainer;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
@ -65,50 +66,52 @@ public class LoomGradlePlugin extends AbstractPlugin {
|
||||||
|
|
||||||
tasks.register("remapJar", RemapJar.class);
|
tasks.register("remapJar", RemapJar.class);
|
||||||
|
|
||||||
tasks.register("genSources", FernFlowerTask.class, t -> {
|
tasks.register("genSourcesDecompile", FernFlowerTask.class, t -> {
|
||||||
t.getOutputs().upToDateWhen((o) -> false);
|
t.getOutputs().upToDateWhen((o) -> false);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
tasks.register("genSourcesRemapLineNumbers", RemapLineNumbersTask.class, t -> {
|
||||||
|
t.getOutputs().upToDateWhen((o) -> false);
|
||||||
|
});
|
||||||
|
|
||||||
|
tasks.register("genSources", t -> {
|
||||||
|
t.getOutputs().upToDateWhen((o) -> false);
|
||||||
|
});
|
||||||
|
|
||||||
project.afterEvaluate((p) -> {
|
project.afterEvaluate((p) -> {
|
||||||
FernFlowerTask task = (FernFlowerTask) p.getTasks().getByName("genSources");
|
AbstractDecompileTask decompileTask = (AbstractDecompileTask) p.getTasks().getByName("genSourcesDecompile");
|
||||||
|
RemapLineNumbersTask remapLineNumbersTask = (RemapLineNumbersTask) p.getTasks().getByName("genSourcesRemapLineNumbers");
|
||||||
|
Task genSourcesTask = p.getTasks().getByName("genSources");
|
||||||
|
|
||||||
|
genSourcesTask.dependsOn(remapLineNumbersTask);
|
||||||
|
remapLineNumbersTask.dependsOn(decompileTask);
|
||||||
|
|
||||||
Project project = this.getProject();
|
Project project = this.getProject();
|
||||||
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class);
|
||||||
MinecraftLibraryProvider libraryProvider = extension.getMinecraftProvider().libraryProvider;
|
MinecraftLibraryProvider libraryProvider = extension.getMinecraftProvider().libraryProvider;
|
||||||
MappingsProvider mappingsProvider = extension.getMappingsProvider();
|
MappingsProvider mappingsProvider = extension.getMappingsProvider();
|
||||||
File mappedJar = mappingsProvider.mappedProvider.getMappedJar();
|
File mappedJar = mappingsProvider.mappedProvider.getMappedJar();
|
||||||
File linemappedJarTmp = getMappedByproduct(project, "-linemapped.jar.tmp");
|
File linemappedJar = getMappedByproduct(project, "-linemapped.jar");
|
||||||
File sourcesJar = getMappedByproduct(project, "-sources.jar");
|
File sourcesJar = getMappedByproduct(project, "-sources.jar");
|
||||||
File linemapFile = getMappedByproduct(project, "-sources.lmap");
|
File linemapFile = getMappedByproduct(project, "-sources.lmap");
|
||||||
|
|
||||||
task.setInput(mappedJar);
|
decompileTask.setInput(mappedJar);
|
||||||
task.setOutput(sourcesJar);
|
decompileTask.setOutput(sourcesJar);
|
||||||
task.setLineMapFile(linemapFile);
|
decompileTask.setLineMapFile(linemapFile);
|
||||||
task.setLibraries(libraryProvider.getLibraries());
|
decompileTask.setLibraries(libraryProvider.getLibraries());
|
||||||
|
|
||||||
task.doLast((tt) -> {
|
remapLineNumbersTask.setInput(mappedJar);
|
||||||
project.getLogger().lifecycle(":adjusting line numbers");
|
remapLineNumbersTask.setLineMapFile(linemapFile);
|
||||||
LineNumberRemapper remapper = new LineNumberRemapper();
|
remapLineNumbersTask.setOutput(linemappedJar);
|
||||||
remapper.readMappings(linemapFile);
|
|
||||||
|
|
||||||
ProgressLogger progressLogger = ProgressLogger.getProgressFactory(project, FernFlowerTask.class.getName());
|
|
||||||
progressLogger.start("Adjusting line numbers", "linemap");
|
|
||||||
|
|
||||||
try (StitchUtil.FileSystemDelegate inFs = StitchUtil.getJarFileSystem(mappedJar, true);
|
|
||||||
StitchUtil.FileSystemDelegate outFs = StitchUtil.getJarFileSystem(linemappedJarTmp, true)) {
|
|
||||||
remapper.process(progressLogger, inFs.get().getPath("/"), outFs.get().getPath("/"));
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
progressLogger.completed();
|
|
||||||
|
|
||||||
Path mappedJarPath = mappedJar.toPath();
|
Path mappedJarPath = mappedJar.toPath();
|
||||||
Path linemappedJarTmpPath = linemappedJarTmp.toPath();
|
Path linemappedJarPath = linemappedJar.toPath();
|
||||||
|
|
||||||
if (Files.exists(linemappedJarTmpPath)) {
|
genSourcesTask.doLast((tt) -> {
|
||||||
|
if (Files.exists(linemappedJarPath)) {
|
||||||
try {
|
try {
|
||||||
Files.deleteIfExists(mappedJarPath);
|
Files.deleteIfExists(mappedJarPath);
|
||||||
Files.move(linemappedJarTmpPath, mappedJarPath);
|
Files.copy(linemappedJarPath, mappedJarPath);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* 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 org.gradle.api.file.FileCollection;
|
||||||
|
import org.gradle.api.tasks.Input;
|
||||||
|
import org.gradle.api.tasks.OutputFile;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public abstract class AbstractDecompileTask extends DefaultLoomTask {
|
||||||
|
private Object input;
|
||||||
|
private Object output;
|
||||||
|
private Object lineMapFile;
|
||||||
|
private Object libraries;
|
||||||
|
|
||||||
|
//@formatter:off
|
||||||
|
@Input public File getInput() { return getProject().file(input); }
|
||||||
|
@OutputFile public File getOutput() { return getProject().file(output); }
|
||||||
|
@OutputFile public File getLineMapFile() { return getProject().file(lineMapFile); }
|
||||||
|
@Input public FileCollection getLibraries() { return getProject().files(libraries); }
|
||||||
|
public void setInput(Object input) { this.input = input; }
|
||||||
|
public void setOutput(Object output) { this.output = output; }
|
||||||
|
public void setLineMapFile(Object lineMapFile) { this.lineMapFile = lineMapFile; }
|
||||||
|
public void setLibraries(Object libraries) { this.libraries = libraries; }
|
||||||
|
//@formatter:on
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
/*
|
||||||
|
* 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.task.fernflower.FernFlowerTask;
|
||||||
|
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;
|
||||||
|
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 {
|
||||||
|
private Object input;
|
||||||
|
private Object output;
|
||||||
|
private Object lineMapFile;
|
||||||
|
|
||||||
|
@TaskAction
|
||||||
|
public void doTask() throws Throwable {
|
||||||
|
Project project = getProject();
|
||||||
|
|
||||||
|
project.getLogger().lifecycle(":adjusting line numbers");
|
||||||
|
LineNumberRemapper remapper = new LineNumberRemapper();
|
||||||
|
remapper.readMappings(getLineMapFile());
|
||||||
|
|
||||||
|
ProgressLogger progressLogger = ProgressLogger.getProgressFactory(project, FernFlowerTask.class.getName());
|
||||||
|
progressLogger.start("Adjusting line numbers", "linemap");
|
||||||
|
|
||||||
|
try (StitchUtil.FileSystemDelegate inFs = StitchUtil.getJarFileSystem(getInput(), true);
|
||||||
|
StitchUtil.FileSystemDelegate outFs = StitchUtil.getJarFileSystem(getOutput(), true)) {
|
||||||
|
remapper.process(progressLogger, inFs.get().getPath("/"), outFs.get().getPath("/"));
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
progressLogger.completed();
|
||||||
|
}
|
||||||
|
|
||||||
|
//@formatter:off
|
||||||
|
@Input public File getInput() { return getProject().file(input); }
|
||||||
|
@InputFile public File getLineMapFile() { return getProject().file(lineMapFile); }
|
||||||
|
@OutputFile public File getOutput() { return getProject().file(output); }
|
||||||
|
public void setInput(Object input) { this.input = input; }
|
||||||
|
public void setLineMapFile(Object lineMapFile) { this.lineMapFile = lineMapFile; }
|
||||||
|
public void setOutput(Object output) { this.output = output; }
|
||||||
|
//@formatter:on
|
||||||
|
}
|
|
@ -24,7 +24,7 @@
|
||||||
|
|
||||||
package net.fabricmc.loom.task.fernflower;
|
package net.fabricmc.loom.task.fernflower;
|
||||||
|
|
||||||
import net.fabricmc.loom.task.DefaultLoomTask;
|
import net.fabricmc.loom.task.AbstractDecompileTask;
|
||||||
import net.fabricmc.loom.task.ForkingJavaExecTask;
|
import net.fabricmc.loom.task.ForkingJavaExecTask;
|
||||||
import net.fabricmc.loom.util.ConsumingOutputStream;
|
import net.fabricmc.loom.util.ConsumingOutputStream;
|
||||||
import org.gradle.api.file.FileCollection;
|
import org.gradle.api.file.FileCollection;
|
||||||
|
@ -48,13 +48,9 @@ import static java.text.MessageFormat.format;
|
||||||
/**
|
/**
|
||||||
* Created by covers1624 on 9/02/19.
|
* Created by covers1624 on 9/02/19.
|
||||||
*/
|
*/
|
||||||
public class FernFlowerTask extends DefaultLoomTask implements ForkingJavaExecTask {
|
public class FernFlowerTask extends AbstractDecompileTask implements ForkingJavaExecTask {
|
||||||
|
|
||||||
private boolean noFork;
|
private boolean noFork = false;
|
||||||
private Object input;
|
|
||||||
private Object output;
|
|
||||||
private Object lineMapFile;
|
|
||||||
private Object libraries;
|
|
||||||
private int numThreads = Runtime.getRuntime().availableProcessors();
|
private int numThreads = Runtime.getRuntime().availableProcessors();
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
|
@ -70,7 +66,9 @@ public class FernFlowerTask extends DefaultLoomTask implements ForkingJavaExecTa
|
||||||
options.forEach((k, v) -> args.add(format("-{0}={1}", k, v)));
|
options.forEach((k, v) -> args.add(format("-{0}={1}", k, v)));
|
||||||
args.add(getInput().getAbsolutePath());
|
args.add(getInput().getAbsolutePath());
|
||||||
args.add("-o=" + getOutput().getAbsolutePath());
|
args.add("-o=" + getOutput().getAbsolutePath());
|
||||||
|
if (getLineMapFile() != null) {
|
||||||
args.add("-l=" + getLineMapFile().getAbsolutePath());
|
args.add("-l=" + getLineMapFile().getAbsolutePath());
|
||||||
|
}
|
||||||
args.add("-t=" + getNumThreads());
|
args.add("-t=" + getNumThreads());
|
||||||
|
|
||||||
//TODO, Decompiler breaks on jemalloc, J9 module-info.class?
|
//TODO, Decompiler breaks on jemalloc, J9 module-info.class?
|
||||||
|
@ -135,16 +133,8 @@ public class FernFlowerTask extends DefaultLoomTask implements ForkingJavaExecTa
|
||||||
}
|
}
|
||||||
|
|
||||||
//@formatter:off
|
//@formatter:off
|
||||||
@Input public File getInput() { return getProject().file(input); }
|
|
||||||
@OutputFile public File getOutput() { return getProject().file(output); }
|
|
||||||
@OutputFile public File getLineMapFile() { return getProject().file(lineMapFile); }
|
|
||||||
@Input public FileCollection getLibraries() { return getProject().files(libraries); }
|
|
||||||
@Input public int getNumThreads() { return numThreads; }
|
@Input public int getNumThreads() { return numThreads; }
|
||||||
public boolean isNoFork() { return noFork; }
|
public boolean isNoFork() { return noFork; }
|
||||||
public void setInput(Object input) { this.input = input; }
|
|
||||||
public void setOutput(Object output) { this.output = output; }
|
|
||||||
public void setLineMapFile(Object lineMapFile) { this.lineMapFile = lineMapFile; }
|
|
||||||
public void setLibraries(Object libraries) { this.libraries = libraries; }
|
|
||||||
public void setNoFork(boolean noFork) { this.noFork = noFork; }
|
public void setNoFork(boolean noFork) { this.noFork = noFork; }
|
||||||
public void setNumThreads(int numThreads) { this.numThreads = numThreads; }
|
public void setNumThreads(int numThreads) { this.numThreads = numThreads; }
|
||||||
//@formatter:on
|
//@formatter:on
|
||||||
|
|
|
@ -42,5 +42,6 @@ public class Constants {
|
||||||
public static final String MINECRAFT_DEPENDENCIES = "minecraftLibraries";
|
public static final String MINECRAFT_DEPENDENCIES = "minecraftLibraries";
|
||||||
public static final String MINECRAFT_INTERMEDIARY = "minecraftIntermediary";
|
public static final String MINECRAFT_INTERMEDIARY = "minecraftIntermediary";
|
||||||
public static final String MINECRAFT_NAMED = "minecraftNamed";
|
public static final String MINECRAFT_NAMED = "minecraftNamed";
|
||||||
|
public static final String MINECRAFT_LINEMAPPED = "minecraftLinemapped";
|
||||||
public static final String MAPPINGS = "mappings";
|
public static final String MAPPINGS = "mappings";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue