From 7611e3a63277452d2e0bc05ce76d3a31a298c477 Mon Sep 17 00:00:00 2001 From: "val = int(1)" Date: Wed, 29 Dec 2021 23:16:13 +0100 Subject: [PATCH] Add support for mixin files outside of root in MixinRefmapHelper (#536) * Add support for mixin files outside of root in MixinRefmapHelper * Fix checkstyle + Integration tests + Checks all srcDirs from sourceSet * Redid part that failed to save for last commit * Other issues fixed * Checkstyle again * Made getting root paths safer Co-authored-by: Juuxel <6596629+Juuxel@users.noreply.github.com> * CodeNarc for test * Normalized all paths to fix issues on Windows * Removed debug line used to test return value of lamdba Co-authored-by: Juuxel <6596629+Juuxel@users.noreply.github.com> Co-authored-by: modmuss50 --- .../loom/extension/MixinExtensionImpl.java | 2 +- .../net/fabricmc/loom/task/RemapJarTask.java | 24 ++++++++++++++++++- .../integration/MixinApAutoRefmapTest.groovy | 3 +++ .../example/mixin/ExampleMixinSubfolder.java | 15 ++++++++++++ .../src/main/resources/fabric.mod.json | 1 + .../resources/subfolder/subfolder.mixins.json | 14 +++++++++++ 6 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/test/resources/projects/mixinApAutoRefmap/src/main/java/net/fabricmc/example/mixin/ExampleMixinSubfolder.java create mode 100644 src/test/resources/projects/mixinApAutoRefmap/src/main/resources/subfolder/subfolder.mixins.json diff --git a/src/main/java/net/fabricmc/loom/extension/MixinExtensionImpl.java b/src/main/java/net/fabricmc/loom/extension/MixinExtensionImpl.java index c8bf56a0..d79f5d62 100644 --- a/src/main/java/net/fabricmc/loom/extension/MixinExtensionImpl.java +++ b/src/main/java/net/fabricmc/loom/extension/MixinExtensionImpl.java @@ -76,7 +76,7 @@ public class MixinExtensionImpl extends MixinExtensionApiImpl implements MixinEx protected PatternSet add0(SourceSet sourceSet, Provider refmapName) { if (!super.getUseLegacyMixinAp().get()) throw new IllegalStateException("You need to set useLegacyMixinAp = true to configure Mixin annotation processor."); - PatternSet pattern = new PatternSet().setIncludes(Collections.singletonList("*.json")); + PatternSet pattern = new PatternSet().setIncludes(Collections.singletonList("**/*.json")); MixinExtension.setMixinInformationContainer(sourceSet, new MixinExtension.MixinInformationContainer(sourceSet, refmapName, pattern)); isDefault = false; diff --git a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java index 16b86424..a9d357aa 100644 --- a/src/main/java/net/fabricmc/loom/task/RemapJarTask.java +++ b/src/main/java/net/fabricmc/loom/task/RemapJarTask.java @@ -136,12 +136,34 @@ public abstract class RemapJarTask extends AbstractRemapJarTask { MixinExtension.getMixinInformationContainer(sourceSet) ); + String[] rootPaths = sourceSet.getResources().getSrcDirs().stream() + .map(root -> { + String rootPath = root.getAbsolutePath().replace("\\", "/"); + + if (rootPath.charAt(rootPath.length() - 1) != '/') { + rootPath += '/'; + } + + return rootPath; + }) + .toArray(String[]::new); + final String refmapName = container.refmapNameProvider().get(); final List mixinConfigs = container.sourceSet().getResources() .matching(container.mixinConfigPattern()) .getFiles() .stream() - .map(File::getName) + .map(file -> { + String s = file.getAbsolutePath().replace("\\", "/"); + + for (String rootPath : rootPaths) { + if (s.startsWith(rootPath)) { + s = s.substring(rootPath.length()); + } + } + + return s; + }) .filter(allMixinConfigs::contains) .toList(); diff --git a/src/test/groovy/net/fabricmc/loom/test/integration/MixinApAutoRefmapTest.groovy b/src/test/groovy/net/fabricmc/loom/test/integration/MixinApAutoRefmapTest.groovy index f8b5b6d0..69bfa93c 100644 --- a/src/test/groovy/net/fabricmc/loom/test/integration/MixinApAutoRefmapTest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/integration/MixinApAutoRefmapTest.groovy @@ -67,6 +67,9 @@ class MixinApAutoRefmapTest extends Specification implements GradleProjectTestTr def j5 = JsonParser.parseReader(new InputStreamReader(jar.getInputStream(jar.getEntry("irrelevant.mixins.json")))) !j5.asJsonObject.has("refmap") + def j6 = JsonParser.parseReader(new InputStreamReader(jar.getInputStream(jar.getEntry("subfolder/subfolder.mixins.json")))) + j6.asJsonObject.getAsJsonPrimitive("refmap").getAsString() == "refmap0001.json" + where: version << STANDARD_TEST_VERSIONS } diff --git a/src/test/resources/projects/mixinApAutoRefmap/src/main/java/net/fabricmc/example/mixin/ExampleMixinSubfolder.java b/src/test/resources/projects/mixinApAutoRefmap/src/main/java/net/fabricmc/example/mixin/ExampleMixinSubfolder.java new file mode 100644 index 00000000..519929ec --- /dev/null +++ b/src/test/resources/projects/mixinApAutoRefmap/src/main/java/net/fabricmc/example/mixin/ExampleMixinSubfolder.java @@ -0,0 +1,15 @@ +package net.fabricmc.example.mixin; + +import net.minecraft.client.gui.screen.ChatScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ChatScreen.class) +public class ExampleMixinSubfolder { + @Inject(at = @At("HEAD"), method = "init()V") + private void init(CallbackInfo info) { + System.out.println("This line is printed by an example mod mixin!"); + } +} diff --git a/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/fabric.mod.json b/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/fabric.mod.json index 62efe822..c92f0ce7 100644 --- a/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/fabric.mod.json +++ b/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/fabric.mod.json @@ -24,6 +24,7 @@ }, "mixins": [ "main.mixins.json", + "subfolder/subfolder.mixins.json", { "config": "blabla.json", "environment": "client" diff --git a/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/subfolder/subfolder.mixins.json b/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/subfolder/subfolder.mixins.json new file mode 100644 index 00000000..ef124cac --- /dev/null +++ b/src/test/resources/projects/mixinApAutoRefmap/src/main/resources/subfolder/subfolder.mixins.json @@ -0,0 +1,14 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "net.fabricmc.example.mixin", + "compatibilityLevel": "JAVA_16", + "mixins": [ + ], + "client": [ + "ExampleMixinSubfolder" + ], + "injectors": { + "defaultRequire": 1 + } +}