Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-7034316

MethodType.hasWrappers() returns 'true' for method types like '()Comparable' or '()Deprecated'

XMLWordPrintable

      Please see the minimized test below to reproduce the issue.

      Minimized test:
      ===============
      $ cat test.java
      import java.lang.invoke.MethodType;
      import static java.lang.invoke.MethodType.*;

      public class test {

          private final static Class[] RETURN_TYPES = {
              void.class, boolean.class, byte.class, char.class, short.class,
              int.class, long.class, float.class, double.class,
              Void.class, Boolean.class, Byte.class, Character.class, Short.class,
              Integer.class, Long.class, Float.class, Double.class,
              Enum.class, Comparable.class, Thread.State.class, Deprecated.class,
              boolean[].class, byte[].class, char[].class, short[].class,
              int[].class, long[].class, float[].class, double[].class,
              Void[].class, Boolean[].class, Byte[].class, Character[].class, Short[].class,
              Integer[].class, Long[].class, Float[].class, Double[].class,
              Enum[].class, Comparable[].class, Thread.State[].class, Deprecated[].class
          };

          public static void main(String[] args) {
              for (int i = 0; i < RETURN_TYPES.length; i++) {
                  Class rtype = RETURN_TYPES[i];
                  MethodType mt = methodType(rtype);
                  
                  if (isWrapperType(rtype) != mt.hasWrappers()) {
                      System.out.println("hasWrappers() failed for method type "
                              + mt + ": expected \"" + isWrapperType(rtype) + "\", "
                              + "was given \"" + mt.hasWrappers() + "\"");
                  }
              }
          }

          private static boolean isWrapperType(final Class cl) {
              if (cl.equals(Void.class) || cl.equals(Boolean.class)
                      || cl.equals(Byte.class) || cl.equals(Character.class)
                      || cl.equals(Short.class) || cl.equals(Integer.class)
                      || cl.equals(Long.class) || cl.equals(Float.class)
                      || cl.equals(Double.class)) {
                  return true;
              }
              return false;
          }
      }

      $ java -showversion -verify -XX:+UnlockExperimentalVMOptions -XX:+EnableInvokeDynamic test
      java version "1.7.0-ea"
      Java(TM) SE Runtime Environment (build 1.7.0-ea-b136)
      Java HotSpot(TM) Server VM (build 21.0-b06, mixed mode)

      hasWrappers() failed for method type ()Comparable: expected "false", was given "true"
      hasWrappers() failed for method type ()Deprecated: expected "false", was given "true"

            jrose John Rose
            ygaevsky Yuri Gaevsky (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: