src/share/classes/com/sun/tools/javac/code/Types.java

changeset 1820
6b48ebae2569
parent 1755
ddb4a2bfcd82
child 1824
455be95bd1b5
     1.1 --- a/src/share/classes/com/sun/tools/javac/code/Types.java	Tue Jun 11 09:59:34 2013 +0100
     1.2 +++ b/src/share/classes/com/sun/tools/javac/code/Types.java	Fri Jun 14 16:25:09 2013 +0100
     1.3 @@ -951,6 +951,22 @@
     1.4      }
     1.5  
     1.6      /**
     1.7 +    * A polymorphic signature method (JLS SE 7, 8.4.1) is a method that
     1.8 +    * (i) is declared in the java.lang.invoke.MethodHandle class, (ii) takes
     1.9 +    * a single variable arity parameter (iii) whose declared type is Object[],
    1.10 +    * (iv) has a return type of Object and (v) is native.
    1.11 +    */
    1.12 +   public boolean isSignaturePolymorphic(MethodSymbol msym) {
    1.13 +       List<Type> argtypes = msym.type.getParameterTypes();
    1.14 +       return (msym.flags_field & NATIVE) != 0 &&
    1.15 +               msym.owner == syms.methodHandleType.tsym &&
    1.16 +               argtypes.tail.tail == null &&
    1.17 +               argtypes.head.hasTag(TypeTag.ARRAY) &&
    1.18 +               msym.type.getReturnType().tsym == syms.objectType.tsym &&
    1.19 +               ((ArrayType)argtypes.head).elemtype.tsym == syms.objectType.tsym;
    1.20 +   }
    1.21 +
    1.22 +    /**
    1.23       * Is t the same type as s?
    1.24       */
    1.25      public boolean isSameType(Type t, Type s) {

mercurial