< prev index next >

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

Print this page

  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      *
< prev index next >