FWIW, here's output from and patch to enable "rich" parameter information on JRuby. We do not provide the argument names because JRuby often implements multiple-arity methods with multiple native code bodies (so there's potentially different argument names for each arity). I would not expect to require parameter names for native methods, since there will be many ways to implement native methods and some may be incompatible with a single variable name for each position. The variable names are not very useful anyway...I think most people will be interested in the parameter types. system ~/projects/jruby $ jruby -e "p String.instance_method(:gsub).parameters" [[:req], [:opt]] system ~/projects/jruby $ jruby -e "p Array.instance_method(:[]=).parameters" [[:req], [:req], [:opt]] system ~/projects/jruby $ git diff diff --git a/core/src/main/java/org/jruby/internal/runtime/methods/InvocationMethodFactory.java b/core/src/main/java/org/jruby/internal/runtime/methods/InvocationMethodFactory.java index dc45ae9..014f09a 100644 --- a/core/src/main/java/org/jruby/internal/runtime/methods/InvocationMethodFactory.java +++ b/core/src/main/java/org/jruby/internal/runtime/methods/InvocationMethodFactory.java @@ -602,7 +602,7 @@ public class InvocationMethodFactory extends MethodFactory implements Opcodes { private boolean block; private String parameterDesc; - private static final boolean RICH_NATIVE_METHOD_PARAMETERS = false; + private static final boolean RICH_NATIVE_METHOD_PARAMETERS = true; public DescriptorInfo(List<JavaMethodDescriptor> descs) { min = Integer.MAX_VALUE; On Wed, Jul 10, 2013 at 1:32 PM, Charles Oliver Nutter <headius / headius.com> wrote: > On Wed, Jul 10, 2013 at 11:16 AM, Yorick Peterse > <yorickpeterse / gmail.com> wrote: >> The problem, at least with MRI, is that the moment you do something >> similar with methods that are written in C all meaningful information is >> lost: >> >> String.instance_method(:gsub).parameters # => [[:rest]] >> >> This is false since gsub has at least 1 required argument. This happens >> with a lot of methods (if not all) in MRI that are implemented in C. >> Jruby is also affected by this (at least with the above example). >> Rubinius is thus far the only implementation that gets this right that I >> know of. > > Yes, that is the reason I filed this feature. :-) > > Rubinius diverges from everyone else here and presents its own > argument list for #parameters rather than presenting the same > information as MRI. I would like to see #parameters reflect meaningful > information for even native methods, but the JRuby policy is to not > unilaterally make such decisions. > > We could (and at one point, did) present the same data as Rubinius, > but up to now we have chosen to match MRI. > > - Charlie >