diff options
author | Jonas Herzig <jonas@spark-squared.com> | 2022-02-22 13:50:43 +0100 |
---|---|---|
committer | Jonas Herzig <jonas@spark-squared.com> | 2022-02-22 13:50:43 +0100 |
commit | 93089326c687c6c02f825baa66dfbfd2f5015ad3 (patch) | |
tree | acce68c7ae14aff0d0604bafb3aac0639554ccdd /src/main/java | |
parent | ae224ac2a7febc9aa22c5caffad3f747212e1fb5 (diff) | |
parent | c9c2765a11b5b80ff30ebb4b3e42d0a34fb67c2c (diff) | |
download | architectury-loom-93089326c687c6c02f825baa66dfbfd2f5015ad3.tar.gz architectury-loom-93089326c687c6c02f825baa66dfbfd2f5015ad3.tar.bz2 architectury-loom-93089326c687c6c02f825baa66dfbfd2f5015ad3.zip |
Merge branch 'dev/0.10.0-fg2' into dev/0.10.0
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/net/fabricmc/loom/configuration/providers/forge/fg2/MinecraftLegacyPatchedProvider.java | 72 |
1 files changed, 55 insertions, 17 deletions
diff --git a/src/main/java/net/fabricmc/loom/configuration/providers/forge/fg2/MinecraftLegacyPatchedProvider.java b/src/main/java/net/fabricmc/loom/configuration/providers/forge/fg2/MinecraftLegacyPatchedProvider.java index e74e463e..3e931862 100644 --- a/src/main/java/net/fabricmc/loom/configuration/providers/forge/fg2/MinecraftLegacyPatchedProvider.java +++ b/src/main/java/net/fabricmc/loom/configuration/providers/forge/fg2/MinecraftLegacyPatchedProvider.java @@ -223,8 +223,8 @@ public class MinecraftLegacyPatchedProvider extends MinecraftPatchedProvider { } // The JarMerger adds Sided annotations but so do the Forge patches. The latter doesn't require extra - // dependencies beyond Forge, so we'll keep those and remove the Fabric ones. - modifyClasses(minecraftMergedPatchedJar, FabricSideStripper::new); + // dependencies beyond Forge, so we'll keep those and convert any non-redundant Fabric ones. + modifyClasses(minecraftMergedPatchedJar, SideAnnotationMerger::new); logger.info(":merged jars in " + stopwatch); } @@ -334,17 +334,30 @@ public class MinecraftLegacyPatchedProvider extends MinecraftPatchedProvider { } } - private static class FabricSideStripper extends ClassVisitor { - private static final String SIDED_DESCRIPTOR = "Lnet/fabricmc/api/Environment;"; + private static class SideAnnotationMerger extends ClassVisitor { + private static final String FABRIC_ANNOTATION_DESCRIPTOR = "Lnet/fabricmc/api/Environment;"; + private static final String FORGE_ANNOTATION_DESCRIPTOR = "Lnet/minecraftforge/fml/relauncher/SideOnly;"; + private static final String FORGE_SIDE_DESCRIPTOR = "Lnet/minecraftforge/fml/relauncher/Side;"; - private FabricSideStripper(ClassVisitor classVisitor) { + private static boolean isSideAnnotation(String descriptor) { + return FABRIC_ANNOTATION_DESCRIPTOR.equals(descriptor) || FORGE_ANNOTATION_DESCRIPTOR.equals(descriptor); + } + + private boolean visitedAnnotation; + + private SideAnnotationMerger(ClassVisitor classVisitor) { super(Opcodes.ASM9, classVisitor); } @Override public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { - if (descriptor.equals(SIDED_DESCRIPTOR)) { - return null; + if (isSideAnnotation(descriptor)) { + if (visitedAnnotation) { + return null; + } + + visitedAnnotation = true; + return new FabricToForgeConverter(super.visitAnnotation(FORGE_ANNOTATION_DESCRIPTOR, true)); } return super.visitAnnotation(descriptor, visible); @@ -352,42 +365,67 @@ public class MinecraftLegacyPatchedProvider extends MinecraftPatchedProvider { @Override public FieldVisitor visitField(int access, String name, String descriptor, String signature, Object value) { - return new FieldStripper(super.visitField(access, name, descriptor, signature, value)); + return new FieldSideAnnotationMerger(super.visitField(access, name, descriptor, signature, value)); } @Override public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { - return new MethodStripper(super.visitMethod(access, name, descriptor, signature, exceptions)); + return new MethodSideAnnotationMerger(super.visitMethod(access, name, descriptor, signature, exceptions)); } - private static class FieldStripper extends FieldVisitor { - private FieldStripper(FieldVisitor fieldVisitor) { + private static class FieldSideAnnotationMerger extends FieldVisitor { + private boolean visitedAnnotation; + + private FieldSideAnnotationMerger(FieldVisitor fieldVisitor) { super(Opcodes.ASM9, fieldVisitor); } @Override public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { - if (descriptor.equals(SIDED_DESCRIPTOR)) { - return null; + if (isSideAnnotation(descriptor)) { + if (visitedAnnotation) { + return null; + } + + visitedAnnotation = true; + return new FabricToForgeConverter(super.visitAnnotation(FORGE_ANNOTATION_DESCRIPTOR, true)); } return super.visitAnnotation(descriptor, visible); } } - private static class MethodStripper extends MethodVisitor { - private MethodStripper(MethodVisitor methodVisitor) { + private static class MethodSideAnnotationMerger extends MethodVisitor { + private boolean visitedAnnotation; + + private MethodSideAnnotationMerger(MethodVisitor methodVisitor) { super(Opcodes.ASM9, methodVisitor); } @Override public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) { - if (descriptor.equals(SIDED_DESCRIPTOR)) { - return null; + if (isSideAnnotation(descriptor)) { + if (visitedAnnotation) { + return null; + } + + visitedAnnotation = true; + return new FabricToForgeConverter(super.visitAnnotation(FORGE_ANNOTATION_DESCRIPTOR, true)); } return super.visitAnnotation(descriptor, visible); } } + + private static class FabricToForgeConverter extends AnnotationVisitor { + private FabricToForgeConverter(AnnotationVisitor annotationVisitor) { + super(Opcodes.ASM9, annotationVisitor); + } + + @Override + public void visitEnum(String name, String descriptor, String value) { + super.visitEnum(name, FORGE_SIDE_DESCRIPTOR, value); + } + } } } |