package org.robolectric.shadow.api;
import org.robolectric.internal.IShadow;
import org.robolectric.util.ReflectionHelpers;
import org.robolectric.util.ReflectionHelpers.ClassParameter;
public class Shadow {
@SuppressWarnings("unused")
private final static IShadow SHADOW_IMPL;
static {
try {
SHADOW_IMPL = Class.forName("org.robolectric.internal.bytecode.ShadowImpl")
.asSubclass(IShadow.class).newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* Retrieve corresponding Shadow of the object.
* @since 3.3
*/
public static <T> T extract(Object instance) {
return SHADOW_IMPL.extract(instance);
}
public static <T> T newInstanceOf(Class<T> clazz) {
return SHADOW_IMPL.newInstanceOf(clazz);
}
public static Object newInstanceOf(String className) {
try {
Class<?> aClass = Shadow.class.getClassLoader().loadClass(className);
return SHADOW_IMPL.newInstanceOf(aClass);
} catch (ClassNotFoundException e) {
return null;
}
}
public static <T> T newInstance(Class<T> clazz, Class[] parameterTypes, Object[] params) {
return SHADOW_IMPL.newInstance(clazz, parameterTypes, params);
}
public static <T> T directlyOn(T shadowedObject, Class<T> clazz) {
return SHADOW_IMPL.directlyOn(shadowedObject, clazz);
}
@SuppressWarnings("unchecked")
public static <R> R directlyOn(Object shadowedObject, String clazzName, String methodName, ClassParameter... paramValues) {
return SHADOW_IMPL.directlyOn(shadowedObject, clazzName, methodName, paramValues);
}
public static <R, T> R directlyOn(T shadowedObject, Class<T> clazz, String methodName, ClassParameter... paramValues) {
return SHADOW_IMPL.directlyOn(shadowedObject, clazz, methodName, paramValues);
}
public static <R, T> R directlyOn(Class<T> clazz, String methodName, ClassParameter... paramValues) {
return SHADOW_IMPL.directlyOn(clazz, methodName, paramValues);
}
public static <R> R invokeConstructor(Class<? extends R> clazz, R instance, ClassParameter... paramValues) {
return SHADOW_IMPL.invokeConstructor(clazz, instance, paramValues);
}
public static String directMethodName(String methodName) {
return SHADOW_IMPL.directMethodName(methodName);
}
}