You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Sean Qiu (JIRA)" <ji...@apache.org> on 2008/06/03 04:10:45 UTC

[jira] Resolved: (HARMONY-5854) [classlib][beans] java.beans.Statement.findMethod() throw java.lang.NoSuchMethodException: Cannot decide which method to call

     [ https://issues.apache.org/jira/browse/HARMONY-5854?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Sean Qiu resolved HARMONY-5854.
-------------------------------

    Resolution: Fixed

Patch has been integrated at r662622, please verify if it is fixed as you expected.

> [classlib][beans] java.beans.Statement.findMethod() throw java.lang.NoSuchMethodException: Cannot decide which method to call
> -----------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HARMONY-5854
>                 URL: https://issues.apache.org/jira/browse/HARMONY-5854
>             Project: Harmony
>          Issue Type: Bug
>          Components: Classlib
>    Affects Versions: 5.0M6
>            Reporter: Kevin Zhou
>            Assignee: Sean Qiu
>             Fix For: 5.0M6
>
>         Attachments: HARMONY-5854.diff
>
>   Original Estimate: 48h
>  Remaining Estimate: 48h
>
> Given the following scenario,
> public class TInspectorCluster {
> 	public interface Ancestor {
> 	}
> 	public interface Offspring extends Ancestor {
> 	}
> 	public interface Visitor<T> {
> 		public T visit(Ancestor o);
> 	}
> 	public static class StringInspector implements Visitor<String> {
> 		public String visit(Ancestor o) {
> 			System.out.println("Got the ancestor method")
> 			return null;
> 		}
> 		public String visit(Offspring o) {
> 			System.out.println("Got the offspring method")
> 			return null;
> 		}
> 	}
> }
> define the test as:
> public static void main(String[] args) throws Exception {
>         Ancestor ancestor = new Ancestor() {
>         };
>         new Statement(new StringInspector(), "visit", new Object[] { cat })
>                 .execute();
> }
> then it throws 
> java.lang.NoSuchMethodException: Cannot decide which method to call to match visit
> 	at java.beans.Statement.findMethod(Statement.java:376)
> 	at java.beans.Statement.invokeMethod(Statement.java:218)
> 	at java.beans.Statement.execute(Statement.java:18)
> I think the problem is caused by the java.beans.Statement.findMethod().
> If the target class has two candidate methods which have the identical signature (difference equals to zero) but different return type, it will throws this kind of exception.
> Thus, I think the cure is to insert a routine check of their return types. If they have the same return type, then throw the NoSuchMethodException.
> If not, check whether they are assignable to each other and reflect the specific one.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.