src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java
author chegar
Thu, 17 Oct 2019 20:54:25 +0100
branchdatagramsocketimpl-branch
changeset 58679 9c3209ff7550
parent 58678 9cf78a70fa4f
parent 58078 41f119856e7c
permissions -rw-r--r--
datagramsocketimpl-branch: merge with default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
52914
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
     1
/*
54965
e022b9cb35a5 8223723: j.l.c.MethodTypeDesc.dropParameterTypes​ throws the undocumented exception: IllegalArgumentException
vromero
parents: 52914
diff changeset
     2
 * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved.
52914
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
     4
 *
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    10
 *
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    15
 * accompanied this code).
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    16
 *
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    20
 *
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    23
 * questions.
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    24
 */
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    25
package java.lang.constant;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    26
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    27
import java.lang.invoke.MethodHandles;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    28
import java.lang.invoke.MethodType;
58078
41f119856e7c 8229785: MethodType::fromMethodDescriptorString should require security permission if loader is null
mchung
parents: 55502
diff changeset
    29
import java.security.AccessController;
41f119856e7c 8229785: MethodType::fromMethodDescriptorString should require security permission if loader is null
mchung
parents: 55502
diff changeset
    30
import java.security.PrivilegedAction;
52914
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    31
import java.util.Arrays;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    32
import java.util.List;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    33
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    34
import static java.util.Objects.requireNonNull;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    35
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    36
/**
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    37
 * A <a href="package-summary.html#nominal">nominal descriptor</a> for a
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    38
 * {@link MethodType}.  A {@linkplain MethodTypeDescImpl} corresponds to a
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    39
 * {@code Constant_MethodType_info} entry in the constant pool of a classfile.
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    40
 */
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    41
final class MethodTypeDescImpl implements MethodTypeDesc {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    42
    private final ClassDesc returnType;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    43
    private final ClassDesc[] argTypes;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    44
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    45
    /**
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    46
     * Constructs a {@linkplain MethodTypeDesc} with the specified return type
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    47
     * and parameter types
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    48
     *
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    49
     * @param returnType a {@link ClassDesc} describing the return type
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    50
     * @param argTypes {@link ClassDesc}s describing the parameter types
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    51
     */
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    52
    MethodTypeDescImpl(ClassDesc returnType, ClassDesc[] argTypes) {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    53
        this.returnType = requireNonNull(returnType);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    54
        this.argTypes = requireNonNull(argTypes);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    55
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    56
        for (ClassDesc cr : argTypes)
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    57
            if (cr.isPrimitive() && cr.descriptorString().equals("V"))
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    58
                throw new IllegalArgumentException("Void parameters not permitted");
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    59
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    60
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    61
    /**
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    62
     * Creates a {@linkplain MethodTypeDescImpl} given a method descriptor string.
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    63
     *
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    64
     * @param descriptor the method descriptor string
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    65
     * @return a {@linkplain MethodTypeDescImpl} describing the desired method type
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    66
     * @throws IllegalArgumentException if the descriptor string is not a valid
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    67
     * method descriptor
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    68
     * @jvms 4.3.3 Method Descriptors
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    69
     */
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    70
    static MethodTypeDescImpl ofDescriptor(String descriptor) {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    71
        requireNonNull(descriptor);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    72
        List<String> types = ConstantUtils.parseMethodDescriptor(descriptor);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    73
        ClassDesc[] paramTypes = types.stream().skip(1).map(ClassDesc::ofDescriptor).toArray(ClassDesc[]::new);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    74
        return new MethodTypeDescImpl(ClassDesc.ofDescriptor(types.get(0)), paramTypes);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    75
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    76
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    77
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    78
    public ClassDesc returnType() {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    79
        return returnType;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    80
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    81
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    82
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    83
    public int parameterCount() {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    84
        return argTypes.length;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    85
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    86
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    87
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    88
    public ClassDesc parameterType(int index) {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    89
        return argTypes[index];
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    90
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    91
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    92
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    93
    public List<ClassDesc> parameterList() {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    94
        return List.of(argTypes);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    95
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    96
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    97
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    98
    public ClassDesc[] parameterArray() {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
    99
        return argTypes.clone();
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   100
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   101
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   102
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   103
    public MethodTypeDesc changeReturnType(ClassDesc returnType) {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   104
        return MethodTypeDesc.of(returnType, argTypes);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   105
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   106
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   107
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   108
    public MethodTypeDesc changeParameterType(int index, ClassDesc paramType) {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   109
        ClassDesc[] newArgs = argTypes.clone();
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   110
        newArgs[index] = paramType;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   111
        return MethodTypeDesc.of(returnType, newArgs);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   112
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   113
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   114
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   115
    public MethodTypeDesc dropParameterTypes(int start, int end) {
54965
e022b9cb35a5 8223723: j.l.c.MethodTypeDesc.dropParameterTypes​ throws the undocumented exception: IllegalArgumentException
vromero
parents: 52914
diff changeset
   116
        if (start < 0 || start >= argTypes.length || end < 0 || end > argTypes.length || start > end)
52914
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   117
            throw new IndexOutOfBoundsException();
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   118
        ClassDesc[] newArgs = new ClassDesc[argTypes.length - (end - start)];
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   119
        System.arraycopy(argTypes, 0, newArgs, 0, start);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   120
        System.arraycopy(argTypes, end, newArgs, start, argTypes.length - end);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   121
        return MethodTypeDesc.of(returnType, newArgs);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   122
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   123
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   124
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   125
    public MethodTypeDesc insertParameterTypes(int pos, ClassDesc... paramTypes) {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   126
        if (pos < 0 || pos > argTypes.length)
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   127
            throw new IndexOutOfBoundsException(pos);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   128
        ClassDesc[] newArgs = new ClassDesc[argTypes.length + paramTypes.length];
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   129
        System.arraycopy(argTypes, 0, newArgs, 0, pos);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   130
        System.arraycopy(paramTypes, 0, newArgs, pos, paramTypes.length);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   131
        System.arraycopy(argTypes, pos, newArgs, pos+paramTypes.length, argTypes.length - pos);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   132
        return MethodTypeDesc.of(returnType, newArgs);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   133
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   134
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   135
    @Override
55502
bdaec4628ea9 8226709: MethodTypeDesc::resolveConstantDesc needs access check per the specification
vromero
parents: 54965
diff changeset
   136
    public MethodType resolveConstantDesc(MethodHandles.Lookup lookup) throws ReflectiveOperationException {
58078
41f119856e7c 8229785: MethodType::fromMethodDescriptorString should require security permission if loader is null
mchung
parents: 55502
diff changeset
   137
        MethodType mtype = AccessController.doPrivileged(new PrivilegedAction<>() {
41f119856e7c 8229785: MethodType::fromMethodDescriptorString should require security permission if loader is null
mchung
parents: 55502
diff changeset
   138
            @Override
41f119856e7c 8229785: MethodType::fromMethodDescriptorString should require security permission if loader is null
mchung
parents: 55502
diff changeset
   139
            public MethodType run() {
41f119856e7c 8229785: MethodType::fromMethodDescriptorString should require security permission if loader is null
mchung
parents: 55502
diff changeset
   140
                return MethodType.fromMethodDescriptorString(descriptorString(),
41f119856e7c 8229785: MethodType::fromMethodDescriptorString should require security permission if loader is null
mchung
parents: 55502
diff changeset
   141
                                                             lookup.lookupClass().getClassLoader());
41f119856e7c 8229785: MethodType::fromMethodDescriptorString should require security permission if loader is null
mchung
parents: 55502
diff changeset
   142
            }
41f119856e7c 8229785: MethodType::fromMethodDescriptorString should require security permission if loader is null
mchung
parents: 55502
diff changeset
   143
        });
41f119856e7c 8229785: MethodType::fromMethodDescriptorString should require security permission if loader is null
mchung
parents: 55502
diff changeset
   144
55502
bdaec4628ea9 8226709: MethodTypeDesc::resolveConstantDesc needs access check per the specification
vromero
parents: 54965
diff changeset
   145
        // let's check that the lookup has access to all the types in the method type
bdaec4628ea9 8226709: MethodTypeDesc::resolveConstantDesc needs access check per the specification
vromero
parents: 54965
diff changeset
   146
        lookup.accessClass(mtype.returnType());
bdaec4628ea9 8226709: MethodTypeDesc::resolveConstantDesc needs access check per the specification
vromero
parents: 54965
diff changeset
   147
        for (Class<?> paramType: mtype.parameterArray()) {
bdaec4628ea9 8226709: MethodTypeDesc::resolveConstantDesc needs access check per the specification
vromero
parents: 54965
diff changeset
   148
            lookup.accessClass(paramType);
bdaec4628ea9 8226709: MethodTypeDesc::resolveConstantDesc needs access check per the specification
vromero
parents: 54965
diff changeset
   149
        }
bdaec4628ea9 8226709: MethodTypeDesc::resolveConstantDesc needs access check per the specification
vromero
parents: 54965
diff changeset
   150
        return mtype;
52914
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   151
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   152
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   153
    /**
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   154
     * Returns {@code true} if this {@linkplain MethodTypeDescImpl} is
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   155
     * equal to another {@linkplain MethodTypeDescImpl}.  Equality is
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   156
     * determined by the two descriptors having equal return types and argument
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   157
     * types.
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   158
     *
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   159
     * @param o the {@code MethodTypeDescImpl} to compare to this
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   160
     *       {@code MethodTypeDescImpl}
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   161
     * @return {@code true} if the specified {@code MethodTypeDescImpl} is
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   162
     *      equals to this {@code MethodTypeDescImpl}.
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   163
     */
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   164
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   165
    public boolean equals(Object o) {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   166
        if (this == o) return true;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   167
        if (o == null || getClass() != o.getClass()) return false;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   168
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   169
        MethodTypeDescImpl constant = (MethodTypeDescImpl) o;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   170
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   171
        return returnType.equals(constant.returnType)
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   172
               && Arrays.equals(argTypes, constant.argTypes);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   173
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   174
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   175
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   176
    public int hashCode() {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   177
        int result = returnType.hashCode();
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   178
        result = 31 * result + Arrays.hashCode(argTypes);
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   179
        return result;
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   180
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   181
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   182
    @Override
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   183
    public String toString() {
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   184
        return String.format("MethodTypeDesc[%s]", displayDescriptor());
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   185
    }
4fa75d8ad418 8210031: implementation for JVM Constants API
vromero
parents:
diff changeset
   186
}