1 package org.robolectric.internal.bytecode; 2 3 import java.lang.invoke.MethodHandle; 4 import java.lang.invoke.MethodType; 5 import java.lang.reflect.InvocationTargetException; 6 import java.lang.reflect.Method; 7 8 public class RobolectricInternals { 9 10 @SuppressWarnings("UnusedDeclaration") 11 private static ClassHandler classHandler; // initialized via magic by AndroidSandbox 12 13 @SuppressWarnings("UnusedDeclaration") 14 private static ShadowInvalidator shadowInvalidator; 15 16 @SuppressWarnings("UnusedDeclaration") 17 private static ClassLoader classLoader; 18 19 @SuppressWarnings("UnusedDeclaration") classInitializing(Class clazz)20 public static void classInitializing(Class clazz) throws Exception { 21 classHandler.classInitializing(clazz); 22 } 23 getShadowCreator(Class<?> caller)24 public static MethodHandle getShadowCreator(Class<?> caller) { 25 return classHandler.getShadowCreator(caller); 26 } 27 findShadowMethodHandle( Class<?> theClass, String name, MethodType methodType, boolean isStatic, boolean isNative)28 public static MethodHandle findShadowMethodHandle( 29 Class<?> theClass, String name, MethodType methodType, boolean isStatic, boolean isNative) 30 throws IllegalAccessException { 31 return classHandler.findShadowMethodHandle(theClass, name, methodType, isStatic, isNative); 32 } 33 34 @SuppressWarnings("UnusedDeclaration") cleanStackTrace(Throwable exception)35 public static Throwable cleanStackTrace(Throwable exception) { 36 return classHandler.stripStackTrace(exception); 37 } 38 intercept(String signature, Object instance, Object[] params, Class theClass)39 public static Object intercept(String signature, Object instance, Object[] params, Class theClass) 40 throws Throwable { 41 try { 42 return classHandler.intercept(signature, instance, params, theClass); 43 } catch (java.lang.LinkageError e) { 44 throw new Exception(e); 45 } 46 } 47 performStaticInitialization(Class<?> clazz)48 public static void performStaticInitialization(Class<?> clazz) 49 throws InvocationTargetException, IllegalAccessException { 50 try { 51 Method clinitMethod = clazz.getDeclaredMethod(ShadowConstants.STATIC_INITIALIZER_METHOD_NAME); 52 clinitMethod.setAccessible(true); 53 clinitMethod.invoke(null); 54 } catch (NoSuchMethodException e) { 55 throw new IllegalArgumentException(clazz + " not instrumented?", e); 56 } 57 } 58 getShadowInvalidator()59 public static ShadowInvalidator getShadowInvalidator() { 60 return shadowInvalidator; 61 } 62 getClassLoader()63 public static ClassLoader getClassLoader() { 64 return classLoader; 65 } 66 } 67