JI stores and searches superclasses' methods that are overridden by children
----------------------------------------------------------------------------

                 Key: JRUBY-4736
                 URL: http://jira.codehaus.org/browse/JRUBY-4736
             Project: JRuby
          Issue Type: Improvement
          Components: Java Integration
    Affects Versions: JRuby 1.5
            Reporter: Charles Oliver Nutter
            Assignee: Charles Oliver Nutter
            Priority: Minor
             Fix For: JRuby 1.6


For JRUBY-4734, we discovered that our JI subsystem is storing too many 
methods. Specifically, it stores methods of the same name, argument types, and 
return type from both parent and child class, even though only the child class 
method will ever be callable (due to Java virtual/interface dispatch). Here's 
the example from that bug, calling StringBuilder.append with a Java String and 
a Java float:

{noformat}
multiple Java methods for arguments (Java::JavaLang::String), using first:
  public java.lang.AbstractStringBuilder 
java.lang.AbstractStringBuilder.append(java.lang.String)
  public java.lang.AbstractStringBuilder 
java.lang.StringBuilder.append(java.lang.String)
  public java.lang.StringBuilder 
java.lang.StringBuilder.append(java.lang.String)
  public java.lang.AbstractStringBuilder 
java.lang.AbstractStringBuilder.append(java.lang.CharSequence)
  public java.lang.AbstractStringBuilder 
java.lang.AbstractStringBuilder.append(java.lang.Object)
  public java.lang.Appendable 
java.lang.AbstractStringBuilder.append(java.lang.CharSequence) throws 
java.io.IOException
  public java.lang.Appendable 
java.lang.StringBuilder.append(java.lang.CharSequence) throws 
java.io.IOException
  public java.lang.AbstractStringBuilder 
java.lang.StringBuilder.append(java.lang.Object)
  public java.lang.AbstractStringBuilder 
java.lang.StringBuilder.append(java.lang.CharSequence)
  public java.lang.StringBuilder 
java.lang.StringBuilder.append(java.lang.CharSequence)
  public java.lang.StringBuilder 
java.lang.StringBuilder.append(java.lang.Object)
multiple Java methods for arguments (Java::JavaLang::Float), using first:
  public java.lang.AbstractStringBuilder 
java.lang.AbstractStringBuilder.append(float)
  public java.lang.AbstractStringBuilder 
java.lang.AbstractStringBuilder.append(double)
  public java.lang.AbstractStringBuilder java.lang.StringBuilder.append(float)
  public java.lang.AbstractStringBuilder java.lang.StringBuilder.append(double)
  public java.lang.StringBuilder java.lang.StringBuilder.append(double)
  public java.lang.StringBuilder java.lang.StringBuilder.append(float)
  public java.lang.AbstractStringBuilder 
java.lang.AbstractStringBuilder.append(java.lang.Object)
  public java.lang.AbstractStringBuilder 
java.lang.AbstractStringBuilder.append(char)
  public java.lang.AbstractStringBuilder 
java.lang.AbstractStringBuilder.append(int)
  public java.lang.AbstractStringBuilder 
java.lang.AbstractStringBuilder.append(long)
  public java.lang.Appendable java.lang.AbstractStringBuilder.append(char) 
throws java.io.IOException
  public java.lang.Appendable java.lang.StringBuilder.append(char) throws 
java.io.IOException
  public java.lang.AbstractStringBuilder 
java.lang.StringBuilder.append(java.lang.Object)
  public java.lang.AbstractStringBuilder java.lang.StringBuilder.append(char)
  public java.lang.AbstractStringBuilder java.lang.StringBuilder.append(int)
  public java.lang.AbstractStringBuilder java.lang.StringBuilder.append(long)
  public java.lang.StringBuilder 
java.lang.StringBuilder.append(java.lang.Object)
  public java.lang.StringBuilder java.lang.StringBuilder.append(long)
  public java.lang.StringBuilder java.lang.StringBuilder.append(int)
  public java.lang.StringBuilder java.lang.StringBuilder.append(char)
{noformat}

These extra methods are likely increasing the size of our JI subsystem as well 
as adding to the complexity of method dispatch (at least for the first time 
through, since we cache the best hit). We should reduce the set of methods for 
a given name + arity to only those that could actually be dispatched given 
parent/child overriding.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.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


Reply via email to