< prev index next >

jdk/src/java.base/share/classes/jdk/experimental/value/MethodHandleBuilder.java

Print this page




  47 import java.util.*;
  48 import java.util.function.Consumer;
  49 import java.util.function.Function;
  50 
  51 /**
  52  * Utility class for building method handles.
  53  */
  54 public class MethodHandleBuilder {
  55 
  56     static final Unsafe UNSAFE = Unsafe.getUnsafe();
  57 
  58     public static final boolean ENABLE_POOL_PATCHES;
  59 
  60     static {
  61         Properties props = GetPropertyAction.privilegedGetProperties();
  62         ENABLE_POOL_PATCHES = Boolean.parseBoolean(
  63                 props.getProperty("valhalla.enablePoolPatches"));
  64     }
  65 
  66     public static MethodHandle loadCode(Lookup lookup, String name, MethodType type, Consumer<? super MethodHandleCodeBuilder<?>> builder) {
  67         return loadCode(lookup, name, type.toMethodDescriptorString(), builder);
  68     }
  69 
  70     public static MethodHandle loadCode(Lookup lookup, String name, String type, Consumer<? super MethodHandleCodeBuilder<?>> builder) {
  71         return loadCode(lookup, name, name, type, MethodHandleCodeBuilder::new,

  72                     clazz -> {
  73                         try {
  74                             return lookup.findStatic(clazz, name, MethodType.fromMethodDescriptorString(type, lookup.lookupClass().getClassLoader()));
  75                         } catch (ReflectiveOperationException ex) {
  76                             throw new IllegalStateException(ex);
  77                         }
  78                     },
  79                     builder);
  80     }
  81 
  82     protected static <Z, C extends CodeBuilder<Class<?>, String, byte[], ?>> Z loadCode(
  83             Lookup lookup, String className, String methodName, String type,
  84             Function<MethodBuilder<Class<?>, String, byte[]>, ? extends C> builderFunc,
  85             Function<Class<?>, Z> resFunc, Consumer<? super C> builder) {
  86 
  87         IsolatedMethodBuilder isolatedMethodBuilder = new IsolatedMethodBuilder(className, lookup);
  88         isolatedMethodBuilder
  89                 .withSuperclass(Object.class)
  90                 .withMajorVersion(52)
  91                 .withMinorVersion(0)
  92                 .withFlags(Flag.ACC_PUBLIC)
  93                 .withMethod(methodName, type, M ->
  94                         M.withFlags(Flag.ACC_STATIC, Flag.ACC_PUBLIC)




  47 import java.util.*;
  48 import java.util.function.Consumer;
  49 import java.util.function.Function;
  50 
  51 /**
  52  * Utility class for building method handles.
  53  */
  54 public class MethodHandleBuilder {
  55 
  56     static final Unsafe UNSAFE = Unsafe.getUnsafe();
  57 
  58     public static final boolean ENABLE_POOL_PATCHES;
  59 
  60     static {
  61         Properties props = GetPropertyAction.privilegedGetProperties();
  62         ENABLE_POOL_PATCHES = Boolean.parseBoolean(
  63                 props.getProperty("valhalla.enablePoolPatches"));
  64     }
  65 
  66     public static MethodHandle loadCode(Lookup lookup, String name, MethodType type, Consumer<? super MethodHandleCodeBuilder<?>> builder) {
  67         return loadCode(lookup, name, name, type, builder);
  68     }
  69 
  70     public static MethodHandle loadCode(Lookup lookup, String className, String methodName, MethodType type, Consumer<? super MethodHandleCodeBuilder<?>> builder) {
  71         String descriptor = type.toMethodDescriptorString();
  72         return loadCode(lookup, className, methodName, descriptor, MethodHandleCodeBuilder::new,
  73                     clazz -> {
  74                         try {
  75                             return lookup.findStatic(clazz, methodName, MethodType.fromMethodDescriptorString(descriptor, lookup.lookupClass().getClassLoader()));
  76                         } catch (ReflectiveOperationException ex) {
  77                             throw new IllegalStateException(ex);
  78                         }
  79                     },
  80                     builder);
  81     }
  82 
  83     protected static <Z, C extends CodeBuilder<Class<?>, String, byte[], ?>> Z loadCode(
  84             Lookup lookup, String className, String methodName, String type,
  85             Function<MethodBuilder<Class<?>, String, byte[]>, ? extends C> builderFunc,
  86             Function<Class<?>, Z> resFunc, Consumer<? super C> builder) {
  87 
  88         IsolatedMethodBuilder isolatedMethodBuilder = new IsolatedMethodBuilder(className, lookup);
  89         isolatedMethodBuilder
  90                 .withSuperclass(Object.class)
  91                 .withMajorVersion(52)
  92                 .withMinorVersion(0)
  93                 .withFlags(Flag.ACC_PUBLIC)
  94                 .withMethod(methodName, type, M ->
  95                         M.withFlags(Flag.ACC_STATIC, Flag.ACC_PUBLIC)


< prev index next >