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 *
|