I sent this to the wrong list serv :) Meant to send it to the JRuby list serv
2012/2/27 Jonathan Coveney <[email protected]> > It looks like in master, RubyEnumerator.enumeratorize() is public, but as > of 1.6.7 it is not. I'm wondering what the idiomatic way is to do this? In > 1.6.6 I used "RubyEnumerator.RubyEnumeratorKernerl.obj_to_enum", but that > is no longer working. > > As always, I appreciate the help. Writing jruby libraries in Java is a > brave new world. > > My method is the following: > > @JRubyMethod > public IRubyObject each(ThreadContext context, Block block) throws > ExecException { > //TODO would like to return an Enumerator, but the necessary > methods are taken? > if (!block.isGiven()) return > RubyEnumerator.RubyEnumeratorKernel.obj_to_enum(context, this); > > getIterator(context).each(context,block); > > return this; > /* In a future release of JRuby when enumeratorize is made public > (which is planned), should replace the above with the below > if (!block.isGiven()) return > RubyEnumerator.enumeratorize(context.getRuntime(), this, "each"); > */ > } > > and the error is below: > > Java::JavaLang::NoSuchMethodError: > org.jruby.RubyEnumerator$RubyEnumeratorKernel.obj_to_enum(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject; > from > org.apache.pig.scripting.jruby.RubyDataBag.each(RubyDataBag.java:175) > from > org.apache.pig.scripting.jruby.RubyDataBag$INVOKER$i$0$0$each.call(RubyDataBag$INVOKER$i$0$0$each.gen:65535) > from > org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrNBlock.call(JavaMethod.java:256) > from > org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:292) > from > org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:135) > from org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:63) > from org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) > from org.jruby.ast.RootNode.interpret(RootNode.java:129) > from > org.jruby.evaluator.ASTInterpreter.INTERPRET_EVAL(ASTInterpreter.java:98) > from > org.jruby.evaluator.ASTInterpreter.evalWithBinding(ASTInterpreter.java:169) > from org.jruby.RubyKernel.evalCommon(RubyKernel.java:1058) > from org.jruby.RubyKernel.eval(RubyKernel.java:1011) > from > org.jruby.RubyKernel$INVOKER$s$0$3$eval.call(RubyKernel$INVOKER$s$0$3$eval.gen:65535) > from > org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:186) > from > org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:69) > from > org.jruby.ast.FCallManyArgsNode.interpret(FCallManyArgsNode.java:60) > ... 114 levels... > from > org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:77) > from > org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:190) > from > org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:179) > from > org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312) > from > org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169) > from > Users.jcoveney.workspace.jruby.bin.jirb.__file__(/Users/jcoveney/workspace/jruby/bin/jirb:13) > from > Users.jcoveney.workspace.jruby.bin.jirb.load(/Users/jcoveney/workspace/jruby/bin/jirb) > from org.jruby.Ruby.runScript(Ruby.java:732) > from org.jruby.Ruby.runScript(Ruby.java:725) > from org.jruby.Ruby.runNormally(Ruby.java:632) > from org.jruby.Ruby.runFromMain(Ruby.java:481) > from org.jruby.Main.doRunFromMain(Main.java:335) > from org.jruby.Main.internalRun(Main.java:255) > from org.jruby.Main.run(Main.java:221) > from org.jruby.Main.run(Main.java:205) > from org.jruby.Main.main(Main.java:185)ree-1.8.7-2011.03 :005 > > a.flatten > Java::JavaLang::NoSuchMethodError: > org.jruby.RubyEnumerator$RubyEnumeratorKernel.obj_to_enum(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/runtime/builtin/IRubyObject; > from > org.apache.pig.scripting.jruby.RubyDataBag.flattten(RubyDataBag.java:189) > from > org.apache.pig.scripting.jruby.RubyDataBag$INVOKER$i$0$0$flattten.call(RubyDataBag$INVOKER$i$0$0$flattten.gen:65535) > from > org.jruby.internal.runtime.methods.JavaMethod$JavaMethodZeroOrNBlock.call(JavaMethod.java:256) > from > org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:292) > from > org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:135) > from org.jruby.ast.CallNoArgNode.interpret(CallNoArgNode.java:63) > from org.jruby.ast.NewlineNode.interpret(NewlineNode.java:104) > from org.jruby.ast.RootNode.interpret(RootNode.java:129) > from > org.jruby.evaluator.ASTInterpreter.INTERPRET_EVAL(ASTInterpreter.java:98) > from > org.jruby.evaluator.ASTInterpreter.evalWithBinding(ASTInterpreter.java:169) > from org.jruby.RubyKernel.evalCommon(RubyKernel.java:1058) > from org.jruby.RubyKernel.eval(RubyKernel.java:1011) > from > org.jruby.RubyKernel$INVOKER$s$0$3$eval.call(RubyKernel$INVOKER$s$0$3$eval.gen:65535) > from > org.jruby.internal.runtime.methods.DynamicMethod.call(DynamicMethod.java:186) > from > org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:282) > from > org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:71) > ... 116 levels... > from > org.jruby.evaluator.ASTInterpreter.INTERPRET_METHOD(ASTInterpreter.java:77) > from > org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:190) > from > org.jruby.internal.runtime.methods.DefaultMethod.call(DefaultMethod.java:179) > from > org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:312) > from > org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:169) > from > Users.jcoveney.workspace.jruby.bin.jirb.__file__(/Users/jcoveney/workspace/jruby/bin/jirb:13) > from > Users.jcoveney.workspace.jruby.bin.jirb.load(/Users/jcoveney/workspace/jruby/bin/jirb) > from org.jruby.Ruby.runScript(Ruby.java:732) > from org.jruby.Ruby.runScript(Ruby.java:725) > from org.jruby.Ruby.runNormally(Ruby.java:632) > from org.jruby.Ruby.runFromMain(Ruby.java:481) > from org.jruby.Main.doRunFromMain(Main.java:335) > from org.jruby.Main.internalRun(Main.java:255) > from org.jruby.Main.run(Main.java:221) > from org.jruby.Main.run(Main.java:205) > >
