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

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