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 | |
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')
12 files changed, 73 insertions, 70 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); diff --git a/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy b/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy index 5329c9fe..8156fce6 100644 --- a/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy @@ -28,7 +28,7 @@ import org.gradle.util.GradleVersion class LoomTestConstants { public final static String DEFAULT_GRADLE = GradleVersion.current().getVersion() - public final static String PRE_RELEASE_GRADLE = "7.4-20211023222429+0000" + public final static String PRE_RELEASE_GRADLE = "7.4-20211110232442+0000" public final static String[] STANDARD_TEST_VERSIONS = [DEFAULT_GRADLE, PRE_RELEASE_GRADLE] } diff --git a/src/test/groovy/net/fabricmc/loom/test/integration/FabricAPITest.groovy b/src/test/groovy/net/fabricmc/loom/test/integration/FabricAPITest.groovy index 7c1246b5..40ca45f0 100644 --- a/src/test/groovy/net/fabricmc/loom/test/integration/FabricAPITest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/integration/FabricAPITest.groovy @@ -43,14 +43,14 @@ class FabricAPITest extends Specification implements GradleProjectTestTrait { def "build and run (gradle #version)"() { setup: def gradle = gradleProject( - repo: "https://github.com/FabricMC/fabric.git", - commit: "46582230fb580d4c1f71e4b0737df27417ec9cb1", + repo: "https://github.com/modmuss50/fabric.git", + commit: "e954edb6069e36139fd70428cfe4cddb5826c498", version: version, - patch: "fabric_api" +// patch: "fabric_api" ) // Set the version to something constant - gradle.buildGradle.text = gradle.buildGradle.text.replace('Globals.baseVersion + "+" + (ENV.GITHUB_RUN_NUMBER ? "" : "local-") + getBranch()', "\"$API_VERSION\"") + gradle.buildGradle.text = gradle.buildGradle.text.replace('project.version + "+" + (ENV.GITHUB_RUN_NUMBER ? "" : "local-") + getBranch()', "\"$API_VERSION\"") .replace('id "fabric-loom" version "0.9.50"', 'id "dev.architectury.loom"') .replace('"fabric-loom"', '"dev.architectury.loom"') diff --git a/src/test/resources/patches/fabric_api.patch b/src/test/resources/patches/fabric_api.patch deleted file mode 100644 index cce2c1a8..00000000 --- a/src/test/resources/patches/fabric_api.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/build.gradle b/build.gradle ---- a/build.gradle (revision fc40aa9d88e9457957bdf3f8cec9698846828cd3) -+++ b/build.gradle (date 1631009569915) -@@ -257,6 +257,9 @@ - setupRepositories(repositories) - } - -+ // Required as moduleDependencies modifies the pom -+ loom.disableDeprecatedPomGeneration(publishing.publications.mavenJava) -+ - javadoc.enabled = false - } - -@@ -296,6 +299,8 @@ - setupRepositories(repositories) - } - -+loom.disableDeprecatedPomGeneration(publishing.publications.mavenJava) -+ - void setupRepositories(RepositoryHandler repositories) { - //repositories.mavenLocal() // uncomment for testing - def ENV = System.getenv() diff --git a/src/test/resources/projects/java16/gradle.properties b/src/test/resources/projects/java16/gradle.properties index 753673c4..cdc647ce 100644 --- a/src/test/resources/projects/java16/gradle.properties +++ b/src/test/resources/projects/java16/gradle.properties @@ -1,9 +1,9 @@ org.gradle.jvmargs=-Xmx1G -minecraft_version=21w39a -yarn_mappings=21w39a+build.1 -loader_version=0.11.7 -fabric_version=0.40.4+1.18 +minecraft_version=1.18-pre1 +yarn_mappings=1.18-pre1+build.2 +loader_version=0.12.5 +fabric_version=0.42.1+1.18 mod_version = 1.0.0 maven_group = com.example diff --git a/src/test/resources/projects/multiproject/core/build.gradle b/src/test/resources/projects/multiproject/core/build.gradle index 8a09f64b..652eb359 100644 --- a/src/test/resources/projects/multiproject/core/build.gradle +++ b/src/test/resources/projects/multiproject/core/build.gradle @@ -1 +1,6 @@ -archivesBaseName = "core"
\ No newline at end of file +archivesBaseName = "core" + +dependencies { + // An example api dep to be used by the other sub project. + modApi "TechReborn:TechReborn-1.16:3.8.4+build.236" +}
\ No newline at end of file diff --git a/src/test/resources/projects/multiproject/example/src/main/java/net/fabricmc/example/ExampleMod.java b/src/test/resources/projects/multiproject/example/src/main/java/net/fabricmc/example/ExampleMod.java index e5ed082e..2afebd00 100644 --- a/src/test/resources/projects/multiproject/example/src/main/java/net/fabricmc/example/ExampleMod.java +++ b/src/test/resources/projects/multiproject/example/src/main/java/net/fabricmc/example/ExampleMod.java @@ -1,6 +1,9 @@ package net.fabricmc.example; import net.fabricmc.api.ModInitializer; +import net.minecraft.block.BlockState; +import techreborn.blocks.cable.CableShapeUtil; +import net.minecraft.util.shape.VoxelShape; public class ExampleMod implements ModInitializer { @Override @@ -10,5 +13,11 @@ public class ExampleMod implements ModInitializer { // Proceed with mild caution. System.out.println("Hello Fabric world!"); + + if (false) { + // Just here to make sure it compiles as named, not to test it runs + BlockState state = null; + VoxelShape shape = new CableShapeUtil(null).getShape(state); + } } } |