public abstract class ClassInstrumentor
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
static interface |
ClassInstrumentor.Decorator |
Modifier | Constructor and Description |
---|---|
protected |
ClassInstrumentor(ClassInstrumentor.Decorator decorator) |
Modifier and Type | Method and Description |
---|---|
protected abstract void |
addDirectCallConstructor(MutableClass mutableClass) |
MutableClass |
analyzeClass(byte[] origClassBytes,
InstrumentationConfiguration config,
ClassNodeProvider classNodeProvider) |
protected abstract void |
generateClassHandlerCall(MutableClass mutableClass,
org.objectweb.asm.tree.MethodNode originalMethod,
java.lang.String originalMethodName,
org.robolectric.internal.bytecode.RobolectricGeneratorAdapter generator) |
byte[] |
instrument(byte[] origBytes,
InstrumentationConfiguration config,
ClassNodeProvider classNodeProvider) |
void |
instrument(MutableClass mutableClass) |
protected void |
instrumentNormalMethod(MutableClass mutableClass,
org.objectweb.asm.tree.MethodNode method)
Rename the method from
methodName to $$robo$$methodName . |
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+).
|
protected void |
makeMethodPublic(org.objectweb.asm.tree.MethodNode method)
Replaces protected and private method modifiers with public.
|
protected abstract void |
writeCallToInitializing(MutableClass mutableClass,
org.robolectric.internal.bytecode.RobolectricGeneratorAdapter generator) |
protected ClassInstrumentor(ClassInstrumentor.Decorator decorator)
public MutableClass analyzeClass(byte[] origClassBytes, InstrumentationConfiguration config, ClassNodeProvider classNodeProvider)
public byte[] instrument(byte[] origBytes, InstrumentationConfiguration config, ClassNodeProvider classNodeProvider)
public void instrument(MutableClass mutableClass)
protected abstract void addDirectCallConstructor(MutableClass mutableClass)
protected abstract void writeCallToInitializing(MutableClass mutableClass, org.robolectric.internal.bytecode.RobolectricGeneratorAdapter generator)
protected void instrumentNormalMethod(MutableClass mutableClass, org.objectweb.asm.tree.MethodNode method)
methodName
to $$robo$$methodName
.final
and native
modifiers, if present.methodName
which delegates to the ClassHandler
.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+).
protected void makeMethodPublic(org.objectweb.asm.tree.MethodNode method)
Replaces protected and private method modifiers with public.
protected abstract void generateClassHandlerCall(MutableClass mutableClass, org.objectweb.asm.tree.MethodNode originalMethod, java.lang.String originalMethodName, org.robolectric.internal.bytecode.RobolectricGeneratorAdapter generator)