24 */
25
26 package java.lang.invoke;
27
28 import jdk.internal.access.JavaLangInvokeAccess;
29 import jdk.internal.access.SharedSecrets;
30 import jdk.internal.constant.ClassOrInterfaceDescImpl;
31 import jdk.internal.constant.ConstantUtils;
32 import jdk.internal.constant.MethodTypeDescImpl;
33 import jdk.internal.foreign.abi.NativeEntryPoint;
34 import jdk.internal.reflect.CallerSensitive;
35 import jdk.internal.reflect.Reflection;
36 import jdk.internal.vm.annotation.AOTSafeClassInitializer;
37 import jdk.internal.vm.annotation.ForceInline;
38 import jdk.internal.vm.annotation.Hidden;
39 import jdk.internal.vm.annotation.Stable;
40 import sun.invoke.util.ValueConversions;
41 import sun.invoke.util.VerifyType;
42 import sun.invoke.util.Wrapper;
43
44 import java.lang.classfile.ClassFile;
45 import java.lang.constant.ClassDesc;
46 import java.lang.foreign.MemoryLayout;
47 import java.lang.invoke.MethodHandles.Lookup;
48 import java.lang.reflect.Array;
49 import java.lang.reflect.Constructor;
50 import java.lang.reflect.Field;
51 import java.nio.ByteOrder;
52 import java.util.Arrays;
53 import java.util.Collections;
54 import java.util.HashMap;
55 import java.util.Iterator;
56 import java.util.List;
57 import java.util.Map;
58 import java.util.Objects;
59 import java.util.concurrent.ConcurrentHashMap;
60 import java.util.function.Function;
61 import java.util.stream.Stream;
62
63 import static java.lang.classfile.ClassFile.*;
1632 return null;
1633 }
1634 }
1635
1636 @Override
1637 public MethodHandle reflectiveInvoker(Class<?> caller) {
1638 Objects.requireNonNull(caller);
1639 return BindCaller.reflectiveInvoker(caller);
1640 }
1641
1642 @Override
1643 public Class<?>[] exceptionTypes(MethodHandle handle) {
1644 return VarHandles.exceptionTypes(handle);
1645 }
1646
1647 @Override
1648 public MethodHandle serializableConstructor(Class<?> decl, Constructor<?> ctorToCall) throws IllegalAccessException {
1649 return IMPL_LOOKUP.serializableConstructor(decl, ctorToCall);
1650 }
1651
1652 });
1653 }
1654
1655 /** Result unboxing: ValueConversions.unbox() OR ValueConversions.identity() OR ValueConversions.ignore(). */
1656 private static MethodHandle unboxResultHandle(Class<?> returnType) {
1657 if (returnType.isPrimitive()) {
1658 if (returnType == void.class) {
1659 return ValueConversions.ignore();
1660 } else {
1661 Wrapper w = Wrapper.forPrimitiveType(returnType);
1662 return ValueConversions.unboxExact(w);
1663 }
1664 } else {
1665 return MethodHandles.identity(Object.class);
1666 }
1667 }
1668
1669 /**
1670 * Assembles a loop method handle from the given handles and type information.
1671 *
|
24 */
25
26 package java.lang.invoke;
27
28 import jdk.internal.access.JavaLangInvokeAccess;
29 import jdk.internal.access.SharedSecrets;
30 import jdk.internal.constant.ClassOrInterfaceDescImpl;
31 import jdk.internal.constant.ConstantUtils;
32 import jdk.internal.constant.MethodTypeDescImpl;
33 import jdk.internal.foreign.abi.NativeEntryPoint;
34 import jdk.internal.reflect.CallerSensitive;
35 import jdk.internal.reflect.Reflection;
36 import jdk.internal.vm.annotation.AOTSafeClassInitializer;
37 import jdk.internal.vm.annotation.ForceInline;
38 import jdk.internal.vm.annotation.Hidden;
39 import jdk.internal.vm.annotation.Stable;
40 import sun.invoke.util.ValueConversions;
41 import sun.invoke.util.VerifyType;
42 import sun.invoke.util.Wrapper;
43
44 import java.lang.classfile.ClassBuilder;
45 import java.lang.classfile.ClassFile;
46 import java.lang.constant.ClassDesc;
47 import java.lang.foreign.MemoryLayout;
48 import java.lang.invoke.MethodHandles.Lookup;
49 import java.lang.reflect.Array;
50 import java.lang.reflect.Constructor;
51 import java.lang.reflect.Field;
52 import java.nio.ByteOrder;
53 import java.util.Arrays;
54 import java.util.Collections;
55 import java.util.HashMap;
56 import java.util.Iterator;
57 import java.util.List;
58 import java.util.Map;
59 import java.util.Objects;
60 import java.util.concurrent.ConcurrentHashMap;
61 import java.util.function.Function;
62 import java.util.stream.Stream;
63
64 import static java.lang.classfile.ClassFile.*;
1633 return null;
1634 }
1635 }
1636
1637 @Override
1638 public MethodHandle reflectiveInvoker(Class<?> caller) {
1639 Objects.requireNonNull(caller);
1640 return BindCaller.reflectiveInvoker(caller);
1641 }
1642
1643 @Override
1644 public Class<?>[] exceptionTypes(MethodHandle handle) {
1645 return VarHandles.exceptionTypes(handle);
1646 }
1647
1648 @Override
1649 public MethodHandle serializableConstructor(Class<?> decl, Constructor<?> ctorToCall) throws IllegalAccessException {
1650 return IMPL_LOOKUP.serializableConstructor(decl, ctorToCall);
1651 }
1652
1653 @Override
1654 public CallSite metafactoryInternal(Lookup caller, String interfaceMethodName, MethodType factoryType,
1655 MethodType interfaceMethodType, MethodHandle implementation,
1656 MethodType dynamicMethodType, Function<ClassBuilder, Object> finisher) throws LambdaConversionException {
1657 return LambdaMetafactory.metafactoryInternal(caller, interfaceMethodName, factoryType,
1658 interfaceMethodType, implementation, dynamicMethodType, finisher);
1659 }
1660
1661 @Override
1662 public CallSite altMetafactoryInternal(Lookup caller, String interfaceMethodName, MethodType factoryType,
1663 Function<ClassBuilder, Object> finisher, Object... args) throws LambdaConversionException {
1664 return LambdaMetafactory.altMetafactoryInternal(caller, interfaceMethodName, factoryType, finisher, args);
1665 }
1666 });
1667 }
1668
1669 /** Result unboxing: ValueConversions.unbox() OR ValueConversions.identity() OR ValueConversions.ignore(). */
1670 private static MethodHandle unboxResultHandle(Class<?> returnType) {
1671 if (returnType.isPrimitive()) {
1672 if (returnType == void.class) {
1673 return ValueConversions.ignore();
1674 } else {
1675 Wrapper w = Wrapper.forPrimitiveType(returnType);
1676 return ValueConversions.unboxExact(w);
1677 }
1678 } else {
1679 return MethodHandles.identity(Object.class);
1680 }
1681 }
1682
1683 /**
1684 * Assembles a loop method handle from the given handles and type information.
1685 *
|