diff options
author | shedaniel <daniel@shedaniel.me> | 2021-11-13 00:40:44 +0800 |
---|---|---|
committer | shedaniel <daniel@shedaniel.me> | 2021-11-13 00:40:44 +0800 |
commit | b7946e4ad5fd7d5b83920f974db8e0334636442f (patch) | |
tree | abc63cf8491268ce996062086b5de26b56f9cc18 /src/main/java | |
parent | c412c1135474e7ec3db1ef8f9894113336b7c78f (diff) | |
parent | 35afda4398c61d2c816e02a827231308e3b58bae (diff) | |
download | architectury-loom-b7946e4ad5fd7d5b83920f974db8e0334636442f.tar.gz architectury-loom-b7946e4ad5fd7d5b83920f974db8e0334636442f.tar.bz2 architectury-loom-b7946e4ad5fd7d5b83920f974db8e0334636442f.zip |
Merge remote-tracking branch 'FabricMC/dev/0.10' into dev/0.10.0
# Conflicts:
# src/main/java/net/fabricmc/loom/configuration/providers/mappings/MappingsProviderImpl.java
# src/test/groovy/net/fabricmc/loom/test/integration/FabricAPITest.groovy
Diffstat (limited to 'src/main/java')
6 files changed, 49 insertions, 38 deletions
diff --git a/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java b/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java index 496e432e..ceccd3b2 100644 --- a/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java +++ b/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java @@ -46,6 +46,7 @@ import org.gradle.api.artifacts.result.ComponentArtifactsResult; import org.gradle.api.artifacts.result.ResolvedArtifactResult; import org.gradle.api.file.FileCollection; import org.gradle.api.logging.Logger; +import org.gradle.api.plugins.JavaPlugin; import org.gradle.jvm.JvmLibrary; import org.gradle.language.base.artifact.SourcesArtifact; import org.jetbrains.annotations.Nullable; @@ -160,6 +161,11 @@ public class ModCompileRemapper { if (entry.replacedWith() != null && !modDependencies.isEmpty()) { extension.getDeprecationHelper().replaceWithInLoom0_11(entry.sourceConfiguration(), entry.replacedWith()); } + + // Export to other projects + if (entry.targetConfiguration().equals(JavaPlugin.API_CONFIGURATION_NAME)) { + project.getConfigurations().getByName(Constants.Configurations.NAMED_ELEMENTS).extendsFrom(remappedConfig); + } }); } } diff --git a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java index 548e946d..9e9646c2 100644 --- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java @@ -24,10 +24,14 @@ package net.fabricmc.loom.configuration; +import java.nio.charset.StandardCharsets; + import org.gradle.api.Project; import org.gradle.api.plugins.JavaPlugin; import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.tasks.AbstractCopyTask; import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.api.tasks.javadoc.Javadoc; import org.gradle.jvm.tasks.Jar; @@ -106,6 +110,7 @@ public final class CompileConfiguration { extension.createLazyConfiguration(Constants.Configurations.NAMED_ELEMENTS).configure(configuration -> { configuration.setCanBeConsumed(true); configuration.setCanBeResolved(false); + configuration.extendsFrom(project.getConfigurations().getByName(JavaPlugin.API_CONFIGURATION_NAME)); }); extendsFrom(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME, Constants.Configurations.MAPPING_CONSTANTS, project); @@ -219,6 +224,12 @@ public final class CompileConfiguration { // Add the "dev" jar to the "namedElements" configuration p.artifacts(artifactHandler -> artifactHandler.add(Constants.Configurations.NAMED_ELEMENTS, p.getTasks().getByName("jar"))); + // Ensure that the encoding is set to UTF-8, no matter what the system default is + // this fixes some edge cases with special characters not displaying correctly + // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html + p.getTasks().withType(AbstractCopyTask.class).configureEach(abstractCopyTask -> abstractCopyTask.setFilteringCharset(StandardCharsets.UTF_8.name())); + p.getTasks().withType(JavaCompile.class).configureEach(javaCompile -> javaCompile.getOptions().setEncoding(StandardCharsets.UTF_8.name())); + if (p.getPluginManager().hasPlugin("org.jetbrains.kotlin.kapt")) { // If loom is applied after kapt, then kapt will use the AP arguments too early for loom to pass the arguments we need for mixin. throw new IllegalArgumentException("fabric-loom must be applied BEFORE kapt in the plugins { } block."); diff --git a/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java index 49403099..66f0481f 100644 --- a/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java @@ -78,7 +78,15 @@ public class RemapConfiguration { return; } - PublishArtifact artifact = artifacts.add(JavaPlugin.SOURCES_ELEMENTS_CONFIGURATION_NAME, task.getOutput()); + PublishArtifact artifact = artifacts.add(JavaPlugin.SOURCES_ELEMENTS_CONFIGURATION_NAME, task.getOutput(), configurablePublishArtifact -> { + Task remapJarTask = task; + + if (extension.getShareRemapCaches().get()) { + remapJarTask = project.getRootProject().getTasks().getByName(DEFAULT_REMAP_ALL_JARS_TASK_NAME); + } + + configurablePublishArtifact.builtBy(remapJarTask); + }); // Remove the existing artifact that does not run remapSourcesJar. // It doesn't seem to hurt, but I'm not sure if the file-level duplicates cause issues. diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProviderImpl.java b/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProviderImpl.java index 39ba664d..1967bb72 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProviderImpl.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/MinecraftProviderImpl.java @@ -298,8 +298,13 @@ public class MinecraftProviderImpl extends DependencyProvider implements Minecra } String jarPath = null; + String[] versions = versionsList.split("\n"); - for (String version : versionsList.split("\n")) { + if (versions.length != 1) { + throw new UnsupportedOperationException("Expected only 1 version in META-INF/versions.list, but got %d".formatted(versions.length)); + } + + for (String version : versions) { if (version.isBlank()) continue; String[] split = version.split("\t"); @@ -310,10 +315,9 @@ public class MinecraftProviderImpl extends DependencyProvider implements Minecra final String id = split[1]; final String path = split[2]; - if (minecraftVersion().equals(id)) { - jarPath = path; - break; - } + // Take the first (only) version we find. + jarPath = path; + break; } Objects.requireNonNull(jarPath, "Could not find minecraft server jar for " + minecraftVersion()); 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 8d9b2186..550ab640 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 @@ -83,8 +83,6 @@ import net.fabricmc.mappingio.tree.MappingTree; import net.fabricmc.mappingio.tree.MemoryMappingTree; import net.fabricmc.stitch.Command; import net.fabricmc.stitch.commands.CommandProposeFieldNames; -import net.fabricmc.stitch.commands.tinyv2.CommandMergeTinyV2; -import net.fabricmc.stitch.commands.tinyv2.CommandReorderTinyV2; import net.fabricmc.stitch.commands.tinyv2.TinyFile; import net.fabricmc.stitch.commands.tinyv2.TinyV2Writer; @@ -225,7 +223,7 @@ public class MappingsProviderImpl extends DependencyProvider implements Mappings if (processorManager.active() || (extension.isForge() && patchedProvider.usesProjectCache())) { mappedProvider = new MinecraftProcessedProvider(getProject(), processorManager); - getProject().getLogger().lifecycle("Using project based jar storage"); + getProject().getLogger().info("Using project based jar storage"); } else { mappedProvider = new MinecraftMappedProvider(getProject()); } @@ -447,18 +445,22 @@ public class MappingsProviderImpl extends DependencyProvider implements Mappings Stopwatch stopwatch = Stopwatch.createStarted(); project.getLogger().info(":merging mappings"); - MemoryMappingTree tree = new MemoryMappingTree(); - MappingSourceNsSwitch sourceNsSwitch = new MappingSourceNsSwitch(tree, MappingsNamespace.OFFICIAL.toString()); - readIntermediaryTree().accept(sourceNsSwitch); + MemoryMappingTree intermediaryTree = new MemoryMappingTree(); + readIntermediaryTree().accept(new MappingSourceNsSwitch(intermediaryTree, MappingsNamespace.INTERMEDIARY.toString())); try (BufferedReader reader = Files.newBufferedReader(from, StandardCharsets.UTF_8)) { - Tiny2Reader.read(reader, tree); + Tiny2Reader.read(reader, intermediaryTree); } - inheritMappedNamesOfEnclosingClasses(tree); + MemoryMappingTree officialTree = new MemoryMappingTree(); + MappingNsCompleter nsCompleter = new MappingNsCompleter(officialTree, Map.of(MappingsNamespace.OFFICIAL.toString(), MappingsNamespace.INTERMEDIARY.toString())); + MappingSourceNsSwitch nsSwitch = new MappingSourceNsSwitch(nsCompleter, MappingsNamespace.OFFICIAL.toString()); + intermediaryTree.accept(nsSwitch); + + inheritMappedNamesOfEnclosingClasses(officialTree); try (Tiny2Writer writer = new Tiny2Writer(Files.newBufferedWriter(out, StandardCharsets.UTF_8), false)) { - tree.accept(writer); + officialTree.accept(writer); } project.getLogger().info(":merged mappings in " + stopwatch.stop()); @@ -509,28 +511,6 @@ public class MappingsProviderImpl extends DependencyProvider implements Mappings return tree; } - private void reorderMappings(Path oldMappings, Path newMappings, String... newOrder) { - Command command = new CommandReorderTinyV2(); - String[] args = new String[2 + newOrder.length]; - args[0] = oldMappings.toAbsolutePath().toString(); - args[1] = newMappings.toAbsolutePath().toString(); - System.arraycopy(newOrder, 0, args, 2, newOrder.length); - runCommand(command, args); - } - - private void mergeMappings(Path intermediaryMappings, Path yarnMappings, Path newMergedMappings) { - try { - Command command = new CommandMergeTinyV2(); - runCommand(command, intermediaryMappings.toAbsolutePath().toString(), - yarnMappings.toAbsolutePath().toString(), - newMergedMappings.toAbsolutePath().toString(), - MappingsNamespace.INTERMEDIARY.toString(), MappingsNamespace.OFFICIAL.toString()); - } catch (Exception e) { - throw new RuntimeException("Could not merge mappings from " + intermediaryMappings.toString() - + " with mappings from " + yarnMappings, e); - } - } - private void suggestFieldNames(MinecraftProviderImpl minecraftProvider, Path oldMappings, Path newMappings) { Command command = new CommandProposeFieldNames(); runCommand(command, minecraftProvider.getMergedJar().getAbsolutePath(), diff --git a/src/main/java/net/fabricmc/loom/util/RecordComponentFixVisitor.java b/src/main/java/net/fabricmc/loom/util/RecordComponentFixVisitor.java index 14b26e20..fecab246 100644 --- a/src/main/java/net/fabricmc/loom/util/RecordComponentFixVisitor.java +++ b/src/main/java/net/fabricmc/loom/util/RecordComponentFixVisitor.java @@ -24,6 +24,8 @@ package net.fabricmc.loom.util; +import java.util.Objects; + import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.RecordComponentVisitor; @@ -60,7 +62,7 @@ public class RecordComponentFixVisitor extends ClassVisitor { @Override public FieldVisitor visitField(int access, String name, String descriptor, String signature, Object value) { - String intermediaryName = mappings.getField(owner, name, descriptor).getName(intermediaryNsId); + String intermediaryName = Objects.requireNonNull(mappings.getField(owner, name, descriptor), "Could not get field for %s:%s%s".formatted(owner, name, descriptor)).getName(intermediaryNsId); if (!hasExistingComponents && intermediaryName != null && intermediaryName.startsWith("comp_")) { super.visitRecordComponent(name, descriptor, signature); |