< prev index next >

src/java.base/share/classes/java/lang/invoke/MethodHandleImpl.java

Print this page

1628                     return null;
1629                 }
1630             }
1631 
1632             @Override
1633             public MethodHandle reflectiveInvoker(Class<?> caller) {
1634                 Objects.requireNonNull(caller);
1635                 return BindCaller.reflectiveInvoker(caller);
1636             }
1637 
1638             @Override
1639             public Class<?>[] exceptionTypes(MethodHandle handle) {
1640                 return VarHandles.exceptionTypes(handle);
1641             }
1642 
1643             @Override
1644             public MethodHandle serializableConstructor(Class<?> decl, Constructor<?> ctorToCall) throws IllegalAccessException {
1645                 return IMPL_LOOKUP.serializableConstructor(decl, ctorToCall);
1646             }
1647 













1648         });
1649     }
1650 
1651     /** Result unboxing: ValueConversions.unbox() OR ValueConversions.identity() OR ValueConversions.ignore(). */
1652     private static MethodHandle unboxResultHandle(Class<?> returnType) {
1653         if (returnType.isPrimitive()) {
1654             if (returnType == void.class) {
1655                 return ValueConversions.ignore();
1656             } else {
1657                 Wrapper w = Wrapper.forPrimitiveType(returnType);
1658                 return ValueConversions.unboxExact(w);
1659             }
1660         } else {
1661             return MethodHandles.identity(Object.class);
1662         }
1663     }
1664 
1665     /**
1666      * Assembles a loop method handle from the given handles and type information.
1667      *

1628                     return null;
1629                 }
1630             }
1631 
1632             @Override
1633             public MethodHandle reflectiveInvoker(Class<?> caller) {
1634                 Objects.requireNonNull(caller);
1635                 return BindCaller.reflectiveInvoker(caller);
1636             }
1637 
1638             @Override
1639             public Class<?>[] exceptionTypes(MethodHandle handle) {
1640                 return VarHandles.exceptionTypes(handle);
1641             }
1642 
1643             @Override
1644             public MethodHandle serializableConstructor(Class<?> decl, Constructor<?> ctorToCall) throws IllegalAccessException {
1645                 return IMPL_LOOKUP.serializableConstructor(decl, ctorToCall);
1646             }
1647 
1648             @Override
1649             public CallSite metafactoryInternal(Lookup caller, String interfaceMethodName, MethodType factoryType,
1650                                                 MethodType interfaceMethodType, MethodHandle implementation,
1651                                                 MethodType dynamicMethodType, ReflectableLambdaInfo reflectableLambdaInfo) throws LambdaConversionException {
1652                 return LambdaMetafactory.metafactoryInternal(caller, interfaceMethodName, factoryType,
1653                         interfaceMethodType, implementation, dynamicMethodType, reflectableLambdaInfo);
1654             }
1655 
1656             @Override
1657             public CallSite altMetafactoryInternal(Lookup caller, String interfaceMethodName, MethodType factoryType,
1658                                                    ReflectableLambdaInfo reflectableLambdaInfo, Object... args) throws LambdaConversionException {
1659                 return LambdaMetafactory.altMetafactoryInternal(caller, interfaceMethodName, factoryType, reflectableLambdaInfo, args);
1660             }
1661         });
1662     }
1663 
1664     /** Result unboxing: ValueConversions.unbox() OR ValueConversions.identity() OR ValueConversions.ignore(). */
1665     private static MethodHandle unboxResultHandle(Class<?> returnType) {
1666         if (returnType.isPrimitive()) {
1667             if (returnType == void.class) {
1668                 return ValueConversions.ignore();
1669             } else {
1670                 Wrapper w = Wrapper.forPrimitiveType(returnType);
1671                 return ValueConversions.unboxExact(w);
1672             }
1673         } else {
1674             return MethodHandles.identity(Object.class);
1675         }
1676     }
1677 
1678     /**
1679      * Assembles a loop method handle from the given handles and type information.
1680      *
< prev index next >