Switch ProxyMaker to use reflection to run on ART API < 26
This unblocks the Robolectric ART build and gives us a working buildable
dex file
diff --git a/sandbox/src/main/java/org/robolectric/internal/bytecode/ProxyMaker.java b/sandbox/src/main/java/org/robolectric/internal/bytecode/ProxyMaker.java
index 2f8ff95..c0ce954 100644
--- a/sandbox/src/main/java/org/robolectric/internal/bytecode/ProxyMaker.java
+++ b/sandbox/src/main/java/org/robolectric/internal/bytecode/ProxyMaker.java
@@ -6,7 +6,6 @@
import static org.objectweb.asm.Opcodes.INVOKEVIRTUAL;
import static org.objectweb.asm.Opcodes.V1_7;
-import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
@@ -80,7 +79,7 @@
final Class<?> proxyClass = UNSAFE.defineAnonymousClass(targetClass, writer.toByteArray(), null);
try {
- final MethodHandle setter = LOOKUP.findSetter(proxyClass, TARGET_FIELD, targetClass);
+ final java.lang.reflect.Method setter = targetClass.getDeclaredMethod("set" + TARGET_FIELD);
return new Factory() {
@Override public <E> E createProxy(Class<E> targetClass, E target) {
try {
@@ -94,7 +93,7 @@
}
}
};
- } catch (IllegalAccessException | NoSuchFieldException e) {
+ } catch (NoSuchMethodException e) {
throw new AssertionError(e);
}
}