Uploaded image for project: 'Harmony'
  1. Harmony
  2. HARMONY-5854

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

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 5.0M6
    • 5.0M6
    • Classlib
    • None
    • Moderate

    Description

      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.

      Attachments

        1. HARMONY-5854.diff
          19 kB
          Kevin Zhou

        Activity

          People

            qiuxiaox Sean Qiu
            zhoukevin Kevin Zhou
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - 48h
                48h
                Remaining:
                Remaining Estimate - 48h
                48h
                Logged:
                Time Spent - Not Specified
                Not Specified