Martin Kleppmann created JRUBY-6635: ---------------------------------------
Summary: Java superclass method is not visible to JRuby Key: JRUBY-6635 URL: https://jira.codehaus.org/browse/JRUBY-6635 Project: JRuby Issue Type: Bug Components: Java Integration Affects Versions: JRuby 1.6.7 Environment: Mac OS X 10.7.3 Java(TM) SE Runtime Environment (build 1.6.0_31-b04-415-11M3635) Java HotSpot(TM) 64-Bit Server VM (build 20.6-b01-415, mixed mode) Reporter: Martin Kleppmann In some specific circumstances, methods defined on Java classes are not callable from JRuby. I have observed this happening when the following things come together: * the instantiated class is a subclass of another Java class, * the superclass has default visibility, * the superclass has a generic type parameter, and * a method is defined on the superclass whose return type is the generic type parameter. In these circumstances, JRuby thinks that this method does not exist. (It's particularly curious that if the method has a non-generic return type, the method *is* callable from JRuby!) Example, using JRuby installed via Maven: {noformat} $ cat Superclass.java class Superclass<T> { private T proto; public T getProto() { return proto; } } $ cat Subclass.java public class Subclass extends Superclass<String> {} $ javac Superclass.java Subclass.java $ java -cp .:$HOME/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar org.jruby.Main -S irb irb(main):001:0> java_import Java::Subclass => Java::Default::Subclass irb(main):002:0> Subclass.new.proto NoMethodError: undefined method `proto' for #<Java::Default::Subclass:0x622f996f> from (irb):2:in `evaluate' from org/jruby/RubyKernel.java:1083:in `eval' from file:/Users/martin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/irb.rb:158:in `eval_input' from file:/Users/martin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/irb.rb:271:in `signal_status' from file:/Users/martin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/irb.rb:155:in `eval_input' from org/jruby/RubyKernel.java:1410:in `loop' from org/jruby/RubyKernel.java:1183:in `catch' from file:/Users/martin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/irb.rb:154:in `eval_input' from file:/Users/martin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/irb.rb:71:in `start' from org/jruby/RubyKernel.java:1183:in `catch' from file:/Users/martin/.m2/repository/org/jruby/jruby-complete/1.6.7/jruby-complete-1.6.7.jar!/META-INF/jruby.home/lib/ruby/1.8/irb.rb:70:in `start' from /Users/martin/Applications/jruby/bin/jirb:13:in `(root)' {noformat} The same exception occurs when trying to call {{get_proto}} or {{getProto}}. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email