37 import jdk.experimental.bytecode.TypedCodeBuilder;
38 import jdk.experimental.value.MethodHandleBuilder.IsolatedMethodBuilder.IsolatedMethodPoolHelper;
39 import jdk.internal.misc.Unsafe;
40 import sun.security.action.GetPropertyAction;
41 import valhalla.shady.MinimalValueTypes_1_0;
42
43 import java.lang.invoke.MethodHandle;
44 import java.lang.invoke.MethodHandles.Lookup;
45 import java.lang.invoke.MethodType;
46 import java.util.*;
47 import java.util.function.Consumer;
48 import java.util.function.Function;
49
50 /**
51 * Utility class for building method handles.
52 */
53 public class MethodHandleBuilder {
54
55 static final Unsafe UNSAFE = Unsafe.getUnsafe();
56
57 static final boolean ENABLE_POOL_PATCHES;
58
59 static {
60 Properties props = GetPropertyAction.privilegedGetProperties();
61 ENABLE_POOL_PATCHES = Boolean.parseBoolean(
62 props.getProperty("valhalla.enablePoolPatches"));
63 }
64
65 public static MethodHandle loadCode(Lookup lookup, String name, MethodType type, Consumer<? super MethodHandleCodeBuilder<?>> builder) {
66 return loadCode(lookup, name, type.toMethodDescriptorString(), builder);
67 }
68
69 public static MethodHandle loadCode(Lookup lookup, String name, String type, Consumer<? super MethodHandleCodeBuilder<?>> builder) {
70 return loadCode(lookup, name, name, type, MethodHandleCodeBuilder::new,
71 clazz -> {
72 try {
73 return lookup.findStatic(clazz, name, MethodType.fromMethodDescriptorString(type, lookup.lookupClass().getClassLoader()));
74 } catch (ReflectiveOperationException ex) {
75 throw new IllegalStateException(ex);
76 }
77 },
|
37 import jdk.experimental.bytecode.TypedCodeBuilder;
38 import jdk.experimental.value.MethodHandleBuilder.IsolatedMethodBuilder.IsolatedMethodPoolHelper;
39 import jdk.internal.misc.Unsafe;
40 import sun.security.action.GetPropertyAction;
41 import valhalla.shady.MinimalValueTypes_1_0;
42
43 import java.lang.invoke.MethodHandle;
44 import java.lang.invoke.MethodHandles.Lookup;
45 import java.lang.invoke.MethodType;
46 import java.util.*;
47 import java.util.function.Consumer;
48 import java.util.function.Function;
49
50 /**
51 * Utility class for building method handles.
52 */
53 public class MethodHandleBuilder {
54
55 static final Unsafe UNSAFE = Unsafe.getUnsafe();
56
57 public static final boolean ENABLE_POOL_PATCHES;
58
59 static {
60 Properties props = GetPropertyAction.privilegedGetProperties();
61 ENABLE_POOL_PATCHES = Boolean.parseBoolean(
62 props.getProperty("valhalla.enablePoolPatches"));
63 }
64
65 public static MethodHandle loadCode(Lookup lookup, String name, MethodType type, Consumer<? super MethodHandleCodeBuilder<?>> builder) {
66 return loadCode(lookup, name, type.toMethodDescriptorString(), builder);
67 }
68
69 public static MethodHandle loadCode(Lookup lookup, String name, String type, Consumer<? super MethodHandleCodeBuilder<?>> builder) {
70 return loadCode(lookup, name, name, type, MethodHandleCodeBuilder::new,
71 clazz -> {
72 try {
73 return lookup.findStatic(clazz, name, MethodType.fromMethodDescriptorString(type, lookup.lookupClass().getClassLoader()));
74 } catch (ReflectiveOperationException ex) {
75 throw new IllegalStateException(ex);
76 }
77 },
|