/** * Same as Java#getInstance(runtime, rawJavaObject, false). */ public static IRubyObject getInstance(Ruby runtime, Object rawJavaObject) { return getInstance(runtime, rawJavaObject, false); }
private static void generateInterfaceProxy(final Ruby runtime, final Class javaClass, final RubyModule proxy) { assert javaClass.isInterface(); // include any interfaces we extend final Class<?>[] extended = javaClass.getInterfaces(); for (int i = extended.length; --i >= 0; ) { RubyModule extModule = getInterfaceModule(runtime, extended[i]); proxy.includeModule(extModule); } Initializer.setupProxyModule(runtime, javaClass, proxy); addToJavaPackageModule(proxy); }
public static IRubyObject wrapJavaObject(Ruby runtime, Object object) { return allocateProxy(object, getProxyClassForObject(runtime, object)); }
public IRubyObject allocate(Ruby runtime, RubyClass klazz) { // if we haven't been here before, reify the class Class reifiedClass = klazz.getReifiedClass(); if (proxyConstructor == null || proxyConstructor.getDeclaringClass() != reifiedClass) { if (reifiedClass == null) { reifiedClass = Java.generateRealClass(klazz); } proxyConstructor = Java.getRealClassConstructor(runtime, reifiedClass); } IRubyObject newObj = Java.constructProxy(runtime, proxyConstructor, klazz); return newObj; } });
return Java.getInterfaceModule(runtime, javaClass); proxyClass = Java.createProxyClass(runtime, runtime.getJavaSupport().getArrayProxyClass(), javaClass, true); proxyClass = createProxyClass(runtime, runtime.getJavaSupport().getConcreteProxyClass(), javaClass, true); proxyClass = createProxyClass(runtime, runtime.getJavaSupport().getConcreteProxyClass(), javaClass, true); proxyClass.getMetaClass().defineAnnotatedMethods(Java.OldStyleExtensionInherited.class); addToJavaPackageModule(proxyClass, javaClass); proxyClass = createProxyClass(runtime, (RubyClass) getProxyClass(runtime, c.getSuperclass()), javaClass, false); proxyClass.includeModule(getInterfaceModule(runtime, ifc)); addToJavaPackageModule(proxyClass, javaClass);
/** * Returns a new proxy instance of a type corresponding to rawJavaObject's class, * or the cached proxy if we've already seen this object. Note that primitives * and strings are <em>not</em> coerced to corresponding Ruby types; use * JavaUtil.convertJavaToUsableRubyObject to get coerced types or proxies as * appropriate. * * @param runtime the JRuby runtime * @param rawJavaObject the object to get a wrapper for * @param forceCache whether to force the use of the proxy cache * @return the new (or cached) proxy for the specified Java object * @see JavaUtil#convertJavaToUsableRubyObject */ public static IRubyObject getInstance(Ruby runtime, Object rawJavaObject, boolean forceCache) { if (rawJavaObject != null) { RubyClass proxyClass = (RubyClass) getProxyClass(runtime, rawJavaObject.getClass()); if (OBJECT_PROXY_CACHE || forceCache || proxyClass.getCacheProxy()) { return runtime.getJavaSupport().getObjectProxyCache().getOrCreate(rawJavaObject, proxyClass); } return allocateProxy(rawJavaObject, proxyClass); } return runtime.getNil(); }
private static void generateClassProxy(Ruby runtime, Class<?> clazz, RubyClass proxy, RubyClass superClass) { if ( clazz.isArray() ) { createProxyClass(runtime, proxy, clazz, superClass, true); createProxyClass(runtime, proxy, clazz, superClass, true); createProxyClass(runtime, proxy, clazz, superClass, true); if (NEW_STYLE_EXTENSION) { proxy.getMetaClass().defineAnnotatedMethods(NewStyleExtensionInherited.class); proxy.getMetaClass().defineAnnotatedMethods(OldStyleExtensionInherited.class); addToJavaPackageModule(proxy); createProxyClass(runtime, proxy, clazz, superClass, false); proxy.includeModule(getInterfaceModule(runtime, interfaces[i])); addToJavaPackageModule(proxy);
public void load(Ruby runtime, boolean wrap) throws IOException { createJavaModule(runtime); RubyModule jpmt = runtime.defineModule("JavaPackageModuleTemplate"); jpmt.getSingletonClass().setSuperClass(new BlankSlateWrapper(runtime, jpmt.getMetaClass().getSuperClass(), runtime.getKernel())); runtime.getLoadService().require("jruby/java"); // rewite ArrayJavaProxy superclass to point at Object, so it inherits Object behaviors RubyClass ajp = runtime.getClass("ArrayJavaProxy"); ajp.setSuperClass(runtime.getJavaSupport().getObjectJavaClass().getProxyClass()); ajp.includeModule(runtime.getEnumerable()); RubyClassPathVariable.createClassPathVariable(runtime); runtime.setJavaProxyClassFactory(JavaProxyClassFactory.createFactory()); // modify ENV_JAVA to be a read/write version Map systemProps = new SystemPropertiesMap(); runtime.getObject().setConstantQuiet( "ENV_JAVA", new MapJavaProxy( runtime, (RubyClass)Java.getProxyClass(runtime, SystemPropertiesMap.class), systemProps)); }
private static RubyModule getPackageModule(final Ruby runtime, final String name) { final RubyModule javaModule = runtime.getJavaSupport().getJavaModule(); final IRubyObject packageModule = javaModule.getConstantAt(name); if ( packageModule instanceof RubyModule ) return (RubyModule) packageModule; final String packageName; if ( "Default".equals(name) ) packageName = ""; else { Matcher match = CAMEL_CASE_PACKAGE_SPLITTER.matcher(name); packageName = match.replaceAll("$1.$2").toLowerCase(); } return createPackageModule(runtime, javaModule, name, packageName); }
@Override public RubyModule computeValue(Class<?> cls) { return Java.createProxyClassForClass(runtime, cls); } });
public IRubyObject allocateProxy(Object javaObject, RubyClass clazz) { return Java.allocateProxy(javaObject, clazz); } };
@JRubyMethod(module = true, visibility = Visibility.PRIVATE) public static IRubyObject create_proxy_class(IRubyObject recv, IRubyObject arg0, IRubyObject arg1, IRubyObject arg2) { return Java.create_proxy_class(recv, arg0, arg1, arg2); }
addNameClassMappings(runtime, runtime.getJavaSupport().getNameClassMap());
public IRubyObject allocate(Ruby runtime, RubyClass klazz) { // if we haven't been here before, reify the class Class reifiedClass = klazz.getReifiedClass(); if (proxyConstructor == null || proxyConstructor.getDeclaringClass() != reifiedClass) { if (reifiedClass == null) { reifiedClass = Java.generateRealClass(klazz); } proxyConstructor = Java.getRealClassConstructor(runtime, reifiedClass); } IRubyObject newObj = Java.constructProxy(runtime, proxyConstructor, klazz); return newObj; } });
return Java.getInterfaceModule(runtime, javaClass); proxyClass = Java.createProxyClass(runtime, runtime.getJavaSupport().getArrayProxyClass(), javaClass, true); proxyClass = createProxyClass(runtime, runtime.getJavaSupport().getConcreteProxyClass(), javaClass, true); proxyClass = createProxyClass(runtime, runtime.getJavaSupport().getConcreteProxyClass(), javaClass, true); proxyClass.getMetaClass().defineAnnotatedMethods(Java.OldStyleExtensionInherited.class); addToJavaPackageModule(proxyClass, javaClass); proxyClass = createProxyClass(runtime, (RubyClass) getProxyClass(runtime, c.getSuperclass()), javaClass, false); proxyClass.includeModule(getInterfaceModule(runtime, ifc)); addToJavaPackageModule(proxyClass, javaClass);
/** * Returns a new proxy instance of a type corresponding to rawJavaObject's class, * or the cached proxy if we've already seen this object. Note that primitives * and strings are <em>not</em> coerced to corresponding Ruby types; use * JavaUtil.convertJavaToUsableRubyObject to get coerced types or proxies as * appropriate. * * @param runtime the JRuby runtime * @param rawJavaObject the object to get a wrapper for * @param forceCache whether to force the use of the proxy cache * @return the new (or cached) proxy for the specified Java object * @see JavaUtil#convertJavaToUsableRubyObject */ public static IRubyObject getInstance(Ruby runtime, Object rawJavaObject, boolean forceCache) { if (rawJavaObject != null) { RubyClass proxyClass = (RubyClass) getProxyClass(runtime, rawJavaObject.getClass()); if (OBJECT_PROXY_CACHE || forceCache || proxyClass.getCacheProxy()) { return runtime.getJavaSupport().getObjectProxyCache().getOrCreate(rawJavaObject, proxyClass); } else { return allocateProxy(rawJavaObject, proxyClass); } } return runtime.getNil(); }
private static void generateClassProxy(Ruby runtime, Class<?> clazz, RubyClass proxy, RubyClass superClass) { if ( clazz.isArray() ) { createProxyClass(runtime, proxy, clazz, superClass, true); createProxyClass(runtime, proxy, clazz, superClass, true); createProxyClass(runtime, proxy, clazz, superClass, true); if (NEW_STYLE_EXTENSION) { proxy.getMetaClass().defineAnnotatedMethods(NewStyleExtensionInherited.class); proxy.getMetaClass().defineAnnotatedMethods(OldStyleExtensionInherited.class); addToJavaPackageModule(proxy); createProxyClass(runtime, proxy, clazz, superClass, false); proxy.includeModule(getInterfaceModule(runtime, interfaces[i])); addToJavaPackageModule(proxy);
public void load(Ruby runtime, boolean wrap) throws IOException { createJavaModule(runtime); RubyModule jpmt = runtime.defineModule("JavaPackageModuleTemplate"); jpmt.getSingletonClass().setSuperClass(new BlankSlateWrapper(runtime, jpmt.getMetaClass().getSuperClass(), runtime.getKernel())); runtime.getLoadService().require("jruby/java"); // rewite ArrayJavaProxy superclass to point at Object, so it inherits Object behaviors RubyClass ajp = runtime.getClass("ArrayJavaProxy"); ajp.setSuperClass(runtime.getJavaSupport().getObjectJavaClass().getProxyClass()); ajp.includeModule(runtime.getEnumerable()); RubyClassPathVariable.createClassPathVariable(runtime); runtime.setJavaProxyClassFactory(JavaProxyClassFactory.createFactory()); // modify ENV_JAVA to be a read/write version Map systemProps = new SystemPropertiesMap(); runtime.getObject().setConstantQuiet( "ENV_JAVA", new MapJavaProxy( runtime, (RubyClass)Java.getProxyClass(runtime, SystemPropertiesMap.class), systemProps)); }
private static RubyModule getPackageModule(final Ruby runtime, final String name) { final RubyModule javaModule = runtime.getJavaSupport().getJavaModule(); final IRubyObject packageModule = javaModule.getConstantAt(name); if ( packageModule instanceof RubyModule ) return (RubyModule) packageModule; final String packageName; if ( "Default".equals(name) ) packageName = ""; else { Matcher match = CAMEL_CASE_PACKAGE_SPLITTER.matcher(name); packageName = match.replaceAll("$1.$2").toLowerCase(); } return createPackageModule(runtime, javaModule, name, packageName); }
@Override public RubyModule computeValue(Class<?> cls) { return Java.createProxyClassForClass(runtime, cls); } });