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)