diff --git a/parabotv2/src/org/parabot/core/asm/ASMUtils.java b/parabotv2/src/org/parabot/core/asm/ASMUtils.java index 9b09e45..5278fa4 100644 --- a/parabotv2/src/org/parabot/core/asm/ASMUtils.java +++ b/parabotv2/src/org/parabot/core/asm/ASMUtils.java @@ -1,5 +1,7 @@ package org.parabot.core.asm; +import java.lang.reflect.Modifier; + import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.FieldNode; @@ -114,5 +116,29 @@ public class ASMUtils implements Opcodes { } throw new RuntimeException("eek " + c); } + + public static void makePublic(ClassNode node) { + if (!Modifier.isPublic(node.access)) { + if (Modifier.isPrivate(node.access)) { + node.access = node.access & (~Opcodes.ACC_PRIVATE); + } + if (Modifier.isProtected(node.access)) { + node.access = node.access & (~Opcodes.ACC_PROTECTED); + } + node.access = node.access | Opcodes.ACC_PUBLIC; + } + } + + public static void makePublic(MethodNode node) { + if (!Modifier.isPublic(node.access)) { + if (Modifier.isPrivate(node.access)) { + node.access = node.access & (~Opcodes.ACC_PRIVATE); + } + if (Modifier.isProtected(node.access)) { + node.access = node.access & (~Opcodes.ACC_PROTECTED); + } + node.access = node.access | Opcodes.ACC_PUBLIC; + } + } } diff --git a/parabotv2/src/org/parabot/core/asm/adapters/AddInterfaceAdapter.java b/parabotv2/src/org/parabot/core/asm/adapters/AddInterfaceAdapter.java index 5835daf..60af2d9 100644 --- a/parabotv2/src/org/parabot/core/asm/adapters/AddInterfaceAdapter.java +++ b/parabotv2/src/org/parabot/core/asm/adapters/AddInterfaceAdapter.java @@ -1,9 +1,7 @@ package org.parabot.core.asm.adapters; -import java.lang.reflect.Modifier; - -import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.ClassNode; +import org.objectweb.asm.tree.MethodNode; import org.parabot.core.Core; import org.parabot.core.asm.ASMUtils; import org.parabot.core.asm.interfaces.Injectable; @@ -46,14 +44,11 @@ public class AddInterfaceAdapter implements Injectable { } protected static void addInterface(ClassNode node, String i) { - if (!Modifier.isPublic(node.access)) { - if (Modifier.isPrivate(node.access)) { - node.access = node.access & (~Opcodes.ACC_PRIVATE); + ASMUtils.makePublic(node); + for(MethodNode mn : node.methods) { + if(mn.desc.startsWith("