aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/net/fabricmc/loom/configuration/providers
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-11-29 01:49:31 +0800
committershedaniel <daniel@shedaniel.me>2021-11-29 01:49:31 +0800
commitd51b44cdaa130389fb2054f43ed20a33a5ef8389 (patch)
treee312adfb52fe3f5341544b5ee93becd496174489 /src/main/java/net/fabricmc/loom/configuration/providers
parent4765504fc1785b3e3adad452b59db61a3d69c50a (diff)
parent4b45783a5460c6cbd63cdc89b32fcaeb584a95e3 (diff)
downloadarchitectury-loom-d51b44cdaa130389fb2054f43ed20a33a5ef8389.tar.gz
architectury-loom-d51b44cdaa130389fb2054f43ed20a33a5ef8389.tar.bz2
architectury-loom-d51b44cdaa130389fb2054f43ed20a33a5ef8389.zip
Merge remote-tracking branch 'FabricMC/dev/0.10' into dev/0.10.0
# Conflicts: # src/main/java/net/fabricmc/loom/configuration/providers/mappings/LayeredMappingSpecBuilderImpl.java # src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingLayer.java # src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingsSpec.java # src/test/groovy/net/fabricmc/loom/test/unit/layeredmappings/LayeredMappingSpecBuilderTest.groovy
Diffstat (limited to 'src/main/java/net/fabricmc/loom/configuration/providers')
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/mappings/LayeredMappingSpecBuilderImpl.java9
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java15
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingLayer.java12
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingsSpec.java3
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingsSpecBuilderImpl.java54
-rw-r--r--src/main/java/net/fabricmc/loom/configuration/providers/mappings/utils/DstNameFilterMappingVisitor.java54
6 files changed, 140 insertions, 7 deletions
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/LayeredMappingSpecBuilderImpl.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/LayeredMappingSpecBuilderImpl.java
index 6987ea5b..a2ffaa3c 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/LayeredMappingSpecBuilderImpl.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/LayeredMappingSpecBuilderImpl.java
@@ -34,12 +34,13 @@ import org.jetbrains.annotations.Nullable;
import net.fabricmc.loom.api.mappings.layered.spec.FileSpec;
import net.fabricmc.loom.api.mappings.layered.spec.LayeredMappingSpecBuilder;
import net.fabricmc.loom.api.mappings.layered.spec.MappingsSpec;
+import net.fabricmc.loom.api.mappings.layered.spec.MojangMappingsSpecBuilder;
import net.fabricmc.loom.api.mappings.layered.spec.ParchmentMappingsSpecBuilder;
import net.fabricmc.loom.api.LoomGradleExtensionAPI;
import net.fabricmc.loom.configuration.providers.mappings.crane.CraneMappingsSpec;
import net.fabricmc.loom.configuration.providers.mappings.extras.signatures.SignatureFixesSpec;
import net.fabricmc.loom.configuration.providers.mappings.intermediary.IntermediaryMappingsSpec;
-import net.fabricmc.loom.configuration.providers.mappings.mojmap.MojangMappingsSpec;
+import net.fabricmc.loom.configuration.providers.mappings.mojmap.MojangMappingsSpecBuilderImpl;
import net.fabricmc.loom.configuration.providers.mappings.parchment.ParchmentMappingsSpecBuilderImpl;
public class LayeredMappingSpecBuilderImpl implements LayeredMappingSpecBuilder {
@@ -58,8 +59,10 @@ public class LayeredMappingSpecBuilderImpl implements LayeredMappingSpecBuilder
}
@Override
- public LayeredMappingSpecBuilder officialMojangMappings() {
- layers.add(new MojangMappingsSpec(() -> extension != null && extension.isSilentMojangMappingsLicenseEnabled()));
+ public LayeredMappingSpecBuilder officialMojangMappings(Action<MojangMappingsSpecBuilder> action) {
+ MojangMappingsSpecBuilderImpl builder = MojangMappingsSpecBuilderImpl.builder();
+ action.execute(builder);
+ layers.add(builder.build(() -> extension != null && extension.isSilentMojangMappingsLicenseEnabled()));
return this;
}
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java
index 0b8981ea..23bf71c8 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java
@@ -53,6 +53,7 @@ import org.apache.tools.ant.util.StringUtils;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.jetbrains.annotations.Nullable;
+import org.objectweb.asm.Opcodes;
import net.fabricmc.loom.LoomGradleExtension;
import net.fabricmc.loom.LoomGradlePlugin;
@@ -439,6 +440,20 @@ public class MappingsProviderImpl extends DependencyProvider implements Mappings
getProject().getDependencies().add(Constants.Configurations.UNPICK_CLASSPATH,
String.format("%s:%s:%s", unpickMetadata.unpickGroup, unpickCliName, unpickMetadata.unpickVersion)
);
+
+ // Unpick ships with a slightly older version of asm, ensure it runs with at least the same version as loom.
+ String[] asmDeps = new String[] {
+ "org.ow2.asm:asm:%s",
+ "org.ow2.asm:asm-tree:%s",
+ "org.ow2.asm:asm-commons:%s",
+ "org.ow2.asm:asm-util:%s"
+ };
+
+ for (String asm : asmDeps) {
+ getProject().getDependencies().add(Constants.Configurations.UNPICK_CLASSPATH,
+ asm.formatted(Opcodes.class.getPackage().getImplementationVersion())
+ );
+ }
}
private void mergeAndSaveMappings(Project project, Path from, Path out) throws IOException {
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingLayer.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingLayer.java
index ebf5d063..5d970e5e 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingLayer.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingLayer.java
@@ -31,13 +31,15 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
+import java.util.regex.Pattern;
import org.gradle.api.logging.Logger;
import net.fabricmc.loom.api.mappings.layered.MappingLayer;
import net.fabricmc.loom.api.mappings.layered.MappingsNamespace;
-import net.fabricmc.loom.configuration.providers.minecraft.MinecraftVersionMeta;
import net.fabricmc.loom.configuration.providers.mappings.intermediary.IntermediaryMappingLayer;
+import net.fabricmc.loom.configuration.providers.mappings.utils.DstNameFilterMappingVisitor;
+import net.fabricmc.loom.configuration.providers.minecraft.MinecraftVersionMeta;
import net.fabricmc.loom.util.HashedDownloadUtil;
import net.fabricmc.mappingio.MappingVisitor;
import net.fabricmc.mappingio.adapter.MappingSourceNsSwitch;
@@ -46,9 +48,10 @@ import net.fabricmc.mappingio.format.ProGuardReader;
public record MojangMappingLayer(String minecraftVersion,
MinecraftVersionMeta.Download clientDownload,
MinecraftVersionMeta.Download serverDownload,
- Path workingDir,
+ Path workingDir, boolean nameSyntheticMembers,
Logger logger,
MojangMappingsSpec.SilenceLicenseOption silenceLicense) implements MappingLayer {
+ private static final Pattern SYNTHETIC_NAME_PATTERN = Pattern.compile("^(access|this|val\\$this|lambda\\$.*)\\$[0-9]+$");
@Override
public void visit(MappingVisitor mappingVisitor) throws IOException {
Path clientMappings = workingDir().resolve("%s.client.txt".formatted(minecraftVersion));
@@ -60,8 +63,11 @@ public record MojangMappingLayer(String minecraftVersion,
printMappingsLicense(clientMappings);
}
+ // Filter out field names matching the pattern
+ DstNameFilterMappingVisitor nameFilter = new DstNameFilterMappingVisitor(mappingVisitor, SYNTHETIC_NAME_PATTERN);
+
// Make official the source namespace
- MappingSourceNsSwitch nsSwitch = new MappingSourceNsSwitch(mappingVisitor, MappingsNamespace.OFFICIAL.toString());
+ MappingSourceNsSwitch nsSwitch = new MappingSourceNsSwitch(nameSyntheticMembers() ? mappingVisitor : nameFilter, MappingsNamespace.OFFICIAL.toString());
try (BufferedReader clientBufferedReader = Files.newBufferedReader(clientMappings, StandardCharsets.UTF_8);
BufferedReader serverBufferedReader = Files.newBufferedReader(serverMappings, StandardCharsets.UTF_8)) {
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingsSpec.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingsSpec.java
index 9654ddca..e6bba1a9 100644
--- a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingsSpec.java
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingsSpec.java
@@ -28,7 +28,7 @@ import net.fabricmc.loom.api.mappings.layered.MappingContext;
import net.fabricmc.loom.api.mappings.layered.spec.MappingsSpec;
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftVersionMeta;
-public record MojangMappingsSpec(SilenceLicenseOption silenceLicense) implements MappingsSpec<MojangMappingLayer> {
+public record MojangMappingsSpec(SilenceLicenseOption silenceLicense, boolean nameSyntheticMembers) implements MappingsSpec<MojangMappingLayer> {
// Keys in dependency manifest
private static final String MANIFEST_CLIENT_MAPPINGS = "client_mappings";
private static final String MANIFEST_SERVER_MAPPINGS = "server_mappings";
@@ -82,6 +82,7 @@ public record MojangMappingsSpec(SilenceLicenseOption silenceLicense) implements
versionInfo.download(MANIFEST_CLIENT_MAPPINGS),
versionInfo.download(MANIFEST_SERVER_MAPPINGS),
context.workingDirectory("mojang"),
+ nameSyntheticMembers(),
context.getLogger(),
silenceLicense()
);
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingsSpecBuilderImpl.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingsSpecBuilderImpl.java
new file mode 100644
index 00000000..7937ad1f
--- /dev/null
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/mojmap/MojangMappingsSpecBuilderImpl.java
@@ -0,0 +1,54 @@
+/*
+ * This file is part of fabric-loom, licensed under the MIT License (MIT).
+ *
+ * Copyright (c) 2021 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.configuration.providers.mappings.mojmap;
+
+import net.fabricmc.loom.api.mappings.layered.spec.MojangMappingsSpecBuilder;
+
+public class MojangMappingsSpecBuilderImpl implements MojangMappingsSpecBuilder {
+ // TODO 0.11 loom change default to false
+ private boolean nameSyntheticMembers = true;
+
+ private MojangMappingsSpecBuilderImpl() {
+ }
+
+ public static MojangMappingsSpecBuilderImpl builder() {
+ return new MojangMappingsSpecBuilderImpl();
+ }
+
+ @Override
+ public MojangMappingsSpecBuilder setNameSyntheticMembers(boolean value) {
+ nameSyntheticMembers = value;
+ return this;
+ }
+
+ @Override
+ public boolean getNameSyntheticMembers() {
+ return nameSyntheticMembers;
+ }
+
+ public MojangMappingsSpec build() {
+ return new MojangMappingsSpec(nameSyntheticMembers);
+ }
+}
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/mappings/utils/DstNameFilterMappingVisitor.java b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/utils/DstNameFilterMappingVisitor.java
new file mode 100644
index 00000000..71c376cc
--- /dev/null
+++ b/src/main/java/net/fabricmc/loom/configuration/providers/mappings/utils/DstNameFilterMappingVisitor.java
@@ -0,0 +1,54 @@
+/*
+ * This file is part of fabric-loom, licensed under the MIT License (MIT).
+ *
+ * Copyright (c) 2021 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.configuration.providers.mappings.utils;
+
+import java.io.IOException;
+import java.util.regex.Pattern;
+
+import net.fabricmc.mappingio.MappedElementKind;
+import net.fabricmc.mappingio.MappingVisitor;
+import net.fabricmc.mappingio.adapter.ForwardingMappingVisitor;
+
+/**
+ * Filters out method and field names based on the provided regex pattern.
+ */
+public class DstNameFilterMappingVisitor extends ForwardingMappingVisitor {
+ private final Pattern pattern;
+
+ public DstNameFilterMappingVisitor(MappingVisitor next, Pattern pattern) {
+ super(next);
+
+ this.pattern = pattern;
+ }
+
+ @Override
+ public void visitDstName(MappedElementKind targetKind, int namespace, String name) throws IOException {
+ if ((targetKind == MappedElementKind.FIELD || targetKind == MappedElementKind.METHOD) && pattern.matcher(name).matches()) {
+ return;
+ }
+
+ super.visitDstName(targetKind, namespace, name);
+ }
+}