• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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