public class JavaProxyClassFactory
extends java.lang.Object
| Modifier and Type | Class and Description |
|---|---|
(package private) static class |
JavaProxyClassFactory.MethodData |
(package private) static class |
JavaProxyClassFactory.MethodKey |
static interface |
JavaProxyClassFactory.VarArgs
Variable arguments marker for generated constructor.
|
| Modifier and Type | Field and Description |
|---|---|
private static java.util.concurrent.atomic.AtomicInteger |
counter |
private static java.lang.reflect.Method |
defineClassMethod |
(package private) static org.objectweb.asm.Type[] |
EMPTY_TYPE_ARRAY |
private static org.objectweb.asm.commons.Method |
forName |
private static org.objectweb.asm.commons.Method |
initProxyClass |
private static org.objectweb.asm.commons.Method |
initProxyMethod |
private static org.objectweb.asm.Type |
INTERNAL_PROXY_HELPER_TYPE |
private static java.lang.String |
INVOCATION_HANDLER_FIELD_NAME |
private static org.objectweb.asm.Type |
INVOCATION_HANDLER_TYPE |
private static org.objectweb.asm.commons.Method |
invoke |
(package private) static org.objectweb.asm.Type |
JAVA_LANG_CLASS_TYPE |
private static org.objectweb.asm.Type |
JAVA_PROXY_TYPE |
private static Logger |
LOG |
private static java.lang.String |
PROXY_CLASS_FIELD_NAME |
private static org.objectweb.asm.Type |
PROXY_CLASS_TYPE |
private static org.objectweb.asm.Type |
PROXY_METHOD_TYPE |
| Constructor and Description |
|---|
JavaProxyClassFactory() |
| Modifier and Type | Method and Description |
|---|---|
private static void |
addClass(java.util.Set<java.lang.Class> allClasses,
java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods,
java.lang.Class clazz,
java.util.Set<java.lang.String> names) |
private static void |
addInterface(java.util.Set<java.lang.Class> allClasses,
java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods,
java.lang.Class iface,
java.util.Set<java.lang.String> names) |
private static void |
addInterfaces(java.util.Set<java.lang.Class> allClasses,
java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods,
java.lang.Class[] ifaces,
java.util.Set<java.lang.String> names) |
private static void |
addMethod(java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods,
java.lang.reflect.Method method) |
private static void |
addMethods(java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods,
java.lang.Class classOrIface,
java.util.Set<java.lang.String> names) |
private org.objectweb.asm.ClassWriter |
beginProxyClass(java.lang.String className,
java.lang.Class superClass,
java.lang.Class[] interfaces) |
private static java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> |
collectMethods(java.lang.Class superClass,
java.lang.Class[] interfaces,
java.util.Set<java.lang.String> names) |
private org.objectweb.asm.commons.GeneratorAdapter |
createClassInitializer(org.objectweb.asm.Type selfType,
org.objectweb.asm.ClassVisitor cw) |
static JavaProxyClassFactory |
createFactory() |
private JavaProxyClass |
generate(java.lang.ClassLoader loader,
java.lang.String targetClassName,
java.lang.Class superClass,
java.lang.Class[] interfaces,
java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods,
org.objectweb.asm.Type selfType) |
private java.lang.Class[] |
generateConstructor(org.objectweb.asm.Type selfType,
java.lang.reflect.Constructor constructor,
org.objectweb.asm.ClassVisitor cw) |
private void |
generateConstructors(java.lang.Class superClass,
org.objectweb.asm.Type selfType,
org.objectweb.asm.ClassVisitor cw) |
private void |
generateGetInvocationHandler(org.objectweb.asm.Type selfType,
org.objectweb.asm.ClassVisitor cw) |
private void |
generateGetProxyClass(org.objectweb.asm.Type selfType,
org.objectweb.asm.ClassVisitor cw) |
private void |
generateProxyMethod(org.objectweb.asm.Type selfType,
org.objectweb.asm.Type superType,
org.objectweb.asm.ClassVisitor cw,
org.objectweb.asm.commons.GeneratorAdapter clazzInit,
JavaProxyClassFactory.MethodData md) |
private void |
generateProxyMethods(java.lang.Class superClass,
java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods,
org.objectweb.asm.Type selfType,
org.objectweb.asm.ClassVisitor cw,
org.objectweb.asm.commons.GeneratorAdapter clazzInit) |
private static boolean |
hasPublicOrProtectedConstructor(java.lang.Class clazz) |
private java.lang.String[] |
interfaceNamesForProxyClass(java.lang.Class[] interfaces) |
protected java.lang.Class |
invokeDefineClass(java.lang.ClassLoader loader,
java.lang.String className,
byte[] data) |
(package private) static boolean |
isVarArgs(java.lang.reflect.Constructor<?> ctor) |
JavaProxyClass |
newProxyClass(Ruby runtime,
java.lang.ClassLoader loader,
java.lang.String targetClassName,
java.lang.Class superClass,
java.lang.Class[] interfaces,
java.util.Set<java.lang.String> names) |
private static int |
nextId() |
private static java.lang.String |
packageName(java.lang.String clazzName) |
private static java.lang.String |
proxyPackageName(java.lang.Class clazz) |
private static java.lang.String |
targetClassName(java.lang.Class clazz) |
private static java.lang.String |
toInternalClassName(java.lang.Class clazz) |
private static java.lang.String |
toInternalClassName(java.lang.String name) |
private static java.lang.String[] |
toInternalNames(java.lang.Class[] params) |
private static org.objectweb.asm.Type |
toType(java.lang.Class clazz) |
private static org.objectweb.asm.Type[] |
toTypes(java.lang.Class[] params) |
private static void |
validateArgs(Ruby runtime,
java.lang.String targetClassName,
java.lang.Class superClass) |
private static final Logger LOG
static final org.objectweb.asm.Type[] EMPTY_TYPE_ARRAY
static final org.objectweb.asm.Type JAVA_LANG_CLASS_TYPE
private static final org.objectweb.asm.commons.Method forName
private static final java.lang.String INVOCATION_HANDLER_FIELD_NAME
private static final java.lang.String PROXY_CLASS_FIELD_NAME
private static final org.objectweb.asm.Type PROXY_METHOD_TYPE
private static final org.objectweb.asm.Type PROXY_CLASS_TYPE
private static final org.objectweb.asm.Type INVOCATION_HANDLER_TYPE
private static final org.objectweb.asm.commons.Method invoke
private static final org.objectweb.asm.Type INTERNAL_PROXY_HELPER_TYPE
private static final org.objectweb.asm.commons.Method initProxyClass
private static final org.objectweb.asm.commons.Method initProxyMethod
private static final org.objectweb.asm.Type JAVA_PROXY_TYPE
private static final java.util.concurrent.atomic.AtomicInteger counter
private static final java.lang.reflect.Method defineClassMethod
private static int nextId()
public static JavaProxyClassFactory createFactory()
public JavaProxyClass newProxyClass(Ruby runtime, java.lang.ClassLoader loader, java.lang.String targetClassName, java.lang.Class superClass, java.lang.Class[] interfaces, java.util.Set<java.lang.String> names) throws java.lang.reflect.InvocationTargetException
java.lang.reflect.InvocationTargetExceptionprivate JavaProxyClass generate(java.lang.ClassLoader loader, java.lang.String targetClassName, java.lang.Class superClass, java.lang.Class[] interfaces, java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods, org.objectweb.asm.Type selfType)
private static java.lang.String targetClassName(java.lang.Class clazz)
protected java.lang.Class invokeDefineClass(java.lang.ClassLoader loader,
java.lang.String className,
byte[] data)
private org.objectweb.asm.ClassWriter beginProxyClass(java.lang.String className,
java.lang.Class superClass,
java.lang.Class[] interfaces)
private java.lang.String[] interfaceNamesForProxyClass(java.lang.Class[] interfaces)
private void generateProxyMethods(java.lang.Class superClass,
java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods,
org.objectweb.asm.Type selfType,
org.objectweb.asm.ClassVisitor cw,
org.objectweb.asm.commons.GeneratorAdapter clazzInit)
private void generateGetInvocationHandler(org.objectweb.asm.Type selfType,
org.objectweb.asm.ClassVisitor cw)
private void generateGetProxyClass(org.objectweb.asm.Type selfType,
org.objectweb.asm.ClassVisitor cw)
private void generateConstructors(java.lang.Class superClass,
org.objectweb.asm.Type selfType,
org.objectweb.asm.ClassVisitor cw)
private org.objectweb.asm.commons.GeneratorAdapter createClassInitializer(org.objectweb.asm.Type selfType,
org.objectweb.asm.ClassVisitor cw)
private void generateProxyMethod(org.objectweb.asm.Type selfType,
org.objectweb.asm.Type superType,
org.objectweb.asm.ClassVisitor cw,
org.objectweb.asm.commons.GeneratorAdapter clazzInit,
JavaProxyClassFactory.MethodData md)
private java.lang.Class[] generateConstructor(org.objectweb.asm.Type selfType,
java.lang.reflect.Constructor constructor,
org.objectweb.asm.ClassVisitor cw)
static boolean isVarArgs(java.lang.reflect.Constructor<?> ctor)
private static java.lang.String toInternalClassName(java.lang.Class clazz)
private static java.lang.String toInternalClassName(java.lang.String name)
private static org.objectweb.asm.Type toType(java.lang.Class clazz)
private static org.objectweb.asm.Type[] toTypes(java.lang.Class[] params)
private static java.lang.String[] toInternalNames(java.lang.Class[] params)
private static java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> collectMethods(java.lang.Class superClass, java.lang.Class[] interfaces, java.util.Set<java.lang.String> names)
private static void addInterfaces(java.util.Set<java.lang.Class> allClasses,
java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods,
java.lang.Class[] ifaces,
java.util.Set<java.lang.String> names)
private static void addInterface(java.util.Set<java.lang.Class> allClasses,
java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods,
java.lang.Class iface,
java.util.Set<java.lang.String> names)
private static void addMethods(java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods, java.lang.Class classOrIface, java.util.Set<java.lang.String> names)
private static void addMethod(java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods, java.lang.reflect.Method method)
private static void addClass(java.util.Set<java.lang.Class> allClasses,
java.util.Map<JavaProxyClassFactory.MethodKey,JavaProxyClassFactory.MethodData> methods,
java.lang.Class clazz,
java.util.Set<java.lang.String> names)
private static void validateArgs(Ruby runtime, java.lang.String targetClassName, java.lang.Class superClass)
private static boolean hasPublicOrProtectedConstructor(java.lang.Class clazz)
private static java.lang.String packageName(java.lang.String clazzName)
private static java.lang.String proxyPackageName(java.lang.Class clazz)