From e6fbf39591b920532ea464d36dad24671c6d08fd Mon Sep 17 00:00:00 2001 From: Ben Staddon Date: Fri, 15 Feb 2019 06:46:35 +0000 Subject: [PATCH] Apply access-level changes to inner class attributes (#5468) --- .../asm/transformers/AccessTransformer.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minecraftforge/fml/common/asm/transformers/AccessTransformer.java b/src/main/java/net/minecraftforge/fml/common/asm/transformers/AccessTransformer.java index eeb1720fbc..2dd8f8ac5d 100644 --- a/src/main/java/net/minecraftforge/fml/common/asm/transformers/AccessTransformer.java +++ b/src/main/java/net/minecraftforge/fml/common/asm/transformers/AccessTransformer.java @@ -52,6 +52,7 @@ import org.objectweb.asm.ClassWriter; import org.objectweb.asm.tree.AbstractInsnNode; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.FieldNode; +import org.objectweb.asm.tree.InnerClassNode; import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; @@ -204,6 +205,15 @@ public class AccessTransformer implements IClassTransformer { FMLLog.log.debug("Class: {} {} -> {}", name, toBinary(m.oldAccess), toBinary(m.newAccess)); } + // if this is an inner class, also modify the access flags on the corresponding InnerClasses attribute + for (InnerClassNode innerClass : classNode.innerClasses) + { + if (innerClass.name.equals(classNode.name)) + { + innerClass.access = getFixedAccess(innerClass.access, m); + break; + } + } continue; } if (m.desc.isEmpty()) @@ -261,7 +271,10 @@ public class AccessTransformer implements IClassTransformer } } - replaceInvokeSpecial(classNode, nowOverrideable); + if (!nowOverrideable.isEmpty()) + { + replaceInvokeSpecial(classNode, nowOverrideable); + } } }