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