Use tiny-remapper to remap mixin annotation. (#441)
* use tiny-remapper 0.5.0 * add property of useLegacyMixinAp and rename mixin to mixinAp * disable mixin ap if useLegacyMixinAp is false * fix tests * remove experimental for mixinAp * enable mixin remapper * revert changes on API * rename MixinAp*** to Mixin*** * move useLegacyMixinAp inside MixinExtension * cleaner code * update test Co-authored-by: modmuss50 <modmuss50@gmail.com>dev/0.11
parent
52873435b7
commit
3b0dc7f0f4
|
@ -37,6 +37,7 @@ repositories {
|
||||||
url = 'https://maven.fabricmc.net/'
|
url = 'https://maven.fabricmc.net/'
|
||||||
}
|
}
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
mavenLocal()
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
|
@ -77,7 +78,7 @@ dependencies {
|
||||||
}
|
}
|
||||||
|
|
||||||
// tinyfile management
|
// tinyfile management
|
||||||
implementation ('net.fabricmc:tiny-remapper:0.4.3')
|
implementation ('net.fabricmc:tiny-remapper:0.5.0')
|
||||||
implementation ('net.fabricmc:tiny-mappings-parser:0.3.0+build.17')
|
implementation ('net.fabricmc:tiny-mappings-parser:0.3.0+build.17')
|
||||||
|
|
||||||
implementation 'net.fabricmc:access-widener:1.1.0'
|
implementation 'net.fabricmc:access-widener:1.1.0'
|
||||||
|
|
|
@ -43,7 +43,7 @@ import net.fabricmc.loom.configuration.providers.MinecraftProviderImpl;
|
||||||
import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl;
|
import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl;
|
||||||
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMappedProvider;
|
import net.fabricmc.loom.configuration.providers.minecraft.MinecraftMappedProvider;
|
||||||
import net.fabricmc.loom.extension.LoomFiles;
|
import net.fabricmc.loom.extension.LoomFiles;
|
||||||
import net.fabricmc.loom.extension.MixinApExtension;
|
import net.fabricmc.loom.extension.MixinExtension;
|
||||||
|
|
||||||
public interface LoomGradleExtension extends LoomGradleExtensionAPI {
|
public interface LoomGradleExtension extends LoomGradleExtensionAPI {
|
||||||
static LoomGradleExtension get(Project project) {
|
static LoomGradleExtension get(Project project) {
|
||||||
|
@ -102,5 +102,5 @@ public interface LoomGradleExtension extends LoomGradleExtensionAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
MixinApExtension getMixin();
|
MixinExtension getMixin();
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,11 +154,11 @@ public interface LoomGradleExtensionAPI {
|
||||||
|
|
||||||
NamedDomainObjectContainer<RunConfigSettings> getRunConfigs();
|
NamedDomainObjectContainer<RunConfigSettings> getRunConfigs();
|
||||||
|
|
||||||
@ApiStatus.Experimental
|
void mixin(Action<MixinExtensionAPI> action);
|
||||||
void mixin(Action<MixinApExtensionAPI> action);
|
|
||||||
|
|
||||||
@ApiStatus.Experimental
|
@ApiStatus.Experimental
|
||||||
MixinApExtensionAPI getMixin();
|
// TODO: move this from LoomGradleExtensionAPI to LoomGradleExtension once getRefmapName & setRefmapName is removed.
|
||||||
|
MixinExtensionAPI getMixin();
|
||||||
|
|
||||||
Property<String> getCustomMinecraftManifest();
|
Property<String> getCustomMinecraftManifest();
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,9 @@ import org.gradle.api.tasks.util.PatternSet;
|
||||||
import org.jetbrains.annotations.ApiStatus;
|
import org.jetbrains.annotations.ApiStatus;
|
||||||
|
|
||||||
@ApiStatus.Experimental
|
@ApiStatus.Experimental
|
||||||
public interface MixinApExtensionAPI {
|
public interface MixinExtensionAPI {
|
||||||
|
Property<Boolean> getUseLegacyMixinAp();
|
||||||
|
|
||||||
Property<String> getDefaultRefmapName();
|
Property<String> getDefaultRefmapName();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -45,27 +47,27 @@ public interface MixinApExtensionAPI {
|
||||||
void add(SourceSet sourceSet, String refmapName, Action<PatternSet> action);
|
void add(SourceSet sourceSet, String refmapName, Action<PatternSet> action);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply Mixin AP to sourceSet. See {@link MixinApExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
* Apply Mixin AP to sourceSet. See {@link MixinExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
||||||
* @param sourceSet the sourceSet that applies Mixin AP.
|
* @param sourceSet the sourceSet that applies Mixin AP.
|
||||||
* @param refmapName the output ref-map name.
|
* @param refmapName the output ref-map name.
|
||||||
*/
|
*/
|
||||||
void add(SourceSet sourceSet, String refmapName);
|
void add(SourceSet sourceSet, String refmapName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply Mixin AP to sourceSet. See {@link MixinApExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
* Apply Mixin AP to sourceSet. See {@link MixinExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
||||||
* @param sourceSet the sourceSet that applies Mixin AP.
|
* @param sourceSet the sourceSet that applies Mixin AP.
|
||||||
* @param action used for filter the mixin json files.
|
* @param action used for filter the mixin json files.
|
||||||
*/
|
*/
|
||||||
void add(SourceSet sourceSet, Action<PatternSet> action);
|
void add(SourceSet sourceSet, Action<PatternSet> action);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply Mixin AP to sourceSet. See {@link MixinApExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
* Apply Mixin AP to sourceSet. See {@link MixinExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
||||||
* @param sourceSet the sourceSet that applies Mixin AP.
|
* @param sourceSet the sourceSet that applies Mixin AP.
|
||||||
*/
|
*/
|
||||||
void add(SourceSet sourceSet);
|
void add(SourceSet sourceSet);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply Mixin AP to sourceSet. See {@link MixinApExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
* Apply Mixin AP to sourceSet. See {@link MixinExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
||||||
* @param sourceSetName the name of sourceSet that applies Mixin AP.
|
* @param sourceSetName the name of sourceSet that applies Mixin AP.
|
||||||
* @param refmapName the output ref-map name.
|
* @param refmapName the output ref-map name.
|
||||||
* @param action used for filter the mixin json files.
|
* @param action used for filter the mixin json files.
|
||||||
|
@ -73,21 +75,21 @@ public interface MixinApExtensionAPI {
|
||||||
void add(String sourceSetName, String refmapName, Action<PatternSet> action);
|
void add(String sourceSetName, String refmapName, Action<PatternSet> action);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply Mixin AP to sourceSet. See {@link MixinApExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
* Apply Mixin AP to sourceSet. See {@link MixinExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
||||||
* @param sourceSetName the name of sourceSet that applies Mixin AP.
|
* @param sourceSetName the name of sourceSet that applies Mixin AP.
|
||||||
* @param refmapName the output ref-map name.
|
* @param refmapName the output ref-map name.
|
||||||
*/
|
*/
|
||||||
void add(String sourceSetName, String refmapName);
|
void add(String sourceSetName, String refmapName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply Mixin AP to sourceSet. See {@link MixinApExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
* Apply Mixin AP to sourceSet. See {@link MixinExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
||||||
* @param sourceSetName the name of sourceSet that applies Mixin AP.
|
* @param sourceSetName the name of sourceSet that applies Mixin AP.
|
||||||
* @param action used for filter the mixin json files.
|
* @param action used for filter the mixin json files.
|
||||||
*/
|
*/
|
||||||
void add(String sourceSetName, Action<PatternSet> action);
|
void add(String sourceSetName, Action<PatternSet> action);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Apply Mixin AP to sourceSet. See {@link MixinApExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
* Apply Mixin AP to sourceSet. See {@link MixinExtensionAPI#add(SourceSet, String, Action)} for more detail.
|
||||||
* @param sourceSetName the name of sourceSet that applies Mixin AP.
|
* @param sourceSetName the name of sourceSet that applies Mixin AP.
|
||||||
*/
|
*/
|
||||||
void add(String sourceSetName);
|
void add(String sourceSetName);
|
|
@ -48,7 +48,7 @@ import org.zeroturnaround.zip.transform.ZipEntryTransformerEntry;
|
||||||
|
|
||||||
import net.fabricmc.loom.LoomGradleExtension;
|
import net.fabricmc.loom.LoomGradleExtension;
|
||||||
import net.fabricmc.loom.LoomGradlePlugin;
|
import net.fabricmc.loom.LoomGradlePlugin;
|
||||||
import net.fabricmc.loom.extension.MixinApExtension;
|
import net.fabricmc.loom.extension.MixinExtension;
|
||||||
|
|
||||||
public final class MixinRefmapHelper {
|
public final class MixinRefmapHelper {
|
||||||
private MixinRefmapHelper() { }
|
private MixinRefmapHelper() { }
|
||||||
|
@ -57,14 +57,14 @@ public final class MixinRefmapHelper {
|
||||||
|
|
||||||
public static boolean addRefmapName(Project project, Path outputPath) {
|
public static boolean addRefmapName(Project project, Path outputPath) {
|
||||||
try {
|
try {
|
||||||
MixinApExtension mixin = LoomGradleExtension.get(project).getMixin();
|
MixinExtension mixin = LoomGradleExtension.get(project).getMixin();
|
||||||
File output = outputPath.toFile();
|
File output = outputPath.toFile();
|
||||||
|
|
||||||
Collection<String> allMixinConfigs = getMixinConfigurationFiles(readFabricModJson(output));
|
Collection<String> allMixinConfigs = getMixinConfigurationFiles(readFabricModJson(output));
|
||||||
|
|
||||||
return mixin.getMixinSourceSetsStream().map(sourceSet -> {
|
return mixin.getMixinSourceSetsStream().map(sourceSet -> {
|
||||||
MixinApExtension.MixinInformationContainer container = Objects.requireNonNull(
|
MixinExtension.MixinInformationContainer container = Objects.requireNonNull(
|
||||||
MixinApExtension.getMixinInformationContainer(sourceSet)
|
MixinExtension.getMixinInformationContainer(sourceSet)
|
||||||
);
|
);
|
||||||
|
|
||||||
Stream<String> mixinConfigs = sourceSet.getResources()
|
Stream<String> mixinConfigs = sourceSet.getResources()
|
||||||
|
|
|
@ -39,7 +39,7 @@ import org.gradle.api.artifacts.Configuration;
|
||||||
import org.gradle.api.artifacts.ConfigurationContainer;
|
import org.gradle.api.artifacts.ConfigurationContainer;
|
||||||
import org.gradle.api.tasks.SourceSet;
|
import org.gradle.api.tasks.SourceSet;
|
||||||
|
|
||||||
import net.fabricmc.loom.extension.MixinApExtension;
|
import net.fabricmc.loom.extension.MixinExtension;
|
||||||
import net.fabricmc.loom.LoomGradleExtension;
|
import net.fabricmc.loom.LoomGradleExtension;
|
||||||
import net.fabricmc.loom.util.Constants;
|
import net.fabricmc.loom.util.Constants;
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ public abstract class AnnotationProcessorInvoker<T extends Task> {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected static Collection<Configuration> getApConfigurations(Project project, Function<String, String> getApConfigNameFunc) {
|
protected static Collection<Configuration> getApConfigurations(Project project, Function<String, String> getApConfigNameFunc) {
|
||||||
MixinApExtension mixin = LoomGradleExtension.get(project).getMixin();
|
MixinExtension mixin = LoomGradleExtension.get(project).getMixin();
|
||||||
return mixin.getApConfigurationsStream(getApConfigNameFunc).collect(Collectors.toList());
|
return mixin.getApConfigurationsStream(getApConfigNameFunc).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ public abstract class AnnotationProcessorInvoker<T extends Task> {
|
||||||
private void passMixinArguments(T task, SourceSet sourceSet) {
|
private void passMixinArguments(T task, SourceSet sourceSet) {
|
||||||
try {
|
try {
|
||||||
LoomGradleExtension loom = LoomGradleExtension.get(project);
|
LoomGradleExtension loom = LoomGradleExtension.get(project);
|
||||||
String refmapName = Objects.requireNonNull(MixinApExtension.getMixinInformationContainer(sourceSet)).refmapNameProvider().get();
|
String refmapName = Objects.requireNonNull(MixinExtension.getMixinInformationContainer(sourceSet)).refmapNameProvider().get();
|
||||||
Map<String, String> args = new HashMap<>() {{
|
Map<String, String> args = new HashMap<>() {{
|
||||||
put(Constants.MixinArguments.IN_MAP_FILE_NAMED_INTERMEDIARY, loom.getMappingsProvider().tinyMappings.toFile().getCanonicalPath());
|
put(Constants.MixinArguments.IN_MAP_FILE_NAMED_INTERMEDIARY, loom.getMappingsProvider().tinyMappings.toFile().getCanonicalPath());
|
||||||
put(Constants.MixinArguments.OUT_MAP_FILE_NAMED_INTERMEDIARY, loom.getNextMixinMappings().getCanonicalPath());
|
put(Constants.MixinArguments.OUT_MAP_FILE_NAMED_INTERMEDIARY, loom.getNextMixinMappings().getCanonicalPath());
|
||||||
|
|
|
@ -35,7 +35,7 @@ import org.gradle.api.tasks.SourceSet;
|
||||||
import org.gradle.api.tasks.compile.JavaCompile;
|
import org.gradle.api.tasks.compile.JavaCompile;
|
||||||
|
|
||||||
import net.fabricmc.loom.LoomGradleExtension;
|
import net.fabricmc.loom.LoomGradleExtension;
|
||||||
import net.fabricmc.loom.extension.MixinApExtension;
|
import net.fabricmc.loom.extension.MixinExtension;
|
||||||
|
|
||||||
public class JavaApInvoker extends AnnotationProcessorInvoker<JavaCompile> {
|
public class JavaApInvoker extends AnnotationProcessorInvoker<JavaCompile> {
|
||||||
public JavaApInvoker(Project project) {
|
public JavaApInvoker(Project project) {
|
||||||
|
@ -46,7 +46,7 @@ public class JavaApInvoker extends AnnotationProcessorInvoker<JavaCompile> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<SourceSet, JavaCompile> getInvokerTasks(Project project) {
|
private static Map<SourceSet, JavaCompile> getInvokerTasks(Project project) {
|
||||||
MixinApExtension mixin = LoomGradleExtension.get(project).getMixin();
|
MixinExtension mixin = LoomGradleExtension.get(project).getMixin();
|
||||||
return mixin.getInvokerTasksStream(AnnotationProcessorInvoker.JAVA)
|
return mixin.getInvokerTasksStream(AnnotationProcessorInvoker.JAVA)
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, entry -> Objects.requireNonNull((JavaCompile) entry.getValue())));
|
.collect(Collectors.toMap(Map.Entry::getKey, entry -> Objects.requireNonNull((JavaCompile) entry.getValue())));
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ import org.gradle.api.tasks.compile.JavaCompile;
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KaptExtension;
|
import org.jetbrains.kotlin.gradle.plugin.KaptExtension;
|
||||||
|
|
||||||
import net.fabricmc.loom.LoomGradleExtension;
|
import net.fabricmc.loom.LoomGradleExtension;
|
||||||
import net.fabricmc.loom.extension.MixinApExtension;
|
import net.fabricmc.loom.extension.MixinExtension;
|
||||||
|
|
||||||
public class KaptApInvoker extends AnnotationProcessorInvoker<JavaCompile> {
|
public class KaptApInvoker extends AnnotationProcessorInvoker<JavaCompile> {
|
||||||
private final KaptExtension kaptExtension = project.getExtensions().getByType(KaptExtension.class);
|
private final KaptExtension kaptExtension = project.getExtensions().getByType(KaptExtension.class);
|
||||||
|
@ -66,7 +66,7 @@ public class KaptApInvoker extends AnnotationProcessorInvoker<JavaCompile> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<SourceSet, JavaCompile> getInvokerTasks(Project project) {
|
private static Map<SourceSet, JavaCompile> getInvokerTasks(Project project) {
|
||||||
MixinApExtension mixin = LoomGradleExtension.get(project).getMixin();
|
MixinExtension mixin = LoomGradleExtension.get(project).getMixin();
|
||||||
return mixin.getInvokerTasksStream(AnnotationProcessorInvoker.JAVA)
|
return mixin.getInvokerTasksStream(AnnotationProcessorInvoker.JAVA)
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, entry -> Objects.requireNonNull((JavaCompile) entry.getValue())));
|
.collect(Collectors.toMap(Map.Entry::getKey, entry -> Objects.requireNonNull((JavaCompile) entry.getValue())));
|
||||||
}
|
}
|
||||||
|
@ -82,7 +82,7 @@ public class KaptApInvoker extends AnnotationProcessorInvoker<JavaCompile> {
|
||||||
SourceSet sourceSet = entry.getKey();
|
SourceSet sourceSet = entry.getKey();
|
||||||
task.doLast(t -> {
|
task.doLast(t -> {
|
||||||
try {
|
try {
|
||||||
String refmapName = Objects.requireNonNull(MixinApExtension.getMixinInformationContainer(sourceSet)).refmapNameProvider().get();
|
String refmapName = Objects.requireNonNull(MixinExtension.getMixinInformationContainer(sourceSet)).refmapNameProvider().get();
|
||||||
Path src = Paths.get(getRefmapDestination(task, refmapName));
|
Path src = Paths.get(getRefmapDestination(task, refmapName));
|
||||||
Path dest = Paths.get(task.getDestinationDir().toString(), refmapName);
|
Path dest = Paths.get(task.getDestinationDir().toString(), refmapName);
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ import org.gradle.api.tasks.SourceSet;
|
||||||
import org.gradle.api.tasks.scala.ScalaCompile;
|
import org.gradle.api.tasks.scala.ScalaCompile;
|
||||||
|
|
||||||
import net.fabricmc.loom.LoomGradleExtension;
|
import net.fabricmc.loom.LoomGradleExtension;
|
||||||
import net.fabricmc.loom.extension.MixinApExtension;
|
import net.fabricmc.loom.extension.MixinExtension;
|
||||||
|
|
||||||
public class ScalaApInvoker extends AnnotationProcessorInvoker<ScalaCompile> {
|
public class ScalaApInvoker extends AnnotationProcessorInvoker<ScalaCompile> {
|
||||||
public ScalaApInvoker(Project project) {
|
public ScalaApInvoker(Project project) {
|
||||||
|
@ -47,7 +47,7 @@ public class ScalaApInvoker extends AnnotationProcessorInvoker<ScalaCompile> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Map<SourceSet, ScalaCompile> getInvokerTasks(Project project) {
|
private static Map<SourceSet, ScalaCompile> getInvokerTasks(Project project) {
|
||||||
MixinApExtension mixin = LoomGradleExtension.get(project).getMixin();
|
MixinExtension mixin = LoomGradleExtension.get(project).getMixin();
|
||||||
return mixin.getInvokerTasksStream(AnnotationProcessorInvoker.SCALA)
|
return mixin.getInvokerTasksStream(AnnotationProcessorInvoker.SCALA)
|
||||||
.collect(Collectors.toMap(Map.Entry::getKey, entry -> Objects.requireNonNull((ScalaCompile) entry.getValue())));
|
.collect(Collectors.toMap(Map.Entry::getKey, entry -> Objects.requireNonNull((ScalaCompile) entry.getValue())));
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,7 @@ import net.fabricmc.loom.configuration.ide.SetupIntelijRunConfigs;
|
||||||
import net.fabricmc.loom.configuration.providers.LaunchProvider;
|
import net.fabricmc.loom.configuration.providers.LaunchProvider;
|
||||||
import net.fabricmc.loom.configuration.providers.MinecraftProviderImpl;
|
import net.fabricmc.loom.configuration.providers.MinecraftProviderImpl;
|
||||||
import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl;
|
import net.fabricmc.loom.configuration.providers.mappings.MappingsProviderImpl;
|
||||||
import net.fabricmc.loom.extension.MixinApExtension;
|
import net.fabricmc.loom.extension.MixinExtension;
|
||||||
import net.fabricmc.loom.util.Constants;
|
import net.fabricmc.loom.util.Constants;
|
||||||
|
|
||||||
public final class CompileConfiguration {
|
public final class CompileConfiguration {
|
||||||
|
@ -137,14 +137,20 @@ public final class CompileConfiguration {
|
||||||
extension.getUnmappedModCollection().from(jarTask);
|
extension.getUnmappedModCollection().from(jarTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MixinExtension mixin = LoomGradleExtension.get(project).getMixin();
|
||||||
|
|
||||||
|
if (!mixin.getUseLegacyMixinAp().get()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mixin.init();
|
||||||
|
|
||||||
// Disable some things used by log4j via the mixin AP that prevent it from being garbage collected
|
// Disable some things used by log4j via the mixin AP that prevent it from being garbage collected
|
||||||
System.setProperty("log4j2.disable.jmx", "true");
|
System.setProperty("log4j2.disable.jmx", "true");
|
||||||
System.setProperty("log4j.shutdownHookEnabled", "false");
|
System.setProperty("log4j.shutdownHookEnabled", "false");
|
||||||
System.setProperty("log4j.skipJansi", "true");
|
System.setProperty("log4j.skipJansi", "true");
|
||||||
|
|
||||||
project.getLogger().info("Configuring compiler arguments for Java");
|
project.getLogger().info("Configuring compiler arguments for Java");
|
||||||
MixinApExtension mixinApExtension = LoomGradleExtension.get(project).getMixin();
|
|
||||||
mixinApExtension.init();
|
|
||||||
|
|
||||||
new JavaApInvoker(project).configureMixin();
|
new JavaApInvoker(project).configureMixin();
|
||||||
|
|
||||||
|
|
|
@ -190,7 +190,8 @@ public class LoomDependencyManager {
|
||||||
modDep.setTransitive(false);
|
modDep.setTransitive(false);
|
||||||
loaderDepsConfig.getDependencies().add(modDep);
|
loaderDepsConfig.getDependencies().add(modDep);
|
||||||
|
|
||||||
if (!extension.ideSync()) {
|
// TODO: work around until https://github.com/FabricMC/Mixin/pull/60 and https://github.com/FabricMC/fabric-mixin-compile-extensions/issues/14 is fixed.
|
||||||
|
if (!extension.ideSync() && extension.getMixin().getUseLegacyMixinAp().get()) {
|
||||||
apDepsConfig.getDependencies().add(modDep);
|
apDepsConfig.getDependencies().add(modDep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ import org.gradle.api.provider.Property;
|
||||||
import org.gradle.api.publish.maven.MavenPublication;
|
import org.gradle.api.publish.maven.MavenPublication;
|
||||||
|
|
||||||
import net.fabricmc.loom.api.LoomGradleExtensionAPI;
|
import net.fabricmc.loom.api.LoomGradleExtensionAPI;
|
||||||
import net.fabricmc.loom.api.MixinApExtensionAPI;
|
import net.fabricmc.loom.api.MixinExtensionAPI;
|
||||||
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
|
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
|
||||||
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
|
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
|
||||||
import net.fabricmc.loom.configuration.processors.JarProcessor;
|
import net.fabricmc.loom.configuration.processors.JarProcessor;
|
||||||
|
@ -135,7 +135,7 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mixin(Action<MixinApExtensionAPI> action) {
|
public void mixin(Action<MixinExtensionAPI> action) {
|
||||||
action.execute(getMixin());
|
action.execute(getMixin());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ public abstract class LoomGradleExtensionApiImpl implements LoomGradleExtensionA
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MixinApExtension getMixin() {
|
public MixinExtension getMixin() {
|
||||||
throw new RuntimeException("Yeah... something is really wrong");
|
throw new RuntimeException("Yeah... something is really wrong");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ import net.fabricmc.loom.configuration.processors.JarProcessorManager;
|
||||||
|
|
||||||
public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implements LoomGradleExtension {
|
public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implements LoomGradleExtension {
|
||||||
private final Project project;
|
private final Project project;
|
||||||
private final MixinApExtension mixinApExtension;
|
private final MixinExtension mixinApExtension;
|
||||||
private final LoomFiles loomFiles;
|
private final LoomFiles loomFiles;
|
||||||
private final ConfigurableFileCollection unmappedMods;
|
private final ConfigurableFileCollection unmappedMods;
|
||||||
|
|
||||||
|
@ -64,7 +64,7 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen
|
||||||
super(project, files);
|
super(project, files);
|
||||||
this.project = project;
|
this.project = project;
|
||||||
// Initiate with newInstance to allow gradle to decorate our extension
|
// Initiate with newInstance to allow gradle to decorate our extension
|
||||||
this.mixinApExtension = project.getObjects().newInstance(MixinApExtensionImpl.class, project);
|
this.mixinApExtension = project.getObjects().newInstance(MixinExtensionImpl.class, project);
|
||||||
this.loomFiles = files;
|
this.loomFiles = files;
|
||||||
this.unmappedMods = project.files();
|
this.unmappedMods = project.files();
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,7 @@ public class LoomGradleExtensionImpl extends LoomGradleExtensionApiImpl implemen
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MixinApExtension getMixin() {
|
public MixinExtension getMixin() {
|
||||||
return this.mixinApExtension;
|
return this.mixinApExtension;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ import org.gradle.api.provider.Property;
|
||||||
import org.gradle.api.publish.maven.MavenPublication;
|
import org.gradle.api.publish.maven.MavenPublication;
|
||||||
|
|
||||||
import net.fabricmc.loom.api.LoomGradleExtensionAPI;
|
import net.fabricmc.loom.api.LoomGradleExtensionAPI;
|
||||||
import net.fabricmc.loom.api.MixinApExtensionAPI;
|
import net.fabricmc.loom.api.MixinExtensionAPI;
|
||||||
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
|
import net.fabricmc.loom.api.decompilers.LoomDecompiler;
|
||||||
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
|
import net.fabricmc.loom.configuration.ide.RunConfigSettings;
|
||||||
import net.fabricmc.loom.configuration.processors.JarProcessor;
|
import net.fabricmc.loom.configuration.processors.JarProcessor;
|
||||||
|
@ -116,13 +116,13 @@ public class MinecraftGradleExtension implements LoomGradleExtensionAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mixin(Action<MixinApExtensionAPI> action) {
|
public void mixin(Action<MixinExtensionAPI> action) {
|
||||||
reportDeprecation();
|
reportDeprecation();
|
||||||
parent.mixin(action);
|
parent.mixin(action);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public MixinApExtensionAPI getMixin() {
|
public MixinExtensionAPI getMixin() {
|
||||||
reportDeprecation();
|
reportDeprecation();
|
||||||
return parent.getMixin();
|
return parent.getMixin();
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,13 +41,13 @@ import org.jetbrains.annotations.ApiStatus;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import net.fabricmc.loom.api.MixinApExtensionAPI;
|
import net.fabricmc.loom.api.MixinExtensionAPI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A gradle extension to configure mixin annotation processor.
|
* A gradle extension to configure mixin annotation processor.
|
||||||
*/
|
*/
|
||||||
@ApiStatus.Experimental
|
@ApiStatus.Experimental
|
||||||
public interface MixinApExtension extends MixinApExtensionAPI {
|
public interface MixinExtension extends MixinExtensionAPI {
|
||||||
String MIXIN_INFORMATION_CONTAINER = "mixin";
|
String MIXIN_INFORMATION_CONTAINER = "mixin";
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -24,6 +24,8 @@
|
||||||
|
|
||||||
package net.fabricmc.loom.extension;
|
package net.fabricmc.loom.extension;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import org.gradle.api.Action;
|
import org.gradle.api.Action;
|
||||||
import org.gradle.api.InvalidUserDataException;
|
import org.gradle.api.InvalidUserDataException;
|
||||||
import org.gradle.api.Project;
|
import org.gradle.api.Project;
|
||||||
|
@ -33,17 +35,29 @@ import org.gradle.api.provider.Provider;
|
||||||
import org.gradle.api.tasks.SourceSet;
|
import org.gradle.api.tasks.SourceSet;
|
||||||
import org.gradle.api.tasks.util.PatternSet;
|
import org.gradle.api.tasks.util.PatternSet;
|
||||||
|
|
||||||
import net.fabricmc.loom.api.MixinApExtensionAPI;
|
import net.fabricmc.loom.api.MixinExtensionAPI;
|
||||||
|
|
||||||
public abstract class MixinApExtensionApiImpl implements MixinApExtensionAPI {
|
public abstract class MixinExtensionApiImpl implements MixinExtensionAPI {
|
||||||
protected abstract Project getProject();
|
protected final Project project;
|
||||||
|
protected final Property<Boolean> useMixinAp;
|
||||||
|
|
||||||
|
public MixinExtensionApiImpl(Project project) {
|
||||||
|
this.project = Objects.requireNonNull(project);
|
||||||
|
this.useMixinAp = project.getObjects().property(Boolean.class)
|
||||||
|
.convention(false);
|
||||||
|
}
|
||||||
|
|
||||||
protected final PatternSet add0(SourceSet sourceSet, String refmapName) {
|
protected final PatternSet add0(SourceSet sourceSet, String refmapName) {
|
||||||
return add0(sourceSet, getProject().provider(() -> refmapName));
|
return add0(sourceSet, project.provider(() -> refmapName));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract PatternSet add0(SourceSet sourceSet, Provider<String> refmapName);
|
protected abstract PatternSet add0(SourceSet sourceSet, Provider<String> refmapName);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Property<Boolean> getUseLegacyMixinAp() {
|
||||||
|
return useMixinAp;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(SourceSet sourceSet, String refmapName, Action<PatternSet> action) {
|
public void add(SourceSet sourceSet, String refmapName, Action<PatternSet> action) {
|
||||||
PatternSet pattern = add0(sourceSet, refmapName);
|
PatternSet pattern = add0(sourceSet, refmapName);
|
||||||
|
@ -57,7 +71,7 @@ public abstract class MixinApExtensionApiImpl implements MixinApExtensionAPI {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void add(String sourceSetName, String refmapName, Action<PatternSet> action) {
|
public void add(String sourceSetName, String refmapName, Action<PatternSet> action) {
|
||||||
add(sourceSetName, getProject().provider(() -> refmapName), action);
|
add(sourceSetName, project.provider(() -> refmapName), action);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(String sourceSetName, Provider<String> refmapName, Action<PatternSet> action) {
|
public void add(String sourceSetName, Provider<String> refmapName, Action<PatternSet> action) {
|
||||||
|
@ -96,7 +110,7 @@ public abstract class MixinApExtensionApiImpl implements MixinApExtensionAPI {
|
||||||
|
|
||||||
private SourceSet resolveSourceSet(String sourceSetName) {
|
private SourceSet resolveSourceSet(String sourceSetName) {
|
||||||
// try to find sourceSet with name sourceSetName in this project
|
// try to find sourceSet with name sourceSetName in this project
|
||||||
SourceSet sourceSet = getProject().getConvention().getPlugin(JavaPluginConvention.class)
|
SourceSet sourceSet = project.getConvention().getPlugin(JavaPluginConvention.class)
|
||||||
.getSourceSets().findByName(sourceSetName);
|
.getSourceSets().findByName(sourceSetName);
|
||||||
|
|
||||||
if (sourceSet == null) {
|
if (sourceSet == null) {
|
||||||
|
@ -107,17 +121,12 @@ public abstract class MixinApExtensionApiImpl implements MixinApExtensionAPI {
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is here to ensure that LoomGradleExtensionApiImpl compiles without any unimplemented methods
|
// This is here to ensure that LoomGradleExtensionApiImpl compiles without any unimplemented methods
|
||||||
private final class EnsureCompile extends MixinApExtensionApiImpl {
|
private final class EnsureCompile extends MixinExtensionApiImpl {
|
||||||
private EnsureCompile() {
|
private EnsureCompile() {
|
||||||
super();
|
super(null);
|
||||||
throw new RuntimeException();
|
throw new RuntimeException();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Project getProject() {
|
|
||||||
throw new RuntimeException("Yeah... something is really wrong");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Property<String> getDefaultRefmapName() {
|
public Property<String> getDefaultRefmapName() {
|
||||||
throw new RuntimeException("Yeah... something is really wrong");
|
throw new RuntimeException("Yeah... something is really wrong");
|
|
@ -47,39 +47,37 @@ import org.gradle.api.tasks.SourceSet;
|
||||||
import org.gradle.api.tasks.util.PatternSet;
|
import org.gradle.api.tasks.util.PatternSet;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class MixinApExtensionImpl extends MixinApExtensionApiImpl implements MixinApExtension {
|
public class MixinExtensionImpl extends MixinExtensionApiImpl implements MixinExtension {
|
||||||
private boolean isDefault;
|
private boolean isDefault;
|
||||||
private final Project project;
|
|
||||||
private final Property<String> defaultRefmapName;
|
private final Property<String> defaultRefmapName;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public MixinApExtensionImpl(Project project) {
|
public MixinExtensionImpl(Project project) {
|
||||||
|
super(project);
|
||||||
this.isDefault = true;
|
this.isDefault = true;
|
||||||
this.project = project;
|
|
||||||
this.defaultRefmapName = project.getObjects().property(String.class)
|
this.defaultRefmapName = project.getObjects().property(String.class)
|
||||||
.convention(project.provider(this::getDefaultMixinRefmapName));
|
.convention(project.provider(this::getDefaultMixinRefmapName));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Project getProject() {
|
|
||||||
return this.project;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Property<String> getDefaultRefmapName() {
|
public Property<String> getDefaultRefmapName() {
|
||||||
|
if (!super.getUseLegacyMixinAp().get()) throw new IllegalStateException("You need to set useLegacyMixinAp = true to configure Mixin annotation processor.");
|
||||||
|
|
||||||
return defaultRefmapName;
|
return defaultRefmapName;
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getDefaultMixinRefmapName() {
|
private String getDefaultMixinRefmapName() {
|
||||||
String defaultRefmapName = getProject().getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName() + "-refmap.json";
|
String defaultRefmapName = project.getConvention().getPlugin(BasePluginConvention.class).getArchivesBaseName() + "-refmap.json";
|
||||||
getProject().getLogger().info("Could not find refmap definition, will be using default name: " + defaultRefmapName);
|
project.getLogger().info("Could not find refmap definition, will be using default name: " + defaultRefmapName);
|
||||||
return defaultRefmapName;
|
return defaultRefmapName;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected PatternSet add0(SourceSet sourceSet, Provider<String> refmapName) {
|
protected PatternSet add0(SourceSet sourceSet, Provider<String> 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"));
|
||||||
MixinApExtension.setMixinInformationContainer(sourceSet, new MixinApExtension.MixinInformationContainer(sourceSet, refmapName, pattern));
|
MixinExtension.setMixinInformationContainer(sourceSet, new MixinExtension.MixinInformationContainer(sourceSet, refmapName, pattern));
|
||||||
|
|
||||||
isDefault = false;
|
isDefault = false;
|
||||||
|
|
||||||
|
@ -90,7 +88,7 @@ public class MixinApExtensionImpl extends MixinApExtensionApiImpl implements Mix
|
||||||
@NotNull
|
@NotNull
|
||||||
public Stream<SourceSet> getMixinSourceSetsStream() {
|
public Stream<SourceSet> getMixinSourceSetsStream() {
|
||||||
return project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().stream()
|
return project.getConvention().getPlugin(JavaPluginConvention.class).getSourceSets().stream()
|
||||||
.filter(sourceSet -> MixinApExtension.getMixinInformationContainer(sourceSet) != null);
|
.filter(sourceSet -> MixinExtension.getMixinInformationContainer(sourceSet) != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
|
@ -73,6 +73,7 @@ import net.fabricmc.loom.util.ZipReprocessorUtil;
|
||||||
import net.fabricmc.stitch.util.Pair;
|
import net.fabricmc.stitch.util.Pair;
|
||||||
import net.fabricmc.tinyremapper.TinyRemapper;
|
import net.fabricmc.tinyremapper.TinyRemapper;
|
||||||
import net.fabricmc.tinyremapper.TinyUtils;
|
import net.fabricmc.tinyremapper.TinyUtils;
|
||||||
|
import net.fabricmc.tinyremapper.extension.mixin.MixinExtension;
|
||||||
|
|
||||||
public class RemapJarTask extends Jar {
|
public class RemapJarTask extends Jar {
|
||||||
private static final String MANIFEST_PATH = "META-INF/MANIFEST.MF";
|
private static final String MANIFEST_PATH = "META-INF/MANIFEST.MF";
|
||||||
|
@ -95,6 +96,10 @@ public class RemapJarTask extends Jar {
|
||||||
// false by default, I have no idea why I have to do it for this property and not the other one
|
// false by default, I have no idea why I have to do it for this property and not the other one
|
||||||
remapAccessWidener.set(false);
|
remapAccessWidener.set(false);
|
||||||
addDefaultNestedDependencies.set(true);
|
addDefaultNestedDependencies.set(true);
|
||||||
|
|
||||||
|
if (!LoomGradleExtension.get(getProject()).getMixin().getUseLegacyMixinAp().get()) {
|
||||||
|
remapOptions.add(b -> b.extension(new MixinExtension()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TaskAction
|
@TaskAction
|
||||||
|
@ -171,8 +176,10 @@ public class RemapJarTask extends Jar {
|
||||||
throw new RuntimeException("Failed to remap " + input + " to " + output + " - file missing!");
|
throw new RuntimeException("Failed to remap " + input + " to " + output + " - file missing!");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MixinRefmapHelper.addRefmapName(project, output)) {
|
if (extension.getMixin().getUseLegacyMixinAp().get()) {
|
||||||
project.getLogger().debug("Transformed mixin reference maps in output JAR!");
|
if (MixinRefmapHelper.addRefmapName(project, output)) {
|
||||||
|
project.getLogger().debug("Transformed mixin reference maps in output JAR!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getAddNestedDependencies().getOrElse(false)) {
|
if (getAddNestedDependencies().getOrElse(false)) {
|
||||||
|
|
|
@ -69,6 +69,8 @@ java {
|
||||||
|
|
||||||
loom {
|
loom {
|
||||||
mixin {
|
mixin {
|
||||||
|
useLegacyMixinAp = true
|
||||||
|
|
||||||
defaultRefmapName = "refmap0000.json"
|
defaultRefmapName = "refmap0000.json"
|
||||||
add(sourceSets["main"], "refmap0001.json")
|
add(sourceSets["main"], "refmap0001.json")
|
||||||
add(sourceSets["mixin"], "refmap0002.json")
|
add(sourceSets["mixin"], "refmap0002.json")
|
||||||
|
|
|
@ -68,6 +68,8 @@ java {
|
||||||
|
|
||||||
loom {
|
loom {
|
||||||
mixin {
|
mixin {
|
||||||
|
useLegacyMixinAp = true
|
||||||
|
|
||||||
defaultRefmapName = "default-refmap0000.json"
|
defaultRefmapName = "default-refmap0000.json"
|
||||||
add(sourceSets["main"], "main-refmap0000.json")
|
add(sourceSets["main"], "main-refmap0000.json")
|
||||||
add(sourceSets["mixin"])
|
add(sourceSets["mixin"])
|
||||||
|
|
Loading…
Reference in New Issue