Reduce "multiple Java method" warnings in unambiguous cases
-----------------------------------------------------------

                 Key: JRUBY-4734
                 URL: http://jira.codehaus.org/browse/JRUBY-4734
             Project: JRuby
          Issue Type: Bug
          Components: Java Integration
    Affects Versions: JRuby 1.5
         Environment: jruby 1.5.0.RC1 (ruby 1.8.7 patchlevel 249) (2010-04-18 
0387574) (Java HotSpot(TM) Client VM 1.6.0_19)
            Reporter: David Kellum
            Priority: Minor


JRUBY-4726 addressed eliminating these warnings in cases where there is only 
one java method with matching arity.  However this warning is still emitted in 
matching arity cases where the types involved are not ambiguous (one 
appropriate mapping, or to_java(<:TYPE>) used to specify the specific type.  
Note that this warning output is pretty lengthy, and while the "-w" flag is 
optional at the jruby level, in practice common test launchers like "rake test" 
supply the -w flag by default.

See test case example below and its lengthy output. Here it looks like Java 
superclass methods overridden in a subclass are still output as candidate 
methods (though if these were true candidates there would seem to be a flaw in 
Java dispatch.)

Would it be possible to relax these warnings and output volume for only cases 
where an exact to_java, etc. match can not be found?

{noformat}
#!/opt/bin/jruby -vw
#.hashdot.profile += jruby-shortlived

require 'test/unit'

class TestMultiWarning < Test::Unit::TestCase
  def test_with_string_builder
    b = Java::java.lang.StringBuilder.new
    b.append( "string: ".to_java(:string) )
    b.append( 0.5.to_java(:float) )
    assert_equal( "string: 0.5", b.to_s )
  end
end
{noformat}


{noformat}
% test_multi_warnings.rb
jruby 1.5.0.RC1 (ruby 1.8.7 patchlevel 249) (2010-04-18 0387574) (Java 
HotSpot(TM) Client VM 1.6.0_19) [i386-java]
Loaded suite ./test_multi_warnings
Started

./test_multi_warnings.rb:9 warning: multiple Java methods found for argument 
types ([Java::JavaLang::String]): [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.Appendable
java.lang.AbstractStringBuilder.append(java.lang.CharSequence) throws 
java.io.IOException, 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.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)]

./test_multi_warnings.rb:10 warning: multiple Java methods found for argument 
types ([Java::JavaLang::Float]): [public
java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(double), 
public java.lang.AbstractStringBuilder
java.lang.AbstractStringBuilder.append(float), 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.Appendable 
java.lang.AbstractStringBuilder.append(char) throws
java.io.IOException, public java.lang.AbstractStringBuilder 
java.lang.AbstractStringBuilder.append(long), public
java.lang.AbstractStringBuilder java.lang.AbstractStringBuilder.append(int), 
public java.lang.AbstractStringBuilder
java.lang.AbstractStringBuilder.append(char), public 
java.lang.AbstractStringBuilder
java.lang.AbstractStringBuilder.append(java.lang.Object), 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(long), public java.lang.StringBuilder 
java.lang.StringBuilder.append(int), public
java.lang.StringBuilder java.lang.StringBuilder.append(char), public 
java.lang.StringBuilder
java.lang.StringBuilder.append(java.lang.Object)] .  Finished in 0.293 seconds.

1 tests, 1 assertions, 0 failures, 0 errors
{noformat}


-- 
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