Class<?> getProxyClass(Member member) {
Class<?> ret = proxyMap.get(member);
if (ret == null) {
String name = getStableProxyName(member) + PROXY_NAME_SEPARATOR + proxyNr.incrementAndGet();
Class<?> iface = getAccessorInterface(member);
byte[] proxyBC = generateProxyClass(name, new Class<?>[]{iface, ReflectionProxy.class});
try {
ret = (Class<?>) defineClass.invoke(imageClassLoader.getClassLoader(), name, proxyBC, 0, proxyBC.length);
resolveClass.invoke(imageClassLoader.getClassLoader(), ret);
proxyMap.put(member, ret);
ResolvedJavaType type = metaAccess.lookupJavaType(ret);
typeToMember.put(type, member);
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
throw VMError.shouldNotReachHere(ex);
}
}
return ret;
}