Home | History | Annotate | Download | only in bytecode
      1 package org.robolectric.internal.bytecode;
      2 
      3 import java.lang.invoke.MethodHandle;
      4 import java.lang.invoke.MethodType;
      5 import javax.annotation.Nonnull;
      6 import org.robolectric.util.Function;
      7 import org.robolectric.util.ReflectionHelpers;
      8 
      9 public abstract class Interceptor {
     10   private MethodRef[] methodRefs;
     11 
     12   public Interceptor(MethodRef... methodRefs) {
     13     this.methodRefs = methodRefs;
     14   }
     15 
     16   public MethodRef[] getMethodRefs() {
     17     return methodRefs;
     18   }
     19 
     20   abstract public Function<Object, Object> handle(MethodSignature methodSignature);
     21 
     22   abstract public MethodHandle getMethodHandle(String methodName, MethodType type) throws NoSuchMethodException, IllegalAccessException;
     23 
     24   @Nonnull
     25   protected static Function<Object, Object> returnDefaultValue(final MethodSignature methodSignature) {
     26     return new Function<Object, Object>() {
     27       @Override
     28       public Object call(Class<?> theClass, Object value, Object[] params) {
     29         return ReflectionHelpers.defaultValueForType(methodSignature.returnType);
     30       }
     31     };
     32   }
     33 }
     34