From 5d2b75dc1dad606211f0fcfabb4ffbfe6430384b Mon Sep 17 00:00:00 2001 From: modmuss Date: Tue, 16 Jan 2024 16:27:51 +0000 Subject: [PATCH] Remapper extension improvements (#1024) * Remapper extension improvements * Fix * Fix generics --- .../loom/api/LoomGradleExtensionAPI.java | 2 +- .../api/remapping/TinyRemapperExtension.java | 49 +++++++++++++++++-- .../extension/LoomGradleExtensionApiImpl.java | 4 +- .../extension/RemapperExtensionHolder.java | 16 +++--- 4 files changed, 58 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java b/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java index ef647b9b..6570178e 100644 --- a/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java +++ b/src/main/java/net/fabricmc/loom/api/LoomGradleExtensionAPI.java @@ -225,7 +225,7 @@ public interface LoomGradleExtensionAPI { Property getSplitModDependencies(); - void addRemapperExtension(Class> remapperExtensionClass, Class parametersClass, Action parameterAction); + void addRemapperExtension(Class> remapperExtensionClass, Class parametersClass, Action parameterAction); /** * @return The minecraft version, as a {@link Provider}. diff --git a/src/main/java/net/fabricmc/loom/api/remapping/TinyRemapperExtension.java b/src/main/java/net/fabricmc/loom/api/remapping/TinyRemapperExtension.java index 417b77f6..fb68dbc4 100644 --- a/src/main/java/net/fabricmc/loom/api/remapping/TinyRemapperExtension.java +++ b/src/main/java/net/fabricmc/loom/api/remapping/TinyRemapperExtension.java @@ -42,8 +42,8 @@ public interface TinyRemapperExtension { * @return A {@link TinyRemapper.AnalyzeVisitorProvider} or {@code null}. */ @Nullable - default TinyRemapper.AnalyzeVisitorProvider getAnalyzeVisitorProvider() { - return null; + default TinyRemapper.AnalyzeVisitorProvider getAnalyzeVisitorProvider(Context context) { + return getAnalyzeVisitorProvider(); } /** @@ -52,8 +52,8 @@ public interface TinyRemapperExtension { * @return A {@link TinyRemapper.ApplyVisitorProvider} or {@code null}. */ @Nullable - default TinyRemapper.ApplyVisitorProvider getPreApplyVisitor() { - return null; + default TinyRemapper.ApplyVisitorProvider getPreApplyVisitor(Context context) { + return getPreApplyVisitor(); } /** @@ -62,6 +62,47 @@ public interface TinyRemapperExtension { * @return A {@link TinyRemapper.ApplyVisitorProvider} or {@code null}. */ @Nullable + default TinyRemapper.ApplyVisitorProvider getPostApplyVisitor(Context context) { + return getPostApplyVisitor(); + } + + interface Context { + /** + * @return The source namespace. + */ + String sourceNamespace(); + + /** + * @return The target namespace. + */ + String targetNamespace(); + } + + // Deprecated, for removal in Loom 1.6: + + /** + * @deprecated Use {@link #getAnalyzeVisitorProvider(Context)} instead. + */ + @Deprecated(forRemoval = true) + @Nullable + default TinyRemapper.AnalyzeVisitorProvider getAnalyzeVisitorProvider() { + return null; + } + + /** + * @deprecated Use {@link #getPreApplyVisitor(Context)} instead. + */ + @Deprecated(forRemoval = true) + @Nullable + default TinyRemapper.ApplyVisitorProvider getPreApplyVisitor() { + return null; + } + + /** + * @deprecated Use {@link #getPostApplyVisitor(Context)} instead. + */ + @Deprecated(forRemoval = true) + @Nullable default TinyRemapper.ApplyVisitorProvider getPostApplyVisitor() { return null; } diff --git a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java index a48042b0..d9abf760 100644 --- a/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java +++ b/src/main/java/net/fabricmc/loom/extension/LoomGradleExtensionApiImpl.java @@ -401,7 +401,7 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA } @Override - public void addRemapperExtension(Class> remapperExtensionClass, Class parametersClass, Action parameterAction) { + public void addRemapperExtension(Class> remapperExtensionClass, Class parametersClass, Action parameterAction) { final ObjectFactory objectFactory = getProject().getObjects(); final RemapperExtensionHolder holder; @@ -413,7 +413,7 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA holder = objectFactory.newInstance(RemapperExtensionHolder.class, RemapperParameters.None.INSTANCE); } - holder.getRemapperExtensionClassName().set(remapperExtensionClass.getName()); + holder.getRemapperExtensionClass().set(remapperExtensionClass); remapperExtensions.add(holder); } diff --git a/src/main/java/net/fabricmc/loom/extension/RemapperExtensionHolder.java b/src/main/java/net/fabricmc/loom/extension/RemapperExtensionHolder.java index 454e75ec..cb97b954 100644 --- a/src/main/java/net/fabricmc/loom/extension/RemapperExtensionHolder.java +++ b/src/main/java/net/fabricmc/loom/extension/RemapperExtensionHolder.java @@ -52,7 +52,7 @@ public abstract class RemapperExtensionHolder { } @Input - public abstract Property getRemapperExtensionClassName(); + public abstract Property>> getRemapperExtensionClass(); @Nested @Optional @@ -66,9 +66,11 @@ public abstract class RemapperExtensionHolder { tinyRemapperBuilder.extraPostApplyVisitor(new RemapperExtensionImpl(remapperExtension, sourceNamespace, targetNamespace)); if (remapperExtension instanceof TinyRemapperExtension tinyRemapperExtension) { - final TinyRemapper.AnalyzeVisitorProvider analyzeVisitorProvider = tinyRemapperExtension.getAnalyzeVisitorProvider(); - final TinyRemapper.ApplyVisitorProvider preApplyVisitorProvider = tinyRemapperExtension.getPreApplyVisitor(); - final TinyRemapper.ApplyVisitorProvider postApplyVisitorProvider = tinyRemapperExtension.getPostApplyVisitor(); + final var context = new TinyRemapperContextImpl(sourceNamespace, targetNamespace); + + final TinyRemapper.AnalyzeVisitorProvider analyzeVisitorProvider = tinyRemapperExtension.getAnalyzeVisitorProvider(context); + final TinyRemapper.ApplyVisitorProvider preApplyVisitorProvider = tinyRemapperExtension.getPreApplyVisitor(context); + final TinyRemapper.ApplyVisitorProvider postApplyVisitorProvider = tinyRemapperExtension.getPostApplyVisitor(context); if (analyzeVisitorProvider != null) { tinyRemapperBuilder.extraAnalyzeVisitor(analyzeVisitorProvider); @@ -86,8 +88,7 @@ public abstract class RemapperExtensionHolder { private RemapperExtension newInstance(ObjectFactory objectFactory) { try { - Class remapperExtensionClass = Class.forName(getRemapperExtensionClassName().get()) - .asSubclass(RemapperExtension.class); + Class> remapperExtensionClass = getRemapperExtensionClass().get(); if (remapperParameters == RemapperParameters.None.INSTANCE) { return objectFactory.newInstance(remapperExtensionClass); @@ -125,4 +126,7 @@ public abstract class RemapperExtensionHolder { private record RemapperContextImpl(Remapper remapper, String sourceNamespace, String targetNamespace) implements RemapperContext { } + + private record TinyRemapperContextImpl(String sourceNamespace, String targetNamespace) implements TinyRemapperExtension.Context { + } }