public static Class createOldStyleImplClass(Class[] superTypes, RubyClass rubyClass, Ruby ruby, String name, ClassDefiningClassLoader classLoader) { String[] superTypeNames = new String[superTypes.length]; Map<String, List<Method>> simpleToAll = buildSimpleToAllMap(superTypes, superTypeNames); Class newClass = defineOldStyleImplClass(ruby, name, superTypeNames, simpleToAll, classLoader); return newClass; }
public static Class createRealImplClass(Class superClass, Class[] interfaces, RubyClass rubyClass, Ruby ruby, String name) { String[] superTypeNames = new String[interfaces.length]; Map<String, List<Method>> simpleToAll = buildSimpleToAllMap(interfaces, superTypeNames); Class newClass = defineRealImplClass(ruby, name, superClass, superTypeNames, simpleToAll); return newClass; }
coerceArgumentsToRuby(mv, paramTypes, rubyIndex); mv.invokevirtual(p(DynamicMethod.class), "call", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class, RubyModule.class, String.class, IRubyObject[].class, Block.class)); coerceResultAndReturn(mv, returnType);
final int baseIndex = RealClassGenerator.calcBaseIndex(params, 0); int rubyIndex = baseIndex; RealClassGenerator.coerceArgumentsToRuby(m, params, rubyIndex); m.invokevirtual("org/jruby/RubyClass", "callMethod", sig(IRubyObject.class, String.class, IRubyObject[].class)); RealClassGenerator.coerceResultAndReturn(m, methodSignature[0]);
coerceArgumentsToRuby(mv, paramTypes, rubyIndex); coerceResultAndReturn(mv, returnType); case "equals" : objectEquals(-1, mv); break; case "hashCode" : objectHashCode(-1, mv); break; case "toString" : objectToString(-1, mv); break; default : throw new UnsupportedOperationException(simpleName);
final int baseIndex = calcBaseIndex(paramTypes, 1); if ( defineDefaultEquals(2, mv, paramTypes, returnType) ) ; else defineOldStyleBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; case "hashCode" : if ( defineDefaultHashCode(3, mv, paramTypes, returnType) ) ; else defineOldStyleBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; case "toString" : if ( defineDefaultToString(4, mv, paramTypes, returnType) ) ; else defineOldStyleBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; case "__ruby_object" : defineOldStyleBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break;
final int baseIndex = calcBaseIndex(paramTypes, 1); defineRealEqualsWithFallback(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); else defineRealBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; case "hashCode" : if ( paramTypes.length == 0 && returnType == Integer.TYPE ) { defineRealHashCodeWithFallback(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); else defineRealBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; case "toString" : if ( paramTypes.length == 0 && returnType == String.class ) { defineRealToStringWithFallback(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); else defineRealBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; default : defineRealBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break;
superClass = RubyObject.class; proxyImplClass = RealClassGenerator.createRealImplClass(superClass, interfaces, clazz, runtime, implClassName);
proxyImplClass = RealClassGenerator.createOldStyleImplClass(interfaces, wrapperClass, runtime, implClassName, classLoader);
coerceArgumentsToRuby(mv, paramTypes, rubyIndex); mv.invokevirtual(p(DynamicMethod.class), "call", sig(IRubyObject.class, ThreadContext.class, IRubyObject.class, RubyModule.class, String.class, IRubyObject[].class, Block.class)); coerceResultAndReturn(mv, returnType);
final int baseIndex = RealClassGenerator.calcBaseIndex(params, 0); int rubyIndex = baseIndex; RealClassGenerator.coerceArgumentsToRuby(m, params, rubyIndex); m.invokevirtual("org/jruby/RubyClass", "callMethod", sig(IRubyObject.class, String.class, IRubyObject[].class)); RealClassGenerator.coerceResultAndReturn(m, methodSignature[0]);
coerceArgumentsToRuby(mv, paramTypes, rubyIndex); coerceResultAndReturn(mv, returnType); case "equals" : objectEquals(-1, mv); break; case "hashCode" : objectHashCode(-1, mv); break; case "toString" : objectToString(-1, mv); break; default : throw new UnsupportedOperationException(simpleName);
final int baseIndex = calcBaseIndex(paramTypes, 1); if ( defineDefaultEquals(2, mv, paramTypes, returnType) ) ; else defineOldStyleBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; case "hashCode" : if ( defineDefaultHashCode(3, mv, paramTypes, returnType) ) ; else defineOldStyleBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; case "toString" : if ( defineDefaultToString(4, mv, paramTypes, returnType) ) ; else defineOldStyleBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; case "__ruby_object" : defineOldStyleBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break;
final int baseIndex = calcBaseIndex(paramTypes, 1); defineRealEqualsWithFallback(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); else defineRealBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; case "hashCode" : if ( paramTypes.length == 0 && returnType == Integer.TYPE ) { defineRealHashCodeWithFallback(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); else defineRealBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; case "toString" : if ( paramTypes.length == 0 && returnType == String.class ) { defineRealToStringWithFallback(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); else defineRealBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break; default : defineRealBody(mv, pathName, simpleName, paramTypes, returnType, baseIndex, cacheSize++, nameSet); break;
superClass = RubyObject.class; proxyImplClass = RealClassGenerator.createRealImplClass(superClass, interfaces, clazz, runtime, implClassName);
proxyImplClass = RealClassGenerator.createOldStyleImplClass(interfaces, wrapperClass, runtime, implClassName, classLoader);
RealClassGenerator.coerceArgumentsToRuby(m, params, rubyIndex); m.invokevirtual(javaPath, "callMethod", sig(IRubyObject.class, String.class, IRubyObject[].class)); RealClassGenerator.coerceResultAndReturn(m, methodSignature[0]); RealClassGenerator.coerceArgumentsToRuby(m, params, rubyIndex); m.invokevirtual("org/jruby/RubyClass", "callMethod", sig(IRubyObject.class, String.class, IRubyObject[].class)); RealClassGenerator.coerceResultAndReturn(m, methodSignature[0]);
final int baseIndex = RealClassGenerator.calcBaseIndex(params, 1); final int rubyIndex = baseIndex; RealClassGenerator.coerceArgumentsToRuby(m, params, rubyIndex); m.invokevirtual(javaPath, "callMethod", sig(IRubyObject.class, String.class, IRubyObject[].class)); RealClassGenerator.coerceResultAndReturn(m, methodSignature[0]);
public static Class createOldStyleImplClass(Class[] superTypes, RubyClass rubyClass, Ruby ruby, String name, ClassDefiningClassLoader classLoader) { String[] superTypeNames = new String[superTypes.length]; // interfaces now do have a convention that they only override an interface default method // if a Ruby method (stub) is present in the implementing Ruby class : Map<String, List<Method>> simpleToAll = buildSimpleToAllMap(superTypes, superTypeNames, rubyClass); Class newClass = defineOldStyleImplClass(ruby, name, superTypeNames, simpleToAll, classLoader); return newClass; }
public static Class createRealImplClass(Class superClass, Class[] interfaces, RubyClass rubyClass, Ruby ruby, String name) { String[] superTypeNames = new String[interfaces.length]; Map<String, List<Method>> simpleToAll = buildSimpleToAllMap(interfaces, superTypeNames); Class newClass = defineRealImplClass(ruby, name, superClass, superTypeNames, simpleToAll); return newClass; }