private static RubyClass createProxyClass(final Ruby runtime, final RubyClass proxyClass, final Class<?> javaClass, final RubyClass superClass, boolean invokeInherited) { proxyClass.makeMetaClass( superClass.getMetaClass() ); if ( Map.class.isAssignableFrom( javaClass ) ) { proxyClass.setAllocator( runtime.getJavaSupport().getMapJavaProxyClass().getAllocator() ); proxyClass.defineAnnotatedMethods( MapJavaProxy.class ); proxyClass.includeModule( runtime.getEnumerable() ); } else { proxyClass.setAllocator( superClass.getAllocator() ); } proxyClass.defineAnnotatedMethods( JavaProxy.ClassMethods.class ); if ( invokeInherited ) proxyClass.inherit(superClass); Initializer.setupProxyClass(runtime, javaClass, proxyClass); return proxyClass; }
private static RubyClass createProxyClass(final Ruby runtime, final RubyClass proxyClass, final Class<?> javaClass, final RubyClass superClass, boolean invokeInherited) { proxyClass.makeMetaClass( superClass.getMetaClass() ); if ( Map.class.isAssignableFrom( javaClass ) ) { proxyClass.setAllocator( runtime.getJavaSupport().getMapJavaProxyClass().getAllocator() ); proxyClass.defineAnnotatedMethods( MapJavaProxy.class ); proxyClass.includeModule( runtime.getEnumerable() ); } else { proxyClass.setAllocator( superClass.getAllocator() ); } proxyClass.defineAnnotatedMethods( JavaProxy.ClassMethods.class ); if ( invokeInherited ) proxyClass.inherit(superClass); Initializer.setupProxyClass(runtime, javaClass, proxyClass); return proxyClass; }
private static RubyClass createProxyClass(Ruby runtime, RubyClass baseType, JavaClass javaClass, boolean invokeInherited) { // JRUBY-2938 the proxy class might already exist RubyClass proxyClass = javaClass.getProxyClass(); if (proxyClass != null) return proxyClass; // this needs to be split, since conditional calling #inherited doesn't fit standard ruby semantics RubyClass.checkInheritable(baseType); RubyClass superClass = (RubyClass) baseType; proxyClass = RubyClass.newClass(runtime, superClass); proxyClass.makeMetaClass(superClass.getMetaClass()); try { javaClass.javaClass().asSubclass(java.util.Map.class); proxyClass.setAllocator(runtime.getJavaSupport().getMapJavaProxyClass().getAllocator()); proxyClass.defineAnnotatedMethods(MapJavaProxy.class); proxyClass.includeModule(runtime.getEnumerable()); } catch (ClassCastException e) { proxyClass.setAllocator(superClass.getAllocator()); } if (invokeInherited) { proxyClass.inherit(superClass); } proxyClass.callMethod(runtime.getCurrentContext(), "java_class=", javaClass); javaClass.setupProxy(proxyClass); // add java_method for unbound use proxyClass.defineAnnotatedMethods(JavaProxyClassMethods.class); return proxyClass; }
private static RubyClass createProxyClass(Ruby runtime, RubyClass baseType, JavaClass javaClass, boolean invokeInherited) { // JRUBY-2938 the proxy class might already exist RubyClass proxyClass = javaClass.getProxyClass(); if (proxyClass != null) return proxyClass; // this needs to be split, since conditional calling #inherited doesn't fit standard ruby semantics RubyClass.checkInheritable(baseType); RubyClass superClass = (RubyClass) baseType; proxyClass = RubyClass.newClass(runtime, superClass); proxyClass.makeMetaClass(superClass.getMetaClass()); try { javaClass.javaClass().asSubclass(java.util.Map.class); proxyClass.setAllocator(runtime.getJavaSupport().getMapJavaProxyClass().getAllocator()); proxyClass.defineAnnotatedMethods(MapJavaProxy.class); proxyClass.includeModule(runtime.getEnumerable()); } catch (ClassCastException e) { proxyClass.setAllocator(superClass.getAllocator()); } if (invokeInherited) { proxyClass.inherit(superClass); } proxyClass.callMethod(runtime.getCurrentContext(), "java_class=", javaClass); javaClass.setupProxy(proxyClass); // add java_method for unbound use proxyClass.defineAnnotatedMethods(JavaProxyClassMethods.class); return proxyClass; }