Apply access-level changes to inner class attributes (#5468)

This commit is contained in:
Ben Staddon authored and LexManos committed 2019-02-14 22:46:35 -08:00
1 parent 8cbac6af97
commit e6fbf39591
1 file changed
+14 -1
@@ -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);
}
}
}