RFR (S): 8000999: backport of JSR 292 to 7u

David Holmes david.holmes at oracle.com
Wed Oct 17 03:59:10 UTC 2012


Hi Christian,

Is this just a preliminary review request, as actual backport requests 
have to go to the jdk7u-dev mailing list for approval.

And are these all just bug fixes, or are there any API/spec changes 
involved?

David

On 17/10/2012 5:54 AM, Christian Thalinger wrote:
> http://cr.openjdk.java.net/~twisti/8000999
>
> 8000999: backport of JSR 292 to 7u
> Reviewed-by:
>
> This is an umbrella bug for these changes (which are backported in one
> changeset):
>
> 6983728: JSR 292 remove argument count limitations
> 7128512: Javadoc typo in java.lang.invoke.MethodHandle
> 7117167: Misc warnings in java.lang.invoke and sun.invoke.*
> 7129034: VM crash with a field setter method with a filterArguments
> 7087658: MethodHandles.Lookup.findVirtual is confused by interface methods that are multiply inherited
> 7127687: MethodType leaks memory due to interning
> 7023639: JSR 292 method handle invocation needs a fast path for compiled code
> 7188911: nightly failures after JSR 292 lazy method handle update (round 2)
> 7190416: JSR 292: typo in InvokerBytecodeGenerator.getConstantPoolSize
> 7191102: nightly failures after JSR 292 lazy method handle update (round 3)
> 7194612: api/java_lang/invoke/MethodHandles/Lookup/index.html#ExceptionsTests[findVirtualNSME] fails w/ -esa
> 7194662: JSR 292: PermuteArgsTest times out in nightly test runs
>
> The backport is just copying over the files from JDK 8.  That's why the webrev is so big and pretty useless.  The real changes between 8 and 7 are these:
>
> diff -Nur jdk8/src/share/classes/java/lang/invoke/MethodHandleStatics.java jdk7u/src/share/classes/java/lang/invoke/MethodHandleStatics.java
> --- jdk8/src/share/classes/java/lang/invoke/MethodHandleStatics.java    2012-10-15 12:21:52.806052959 -0700
> +++ jdk7u/src/share/classes/java/lang/invoke/MethodHandleStatics.java   2012-10-16 10:48:29.728257304 -0700
> @@ -94,10 +94,14 @@
>
>       // handy shared exception makers (they simplify the common case code)
>       /*non-public*/ static InternalError newInternalError(String message, Throwable cause) {
> -        return new InternalError(message, cause);
> +        InternalError e = new InternalError(message);
> +        e.initCause(cause);
> +        return e;
>       }
>       /*non-public*/ static InternalError newInternalError(Throwable cause) {
> -        return new InternalError(cause);
> +        InternalError e = new InternalError();
> +        e.initCause(cause);
> +        return e;
>       }
>       /*non-public*/ static RuntimeException newIllegalStateException(String message) {
>           return new IllegalStateException(message);
> diff -Nur jdk8/src/share/classes/sun/invoke/util/ValueConversions.java jdk7u/src/share/classes/sun/invoke/util/ValueConversions.java
> --- jdk8/src/share/classes/sun/invoke/util/ValueConversions.java        2012-10-16 10:49:36.081911283 -0700
> +++ jdk7u/src/share/classes/sun/invoke/util/ValueConversions.java       2012-10-16 10:48:19.626424849 -0700
> @@ -1211,9 +1211,13 @@
>
>       // handy shared exception makers (they simplify the common case code)
>       private static InternalError newInternalError(String message, Throwable cause) {
> -        return new InternalError(message, cause);
> +        InternalError e = new InternalError(message);
> +        e.initCause(cause);
> +        return e;
>       }
>       private static InternalError newInternalError(Throwable cause) {
> -        return new InternalError(cause);
> +        InternalError e = new InternalError();
> +        e.initCause(cause);
> +        return e;
>       }
>   }
> diff --git a/src/share/classes/sun/misc/Unsafe.java b/src/share/classes/sun/misc/Unsafe.java
> --- a/src/share/classes/sun/misc/Unsafe.java
> +++ b/src/share/classes/sun/misc/Unsafe.java
> @@ -678,6 +678,14 @@
>       public native Object staticFieldBase(Field f);
>
>       /**
> +     * Detect if the given class may need to be initialized. This is often
> +     * needed in conjunction with obtaining the static field base of a
> +     * class.
> +     * @return false only if a call to {@code ensureClassInitialized} would have no effect
> +     */
> +    public native boolean shouldBeInitialized(Class c);
> +
> +    /**
>        * Ensure the given class has been initialized. This is often
>        * needed in conjunction with obtaining the static field base of a
>        * class.
>



More information about the core-libs-dev mailing list