Do not compute frame on plugin class (#848)
This commit is contained in:
parent
c4063c14c5
commit
f76be9aab0
|
@ -11,6 +11,7 @@ import org.objectweb.asm.tree.AbstractInsnNode;
|
|||
import org.objectweb.asm.tree.ClassNode;
|
||||
import org.objectweb.asm.tree.FieldInsnNode;
|
||||
import org.objectweb.asm.tree.FieldNode;
|
||||
import org.objectweb.asm.tree.FrameNode;
|
||||
import org.objectweb.asm.tree.InsnList;
|
||||
import org.objectweb.asm.tree.InsnNode;
|
||||
import org.objectweb.asm.tree.JumpInsnNode;
|
||||
|
@ -86,6 +87,9 @@ public class ClassLoaderAdapter implements PluginTransformer {
|
|||
list.add(new MethodInsnNode(Opcodes.INVOKESTATIC, Type.getInternalName(ArclightRemapper.class), "createClassLoaderRemapper", Type.getMethodDescriptor(Type.getType(ClassLoaderRemapper.class), Type.getType(ClassLoader.class)), false));
|
||||
list.add(new FieldInsnNode(Opcodes.PUTFIELD, node.name, remapper.name, remapper.desc));
|
||||
list.add(labelNode);
|
||||
if ((node.version & 0xFFFF) >= Opcodes.V1_6) {
|
||||
list.add(new FrameNode(Opcodes.F_SAME, 0, null, 0, null));
|
||||
}
|
||||
list.add(new VarInsnNode(Opcodes.ALOAD, 0));
|
||||
list.add(new FieldInsnNode(Opcodes.GETFIELD, node.name, remapper.name, remapper.desc));
|
||||
list.add(new InsnNode(Opcodes.ARETURN));
|
||||
|
|
|
@ -167,12 +167,10 @@ public class ClassLoaderRemapper extends LenientJarRemapper {
|
|||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||
private void checkFieldTypes(Field field) throws TypeNotPresentException {
|
||||
field.getGenericType();
|
||||
}
|
||||
|
||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
||||
private void checkMethodTypes(Method method) throws TypeNotPresentException {
|
||||
method.getGenericReturnType();
|
||||
method.getGenericParameterTypes();
|
||||
|
@ -361,14 +359,13 @@ public class ClassLoaderRemapper extends LenientJarRemapper {
|
|||
private byte[] remapClassFile(ClassReader reader, final ClassRepo repo) {
|
||||
ClassNode node = new ClassNode();
|
||||
RemappingClassAdapter mapper = new RemappingClassAdapter(node, this, repo);
|
||||
reader.accept(mapper, ClassReader.SKIP_FRAMES);
|
||||
reader.accept(mapper, 0);
|
||||
|
||||
for (PluginTransformer transformer : ArclightRemapper.INSTANCE.getTransformerList()) {
|
||||
transformer.handleClass(node, this);
|
||||
}
|
||||
|
||||
// 有的插件的编译器奇奇怪怪的,所以在这里要重新计算 frame
|
||||
ClassWriter wr = new PluginClassWriter(node.version == Opcodes.V1_5 ? ClassWriter.COMPUTE_MAXS : ClassWriter.COMPUTE_FRAMES);
|
||||
ClassWriter wr = new PluginClassWriter(ClassWriter.COMPUTE_MAXS);
|
||||
node.accept(wr);
|
||||
|
||||
return dump(wr.toByteArray());
|
||||
|
|
|
@ -31,7 +31,7 @@ public class SwitchTableFixer implements Implementer, Function<byte[], byte[]> {
|
|||
@Override
|
||||
public byte[] apply(byte[] bytes) {
|
||||
ClassNode node = new ClassNode();
|
||||
new ClassReader(bytes).accept(node, ClassReader.SKIP_FRAMES);
|
||||
new ClassReader(bytes).accept(node, 0);
|
||||
processClass(node, null);
|
||||
ClassWriter writer = new ClassWriter(0);
|
||||
node.accept(writer);
|
||||
|
|
Loading…
Reference in New Issue
Block a user