[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