Class ClassInstrumentor

    • Method Detail

      • instrument

        public void instrument​(MutableClass mutableClass)
      • addDirectCallConstructor

        protected abstract void addDirectCallConstructor​(MutableClass mutableClass)
      • instrumentNormalMethod

        protected void instrumentNormalMethod​(MutableClass mutableClass,
                                              org.objectweb.asm.tree.MethodNode method)
        Instruments a normal method
        • Rename the method from methodName to $$robo$$methodName.
        • Make it private so we can invoke it directly without subclass overrides taking precedence.
        • Remove final modifiers, if present.
        • Create a delegator method named methodName which delegates to the ClassHandler.
      • instrumentNativeMethod

        protected void instrumentNativeMethod​(MutableClass mutableClass,
                                              org.objectweb.asm.tree.MethodNode method)
        Creates native stub which returns the default return value.
        Parameters:
        mutableClass - Class to be instrumented
        method - Method to be instrumented, must be native
      • exceptionArray

        protected java.lang.String[] exceptionArray​(org.objectweb.asm.tree.MethodNode method)
      • interceptInvokeVirtualMethod

        protected abstract void interceptInvokeVirtualMethod​(MutableClass mutableClass,
                                                             java.util.ListIterator<org.objectweb.asm.tree.AbstractInsnNode> instructions,
                                                             org.objectweb.asm.tree.MethodInsnNode targetMethod)
        Decides to call through the appropriate method to intercept the method with an INVOKEVIRTUAL Opcode, depending if the invokedynamic bytecode instruction is available (Java 7+).
      • makeMethodPublic

        protected void makeMethodPublic​(org.objectweb.asm.tree.MethodNode method)
        Replaces protected and private method modifiers with public.
      • makeMethodPrivate

        protected void makeMethodPrivate​(org.objectweb.asm.tree.MethodNode method)
        Replaces protected and public class modifiers with private.
      • generateClassHandlerCall

        protected abstract void generateClassHandlerCall​(MutableClass mutableClass,
                                                         org.objectweb.asm.tree.MethodNode originalMethod,
                                                         java.lang.String originalMethodName,
                                                         RobolectricGeneratorAdapter generator)