From 35afda4398c61d2c816e02a827231308e3b58bae Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Fri, 12 Nov 2021 10:46:23 +0000 Subject: [PATCH] Fix `namedElements` not extending from api (#533) * Fix `namedElements` not extending from api Fix artifact not waiting for remapAllJars with shared caches * Use apiElements * Add a better test for this. * Also add remapped api mods to namedElements --- .../loom/build/ModCompileRemapper.java | 6 +++++ .../configuration/CompileConfiguration.java | 1 + .../configuration/RemapConfiguration.java | 10 ++++++++- .../loom/test/LoomTestConstants.groovy | 2 +- .../test/integration/FabricAPITest.groovy | 8 +++---- src/test/resources/patches/fabric_api.patch | 22 ------------------- .../projects/multiproject/core/build.gradle | 7 +++++- .../java/net/fabricmc/example/ExampleMod.java | 9 ++++++++ 8 files changed, 36 insertions(+), 29 deletions(-) delete mode 100644 src/test/resources/patches/fabric_api.patch diff --git a/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java b/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java index 0a3dca0..4b922cd 100644 --- a/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java +++ b/src/main/java/net/fabricmc/loom/build/ModCompileRemapper.java @@ -45,6 +45,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; @@ -156,6 +157,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 789983b..e39634a 100644 --- a/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/CompileConfiguration.java @@ -64,6 +64,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); diff --git a/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java b/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java index 03d19e3..1a9ac21 100644 --- a/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java +++ b/src/main/java/net/fabricmc/loom/configuration/RemapConfiguration.java @@ -73,7 +73,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/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy b/src/test/groovy/net/fabricmc/loom/test/LoomTestConstants.groovy index 643cee8..8156fce 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-20211108233000+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 893817e..49db69b 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\"") def server = ServerRunner.create(gradle.projectDir, "1.17.1") .withMod(gradle.getOutputFile("fabric-api-${API_VERSION}.jar")) diff --git a/src/test/resources/patches/fabric_api.patch b/src/test/resources/patches/fabric_api.patch deleted file mode 100644 index cce2c1a..0000000 --- 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/multiproject/core/build.gradle b/src/test/resources/projects/multiproject/core/build.gradle index 8a09f64..652eb35 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 e5ed082..2afebd0 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); + } } }