Charles Oliver Nutter created JRUBY-6590:
--------------------------------------------
Summary: DelegateClass subclasses can't include Java interfaces
Key: JRUBY-6590
URL: https://jira.codehaus.org/browse/JRUBY-6590
Project: JRuby
Issue Type: Bug
Components: Ruby 1.9.3
Affects Versions: JRuby 1.6.7
Reporter: Charles Oliver Nutter
Assignee: Thomas E Enebo
Fix For: JRuby 1.7
Minimal reproduction:
{noformat}
system ~/projects/jruby $ jruby -rjava -rdelegate -e "class Foo; end; class Bar
< DelegateClass(Foo); include java.lang.Runnable; end"
NameError: undefined method `===' for class `Bar'
append_features at org/jruby/java/proxies/JavaInterfaceTemplate.java:81
include at org/jruby/RubyModule.java:2123
Bar at -e:1
(root) at -e:1
{noformat}
I believe this is because the 1.9 version of delegate.rb explicitly undefines
=== on the class, with this code:
{noformat}
class Delegator < BasicObject
kernel = ::Kernel.dup
kernel.class_eval do
[:to_s,:inspect,:=~,:!~,:===,:<=>,:eql?,:hash].each do |m|
undef_method m
end
end
include kernel
...
{noformat}
And we unconditionally try to alias/wrap === with this code in
JavaInterfaceTemplate.java:
{noformat}
// Because we implement Java interfaces now, we need a new ===
that's
// aware of those additional "virtual" supertypes
clazz.defineAlias("old_eqq", "===");
clazz.addMethod("===", new JavaMethodOne(clazz, Visibility.PUBLIC) {
{noformat}
I have a fix pending that will simply not do this when there's no === defined
on the source class.
--
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