--- old/src/java.base/share/classes/jdk/experimental/value/MethodHandleBuilder.java 2017-06-22 00:48:32.596301276 +0100 +++ new/src/java.base/share/classes/jdk/experimental/value/MethodHandleBuilder.java 2017-06-22 00:48:32.448314164 +0100 @@ -37,17 +37,13 @@ import jdk.experimental.bytecode.TypedCodeBuilder; import jdk.experimental.value.MethodHandleBuilder.IsolatedMethodBuilder.IsolatedMethodPoolHelper; import jdk.internal.misc.Unsafe; -import sun.security.action.GetBooleanAction; +import sun.security.action.GetPropertyAction; import valhalla.shady.MinimalValueTypes_1_0; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles.Lookup; import java.lang.invoke.MethodType; -import java.security.AccessController; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.PropertyPermission; +import java.util.*; import java.util.function.Consumer; import java.util.function.Function; @@ -59,13 +55,14 @@ static final Unsafe UNSAFE = Unsafe.getUnsafe(); static final boolean ENABLE_POOL_PATCHES; + static final boolean MANGLE_CLASS_INFO; static { - final String key = "valhalla.enablePoolPatches"; - ENABLE_POOL_PATCHES = key == null ? false : - AccessController.doPrivileged( - new GetBooleanAction(key), null, - new PropertyPermission(key , "read")); + Properties props = GetPropertyAction.privilegedGetProperties(); + ENABLE_POOL_PATCHES = Boolean.parseBoolean( + props.getProperty("valhalla.enablePoolPatches")); + MANGLE_CLASS_INFO = Boolean.parseBoolean( + props.getProperty("valhalla.mangleClassInfo")); } public static MethodHandle loadCode(Lookup lookup, String name, MethodType type, Consumer builder) { @@ -214,7 +211,16 @@ } String from(Class c) { - String name = c == THIS_CLASS ? clazz : c.getName(); + String name; + boolean isValue = MinimalValueTypes_1_0.isValueType(c); + if (c == THIS_CLASS) { + //THIS_CLASS cannot be a DVT (by construction) - never mangle + name = clazz; + } else { + name = (isValue && MANGLE_CLASS_INFO) ? + ";Q" + c.getName() + ";" : //mangle DVT name + c.getName(); + } return name.replaceAll("\\.", "/"); }