sandbox/src/main/java/org/robolectric/internal/bytecode/ClassInstrumentor.java
protected void instrumentNormalMethod(MutableClass mutableClass, MethodNode method) {
    // if not abstract, set a final modifier
    if ((method.access & Opcodes.ACC_ABSTRACT) == 0) {
      method.access = method.access | Opcodes.ACC_FINAL;
    }
    if ((method.access & Opcodes.ACC_NATIVE) != 0) {
      instrumentNativeMethod(mutableClass, method);
    }

    // todo figure out
    String originalName = method.name;
    method.name = directMethodName(mutableClass, originalName);

    MethodNode delegatorMethodNode = new MethodNode(method.access, originalName, method.desc, method.signature, exceptionArray(method));
    delegatorMethodNode.visibleAnnotations = method.visibleAnnotations;
    delegatorMethodNode.access &= ~(Opcodes.ACC_NATIVE | Opcodes.ACC_ABSTRACT | Opcodes.ACC_FINAL);

    makeMethodPrivate(method);

    RobolectricGeneratorAdapter generator = new RobolectricGeneratorAdapter(delegatorMethodNode);
    generateClassHandlerCall(mutableClass, method, originalName, generator);
    generator.endMethod();
    mutableClass.addMethod(delegatorMethodNode);
  }
protected void instrumentNormalMethod(MutableClass mutableClass, MethodNode method) {
    // if not abstract, set a final modifier
    if ((method.access & Opcodes.ACC_ABSTRACT) == 0) {
      method.access = method.access | Opcodes.ACC_FINAL;
    }
    if ((method.access & Opcodes.ACC_NATIVE) != 0) {
      instrumentNativeMethod(mutableClass, method);
    }

    // todo figure out
    String originalName = method.name;
    method.name = directMethodName(mutableClass, originalName);

    MethodNode delegatorMethodNode = new MethodNode(method.access, originalName, method.desc, method.signature, exceptionArray(method));
    delegatorMethodNode.visibleAnnotations = method.visibleAnnotations;
    delegatorMethodNode.access &= ~(Opcodes.ACC_NATIVE | Opcodes.ACC_ABSTRACT | Opcodes.ACC_FINAL);

    makeMethodPrivate(method);

    RobolectricGeneratorAdapter generator = new RobolectricGeneratorAdapter(delegatorMethodNode);
    generateClassHandlerCall(mutableClass, method, originalName, generator);
    generator.endMethod();
    mutableClass.addMethod(delegatorMethodNode);
  }
protected void instrumentNormalMethod ( MutableClass mutableClass , MethodNode method ) { // if not abstract, set a final modifier if ( ( method . access & Opcodes . ACC_ABSTRACT ) == 0 ) { method . access = method . access | Opcodes . ACC_FINAL ; } if ( ( method . access & Opcodes . ACC_NATIVE ) != 0 ) { instrumentNativeMethod ( mutableClass , method ) ; } // todo figure out String originalName = method . name ; method . name = directMethodName ( mutableClass , originalName ) ; MethodNode delegatorMethodNode = new MethodNode ( method . access , originalName , method . desc , method . signature , exceptionArray ( method ) ) ; delegatorMethodNode . visibleAnnotations = method . visibleAnnotations ; delegatorMethodNode . access &= ~ ( Opcodes . ACC_NATIVE | Opcodes . ACC_ABSTRACT | Opcodes . ACC_FINAL ) ; makeMethodPrivate ( method ) ; RobolectricGeneratorAdapter generator = new RobolectricGeneratorAdapter ( delegatorMethodNode ) ; generateClassHandlerCall ( mutableClass , method , originalName , generator ) ; generator . endMethod ( ) ; mutableClass . addMethod ( delegatorMethodNode ) ; }
# 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 {@link ClassHandler}.
# 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 {