[10] RFR 8187254 Rearrange private MethodType constructors

mandy chung mandy.chung at oracle.com
Mon Dec 11 22:24:13 UTC 2017


It looks okay to me.

Mandy

On 12/11/17 2:02 PM, Paul Sandoz wrote:
> Hi,
>
> Please review this small fix to collapse the two private constructors of MethodType into one. This consolidates all the copying/validation logic into the factory method makeImpl.
>
> Thanks,
> Paul.
>
> diff -r 77866b9147be src/java.base/share/classes/java/lang/invoke/MethodType.java
> --- a/src/java.base/share/classes/java/lang/invoke/MethodType.java	Mon Dec 11 10:50:17 2017 -0800
> +++ b/src/java.base/share/classes/java/lang/invoke/MethodType.java	Mon Dec 11 14:00:09 2017 -0800
> @@ -105,23 +105,10 @@
>       private @Stable String methodDescriptor;  // cache for toMethodDescriptorString
>
>       /**
> -     * Check the given parameters for validity and store them into the final fields.
> +     * Constructor that performs no copying or validation.
> +     * Should only be called from the factory method makeImpl
>        */
> -    private MethodType(Class<?> rtype, Class<?>[] ptypes, boolean trusted) {
> -        checkRtype(rtype);
> -        checkPtypes(ptypes);
> -        this.rtype = rtype;
> -        // defensively copy the array passed in by the user
> -        this.ptypes = trusted ? ptypes : Arrays.copyOf(ptypes, ptypes.length);
> -    }
> -
> -    /**
> -     * Construct a temporary unchecked instance of MethodType for use only as a key to the intern table.
> -     * Does not check the given parameters for validity, and must discarded (if untrusted) or checked
> -     * (if trusted) after it has been used as a searching key.
> -     * The parameters are reversed for this constructor, so that it is not accidentally used.
> -     */
> -    private MethodType(Class<?>[] ptypes, Class<?> rtype) {
> +    private MethodType(Class<?> rtype, Class<?>[] ptypes) {
>           this.rtype = rtype;
>           this.ptypes = ptypes;
>       }
> @@ -308,18 +295,21 @@
>           if (ptypes.length == 0) {
>               ptypes = NO_PTYPES; trusted = true;
>           }
> -        MethodType primordialMT = new MethodType(ptypes, rtype);
> +        MethodType primordialMT = new MethodType(rtype, ptypes);
>           MethodType mt = internTable.get(primordialMT);
>           if (mt != null)
>               return mt;
>
>           // promote the object to the Real Thing, and reprobe
> +        MethodType.checkRtype(rtype);
>           if (trusted) {
> -            MethodType.checkRtype(rtype);
>               MethodType.checkPtypes(ptypes);
>               mt = primordialMT;
>           } else {
> -            mt = new MethodType(rtype, ptypes, false);
> +            // Make defensive copy then validate
> +            ptypes = Arrays.copyOf(ptypes, ptypes.length);
> +            MethodType.checkPtypes(ptypes);
> +            mt = new MethodType(rtype, ptypes);
>           }
>           mt.form = MethodTypeForm.findForm(mt);
>           return internTable.add(mt);



More information about the core-libs-dev mailing list