aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/fabricmc/loom/util
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-05-01 19:40:27 +0800
committershedaniel <daniel@shedaniel.me>2021-05-01 19:40:27 +0800
commit77e71acd99b735e3f4fea3b15149c2f351c1cdb8 (patch)
tree6ec17ee58269adc5a3411493a2ea695420ad7c92 /src/main/java/net/fabricmc/loom/util
parentc28fe56870a6bf5d49e5b704e96e84072d8d68f5 (diff)
downloadarchitectury-loom-77e71acd99b735e3f4fea3b15149c2f351c1cdb8.tar.gz
architectury-loom-77e71acd99b735e3f4fea3b15149c2f351c1cdb8.tar.bz2
architectury-loom-77e71acd99b735e3f4fea3b15149c2f351c1cdb8.zip
a
Diffstat (limited to 'src/main/java/net/fabricmc/loom/util')
-rw-r--r--src/main/java/net/fabricmc/loom/util/Constants.java1
-rw-r--r--src/main/java/net/fabricmc/loom/util/SourceRemapper.java27
-rw-r--r--src/main/java/net/fabricmc/loom/util/ThreadingUtils.java20
-rw-r--r--src/main/java/net/fabricmc/loom/util/TinyRemapperMappingsHelper.java3
-rw-r--r--src/main/java/net/fabricmc/loom/util/srg/InnerClassRemapper.java3
-rw-r--r--src/main/java/net/fabricmc/loom/util/srg/MCPReader.java12
6 files changed, 48 insertions, 18 deletions
diff --git a/src/main/java/net/fabricmc/loom/util/Constants.java b/src/main/java/net/fabricmc/loom/util/Constants.java
index cc33b6fe..046a2759 100644
--- a/src/main/java/net/fabricmc/loom/util/Constants.java
+++ b/src/main/java/net/fabricmc/loom/util/Constants.java
@@ -40,6 +40,7 @@ public class Constants {
public static final String VERSION_MANIFESTS = "https://launchermeta.mojang.com/mc/game/version_manifest_v2.json";
public static final String SYSTEM_ARCH = System.getProperty("os.arch").equals("64") ? "64" : "32";
+ public static final String TASK_CATEGORY = "loom";
public static final int ASM_VERSION = Opcodes.ASM9;
diff --git a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java
index f9573bf5..22ba7f70 100644
--- a/src/main/java/net/fabricmc/loom/util/SourceRemapper.java
+++ b/src/main/java/net/fabricmc/loom/util/SourceRemapper.java
@@ -33,6 +33,7 @@ import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
+import com.google.common.base.Stopwatch;
import org.cadixdev.lorenz.MappingSet;
import org.cadixdev.mercury.Mercury;
import org.cadixdev.mercury.remapper.MercuryRemapper;
@@ -45,7 +46,7 @@ import net.fabricmc.loom.LoomGradleExtension;
import net.fabricmc.loom.configuration.RemappedConfigurationEntry;
import net.fabricmc.loom.configuration.providers.LaunchProvider;
import net.fabricmc.loom.configuration.providers.mappings.MappingsProvider;
-import net.fabricmc.loom.util.gradle.ProgressLogger;
+import net.fabricmc.loom.configuration.providers.minecraft.tr.MercuryUtils;
import net.fabricmc.lorenztiny.TinyMappingsReader;
import net.fabricmc.mapping.tree.TinyTree;
import net.fabricmc.stitch.util.StitchUtil;
@@ -54,7 +55,7 @@ public class SourceRemapper {
private final Project project;
private String from;
private String to;
- private final List<Consumer<ProgressLogger>> remapTasks = new ArrayList<>();
+ private final List<Consumer<Mercury>> remapTasks = new ArrayList<>();
private Mercury mercury;
@@ -80,10 +81,9 @@ public class SourceRemapper {
}
public void scheduleRemapSources(File source, File destination, boolean reproducibleFileOrder, boolean preserveFileTimestamps) {
- remapTasks.add((logger) -> {
+ remapTasks.add((mercury) -> {
try {
- logger.progress("remapping sources - " + source.getName());
- remapSourcesInner(source, destination);
+ remapSourcesInner(mercury, source, destination);
ZipReprocessorUtil.reprocessZip(destination, reproducibleFileOrder, preserveFileTimestamps);
// Set the remapped sources creation date to match the sources if we're likely succeeded in making it
@@ -101,22 +101,21 @@ public class SourceRemapper {
return;
}
- project.getLogger().lifecycle(":remapping sources");
+ Stopwatch stopwatch = Stopwatch.createStarted();
+ project.getLogger().lifecycle(":remapping " + remapTasks.size() + " sources");
- ProgressLogger progressLogger = ProgressLogger.getProgressFactory(project, SourceRemapper.class.getName());
- progressLogger.start("Remapping dependency sources", "sources");
-
- remapTasks.forEach(consumer -> consumer.accept(progressLogger));
+ Mercury mercury = getMercuryInstance();
+ ThreadingUtils.run(remapTasks, consumer -> consumer.accept(MercuryUtils.copyMercury(mercury)));
- progressLogger.completed();
+ project.getLogger().lifecycle(":remapped " + remapTasks.size() + " sources in " + stopwatch.stop());
// TODO: FIXME - WORKAROUND https://github.com/FabricMC/fabric-loom/issues/45
System.gc();
}
- private void remapSourcesInner(File source, File destination) throws Exception {
+ private void remapSourcesInner(Mercury mercury, File source, File destination) throws Exception {
+ Stopwatch stopwatch = Stopwatch.createStarted();
project.getLogger().info(":remapping source jar " + source.getName() + " from " + from + " to " + to);
- Mercury mercury = getMercuryInstance();
if (source.equals(destination)) {
if (source.isDirectory()) {
@@ -166,6 +165,8 @@ public class SourceRemapper {
if (isSrcTmp) {
Files.walkFileTree(srcPath, new DeletingFileVisitor());
}
+
+ project.getLogger().info(":remapped source jar " + source.getName() + " from " + from + " to " + to + " in " + stopwatch.stop());
}
private Mercury getMercuryInstance() {
diff --git a/src/main/java/net/fabricmc/loom/util/ThreadingUtils.java b/src/main/java/net/fabricmc/loom/util/ThreadingUtils.java
index 79b67929..f0c9ff9c 100644
--- a/src/main/java/net/fabricmc/loom/util/ThreadingUtils.java
+++ b/src/main/java/net/fabricmc/loom/util/ThreadingUtils.java
@@ -34,9 +34,12 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
+import java.util.function.Consumer;
import java.util.function.Function;
import java.util.stream.Collectors;
+import com.google.common.base.Stopwatch;
+
public class ThreadingUtils {
public static <T> void run(Collection<T> values, UnsafeConsumer<T> action) {
run(values.stream()
@@ -128,10 +131,16 @@ public class ThreadingUtils {
}
public static class TaskCompleter {
+ Stopwatch stopwatch = Stopwatch.createUnstarted();
List<CompletableFuture<?>> tasks = new ArrayList<>();
ExecutorService service = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
+ List<Consumer<Stopwatch>> completionListener = new ArrayList<>();
public TaskCompleter add(UnsafeRunnable job) {
+ if (!stopwatch.isRunning()) {
+ stopwatch.start();
+ }
+
tasks.add(CompletableFuture.runAsync(() -> {
try {
job.run();
@@ -139,6 +148,12 @@ public class ThreadingUtils {
throw new RuntimeException(throwable);
}
}, service));
+
+ return this;
+ }
+
+ public TaskCompleter onComplete(Consumer<Stopwatch> consumer) {
+ completionListener.add(consumer);
return this;
}
@@ -146,6 +161,11 @@ public class ThreadingUtils {
try {
CompletableFuture.allOf(tasks.toArray(new CompletableFuture[0])).get();
service.shutdownNow();
+ stopwatch.stop();
+
+ for (Consumer<Stopwatch> consumer : completionListener) {
+ consumer.accept(stopwatch);
+ }
} catch (InterruptedException | ExecutionException e) {
throw new RuntimeException(e);
}
diff --git a/src/main/java/net/fabricmc/loom/util/TinyRemapperMappingsHelper.java b/src/main/java/net/fabricmc/loom/util/TinyRemapperMappingsHelper.java
index b9964020..92e5bf94 100644
--- a/src/main/java/net/fabricmc/loom/util/TinyRemapperMappingsHelper.java
+++ b/src/main/java/net/fabricmc/loom/util/TinyRemapperMappingsHelper.java
@@ -24,13 +24,14 @@
package net.fabricmc.loom.util;
+import dev.architectury.tinyremapper.IMappingProvider;
+
import net.fabricmc.mapping.tree.ClassDef;
import net.fabricmc.mapping.tree.FieldDef;
import net.fabricmc.mapping.tree.LocalVariableDef;
import net.fabricmc.mapping.tree.MethodDef;
import net.fabricmc.mapping.tree.ParameterDef;
import net.fabricmc.mapping.tree.TinyTree;
-import net.fabricmc.tinyremapper.IMappingProvider;
public class TinyRemapperMappingsHelper {
private TinyRemapperMappingsHelper() { }
diff --git a/src/main/java/net/fabricmc/loom/util/srg/InnerClassRemapper.java b/src/main/java/net/fabricmc/loom/util/srg/InnerClassRemapper.java
index d0bc7864..021410b6 100644
--- a/src/main/java/net/fabricmc/loom/util/srg/InnerClassRemapper.java
+++ b/src/main/java/net/fabricmc/loom/util/srg/InnerClassRemapper.java
@@ -32,11 +32,12 @@ import java.util.Map;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
+import dev.architectury.tinyremapper.IMappingProvider;
+
import net.fabricmc.loom.util.FileSystemUtil;
import net.fabricmc.loom.util.FileSystemUtil.FileSystemDelegate;
import net.fabricmc.mapping.tree.ClassDef;
import net.fabricmc.mapping.tree.TinyTree;
-import net.fabricmc.tinyremapper.IMappingProvider;
public class InnerClassRemapper {
public static IMappingProvider of(Path fromJar, TinyTree mappingsWithSrg, String from, String to) throws IOException {
diff --git a/src/main/java/net/fabricmc/loom/util/srg/MCPReader.java b/src/main/java/net/fabricmc/loom/util/srg/MCPReader.java
index 7639eb00..777a9007 100644
--- a/src/main/java/net/fabricmc/loom/util/srg/MCPReader.java
+++ b/src/main/java/net/fabricmc/loom/util/srg/MCPReader.java
@@ -39,7 +39,8 @@ import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-import au.com.bytecode.opencsv.CSVReader;
+import com.opencsv.CSVReader;
+import com.opencsv.exceptions.CsvValidationException;
import org.cadixdev.lorenz.MappingSet;
import org.cadixdev.lorenz.io.srg.tsrg.TSrgReader;
import org.cadixdev.lorenz.model.ClassMapping;
@@ -71,7 +72,12 @@ public class MCPReader {
Map<String, String> intermediaryToMCPMap = createIntermediaryToMCPMap(intermediaryTiny, srgTokens);
Map<String, String[]> intermediaryToDocsMap = new HashMap<>();
Map<String, Map<Integer, String>> intermediaryToParamsMap = new HashMap<>();
- injectMcp(mcpJar, intermediaryToMCPMap, intermediaryToDocsMap, intermediaryToParamsMap);
+
+ try {
+ injectMcp(mcpJar, intermediaryToMCPMap, intermediaryToDocsMap, intermediaryToParamsMap);
+ } catch (CsvValidationException e) {
+ throw new RuntimeException(e);
+ }
mergeTokensIntoIntermediary(intermediaryTiny, intermediaryToMCPMap, intermediaryToDocsMap, intermediaryToParamsMap);
return intermediaryTiny;
@@ -186,7 +192,7 @@ public class MCPReader {
}
private void injectMcp(Path mcpJar, Map<String, String> intermediaryToSrgMap, Map<String, String[]> intermediaryToDocsMap, Map<String, Map<Integer, String>> intermediaryToParamsMap)
- throws IOException {
+ throws IOException, CsvValidationException {
Map<String, List<String>> srgToIntermediary = inverseMap(intermediaryToSrgMap);
Map<String, List<String>> simpleSrgToIntermediary = new HashMap<>();
Pattern methodPattern = Pattern.compile("(func_\\d*)_.*");