From f3c2eb8e9cda873678d0e2308e4b7904fe8e3d61 Mon Sep 17 00:00:00 2001 From: LexManos Date: Tue, 19 Jan 2016 02:14:22 -0800 Subject: [PATCH] Fix Deobfusication transformer throwing verification errores in Eclipse development environments. --- .../asm/transformers/DeobfuscationTransformer.java | 12 ++++++++++-- .../fml/common/launcher/FMLDeobfTweaker.java | 1 - 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minecraftforge/fml/common/asm/transformers/DeobfuscationTransformer.java b/src/main/java/net/minecraftforge/fml/common/asm/transformers/DeobfuscationTransformer.java index aecd94d357..e88fabfa1d 100644 --- a/src/main/java/net/minecraftforge/fml/common/asm/transformers/DeobfuscationTransformer.java +++ b/src/main/java/net/minecraftforge/fml/common/asm/transformers/DeobfuscationTransformer.java @@ -23,6 +23,14 @@ import org.objectweb.asm.commons.RemappingClassAdapter; public class DeobfuscationTransformer implements IClassTransformer, IClassNameTransformer { + private static final boolean RECALC_FRAMES = Boolean.parseBoolean(System.getProperty("FORGE_FORCE_FRAME_RECALC", "false")); + private static final int WRITER_FLAGS = ClassWriter.COMPUTE_MAXS | (RECALC_FRAMES ? ClassWriter.COMPUTE_FRAMES : 0); + private static final int READER_FLAGS = RECALC_FRAMES ? ClassReader.SKIP_FRAMES : ClassReader.EXPAND_FRAMES; + // COMPUTE_FRAMES causes classes to be loaded, which could cause issues if the classes do not exist. + // However in testing this has not happened. {As we run post SideTransfromer} + // If reported we need to add a custom implementation of ClassWriter.getCommonSuperClass + // that does not cause class loading. + @Override public byte[] transform(String name, String transformedName, byte[] bytes) { @@ -31,9 +39,9 @@ public class DeobfuscationTransformer implements IClassTransformer, IClassNameTr return null; } ClassReader classReader = new ClassReader(bytes); - ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS); + ClassWriter classWriter = new ClassWriter(WRITER_FLAGS); RemappingClassAdapter remapAdapter = new FMLRemappingAdapter(classWriter); - classReader.accept(remapAdapter, ClassReader.EXPAND_FRAMES); + classReader.accept(remapAdapter, READER_FLAGS); return classWriter.toByteArray(); } diff --git a/src/main/java/net/minecraftforge/fml/common/launcher/FMLDeobfTweaker.java b/src/main/java/net/minecraftforge/fml/common/launcher/FMLDeobfTweaker.java index ee5ec9db6c..09dc9ee523 100644 --- a/src/main/java/net/minecraftforge/fml/common/launcher/FMLDeobfTweaker.java +++ b/src/main/java/net/minecraftforge/fml/common/launcher/FMLDeobfTweaker.java @@ -5,7 +5,6 @@ import java.lang.reflect.Method; import java.util.List; import net.minecraft.launchwrapper.ITweaker; -import net.minecraft.launchwrapper.Launch; import net.minecraft.launchwrapper.LaunchClassLoader; import net.minecraftforge.fml.relauncher.CoreModManager; import net.minecraftforge.fml.relauncher.FMLInjectionData;