public void generateMethodAddCalls(ExecutableElement md, JRubyMethod jrubyMethod) { final String[] names = jrubyMethod.name(); final String[] aliases = jrubyMethod.alias(); if (jrubyMethod.meta()) { defineMethodOnClass(BASEMETHOD, SINGLETONCLASS, names, aliases, md); } else { defineMethodOnClass(BASEMETHOD, CLASS, names, aliases, md); if (jrubyMethod.module()) { mv.aload(CLASS); mv.aload(BASEMETHOD); mv.invokestatic("org/jruby/anno/TypePopulator", "populateModuleMethod", "(Lorg/jruby/RubyModule;Lorg/jruby/internal/runtime/methods/DynamicMethod;)Lorg/jruby/internal/runtime/methods/DynamicMethod;"); mv.astore(MODULEMETHOD); defineMethodOnClass(MODULEMETHOD, SINGLETONCLASS, names, aliases, md); } } }
public static long getEncodedSignature(JRubyMethod anno) { return encodeSignature(anno.required(), anno.optional(), 0, 0, 0, anno.rest(), false); }
private static CharSequence getActualQualifiedName(TypeElement td) { if (td.getNestingKind() == NestingKind.MEMBER) { return getActualQualifiedName((TypeElement)td.getEnclosingElement()) + "$" + td.getSimpleName(); } return td.getQualifiedName().toString(); }
processType(innerType); classNames.add(getActualQualifiedName(cd)); processMethodDeclarations(staticAnnotatedMethods); processMethodDeclarations(annotatedMethods); addCoreMethodMapping(cd, complexNames); addSimpleMethodMappings(cd, simpleNames); AnnotationHelper.populateMethodIndex(readGroups, (bits, names) -> emitIndexCode(bits, names, "addMethodReadFieldsPacked")); AnnotationHelper.populateMethodIndex(writeGroups, (bits, names) -> emitIndexCode(bits, names, "addMethodWriteFieldsPacked"));
false); int handleOffset = calculateHandleOffset(method.getParameters().size(), anno.required(), anno.optional(), anno.rest(), isStatic, hasContext, hasBlock); mv.getstatic(p(Visibility.class), anno.visibility().name(), ci(Visibility.class)); mv.ldc(AnnotationBinder.getBaseName(anno.name(), methods.get(0))); mv.ldc(encodeSignature(0, 0, 0, 0, 0, true, false)); mv.ldc(true); mv.ldc(anno.notImplemented()); mv.ldc(handles[i]); adaptHandle(handleToDesc.get(handles[i]), implClass); } else { mv.aconst_null(); generateMethodAddCalls(methods.get(0), anno);
public void adaptHandle(ExecutableElementDescriptor executableElementDescriptor, int implClass) { ExecutableElementDescriptor desc = executableElementDescriptor; // adapt handle mv.aload(RUNTIME); mv.ldc(calculateActualRequired(desc.method, desc.method.getParameters().size(), desc.optional, desc.rest, desc.isStatic, desc.hasContext, desc.hasBlock)); mv.ldc(desc.required); mv.ldc(desc.optional); mv.ldc(desc.rest); mv.ldc(desc.rubyName); mv.ldc(Type.getObjectType(desc.declaringClassPath)); mv.ldc(desc.isStatic); mv.ldc(desc.hasContext); mv.ldc(desc.hasBlock); mv.ldc(desc.anno.frame()); mv.aload(implClass); mv.invokestatic("org/jruby/internal/runtime/methods/InvokeDynamicMethodFactory", "adaptHandle", Method.getMethod("java.util.concurrent.Callable adaptHandle(java.lang.invoke.MethodHandle, org.jruby.Ruby, int, int, int, boolean, java.lang.String, java.lang.Class, boolean, boolean, boolean, boolean, org.jruby.RubyModule)").getDescriptor()); }
processType(innerType); classNames.add(getActualQualifiedName(cd)); processMethodDeclarations(staticAnnotatedMethods); processMethodDeclarations(annotatedMethods); addCoreMethodMapping(cd, complexNames); addSimpleMethodMappings(cd, simpleNames); AnnotationHelper.populateMethodIndex(readGroups, (bits, names) -> emitIndexCode(bits, names, "addMethodReadFieldsPacked")); AnnotationHelper.populateMethodIndex(writeGroups, (bits, names) -> emitIndexCode(bits, names, "addMethodWriteFieldsPacked"));
false); int handleOffset = calculateHandleOffset(method.getParameters().size(), anno.required(), anno.optional(), anno.rest(), isStatic, hasContext, hasBlock); mv.getstatic(p(Visibility.class), anno.visibility().name(), ci(Visibility.class)); mv.ldc(AnnotationBinder.getBaseName(anno.name(), methods.get(0))); mv.ldc(encodeSignature(0, 0, 0, 0, 0, true, false)); mv.ldc(true); mv.ldc(anno.notImplemented()); mv.ldc(handles[i]); adaptHandle(handleToDesc.get(handles[i]), implClass); } else { mv.aconst_null(); generateMethodAddCalls(methods.get(0), anno);
public void adaptHandle(ExecutableElementDescriptor executableElementDescriptor, int implClass) { ExecutableElementDescriptor desc = executableElementDescriptor; // adapt handle mv.aload(RUNTIME); mv.ldc(calculateActualRequired(desc.method, desc.method.getParameters().size(), desc.optional, desc.rest, desc.isStatic, desc.hasContext, desc.hasBlock)); mv.ldc(desc.required); mv.ldc(desc.optional); mv.ldc(desc.rest); mv.ldc(desc.rubyName); mv.ldc(Type.getObjectType(desc.declaringClassPath)); mv.ldc(desc.isStatic); mv.ldc(desc.hasContext); mv.ldc(desc.hasBlock); mv.ldc(desc.anno.frame()); mv.aload(implClass); mv.invokestatic("org/jruby/internal/runtime/methods/InvokeDynamicMethodFactory", "adaptHandle", Method.getMethod("java.util.concurrent.Callable adaptHandle(java.lang.invoke.MethodHandle, org.jruby.Ruby, int, int, int, boolean, java.lang.String, java.lang.Class, boolean, boolean, boolean, boolean, org.jruby.RubyModule)").getDescriptor()); }
private static CharSequence getActualQualifiedName(TypeElement td) { if (td.getNestingKind() == NestingKind.MEMBER) { return getActualQualifiedName((TypeElement)td.getEnclosingElement()) + "$" + td.getSimpleName(); } return td.getQualifiedName().toString(); }
public static long getEncodedSignature(JRubyMethod anno) { return encodeSignature(anno.required(), anno.optional(), 0, 0, 0, anno.rest(), false); }
public void generateMethodAddCalls(ExecutableElement md, JRubyMethod jrubyMethod) { final String[] names = jrubyMethod.name(); final String[] aliases = jrubyMethod.alias(); if (jrubyMethod.meta()) { defineMethodOnClass(BASEMETHOD, SINGLETONCLASS, names, aliases, md); } else { defineMethodOnClass(BASEMETHOD, CLASS, names, aliases, md); if (jrubyMethod.module()) { mv.aload(CLASS); mv.aload(BASEMETHOD); mv.invokestatic("org/jruby/anno/TypePopulator", "populateModuleMethod", "(Lorg/jruby/RubyModule;Lorg/jruby/internal/runtime/methods/DynamicMethod;)Lorg/jruby/internal/runtime/methods/DynamicMethod;"); mv.astore(MODULEMETHOD); defineMethodOnClass(MODULEMETHOD, SINGLETONCLASS, names, aliases, md); } } }