Use Method.getParameterCount() where possible
Claes Redestad
claes.redestad at oracle.com
Mon Apr 6 11:49:24 UTC 2020
Thanks, pushed as https://bugs.openjdk.java.net/browse/JDK-8242208
/Claes
On 2020-04-06 13:38, Chris Hegarty wrote:
> The changes look good to me.
>
> -Chris.
>
>> On 6 Apr 2020, at 11:44, Claes Redestad <claes.redestad at oracle.com> wrote:
>>
>> Hi,
>>
>> looks good and trivial to me. I'll sponsor.
>>
>> /Claes
>>
>> (I hope we can wrap up https://bugs.openjdk.java.net/browse/JDK-8029019
>> some day, soon)
>>
>> On 2020-04-03 12:19, Christoph Dreis wrote:
>>> Hi,
>>> I noticed that the JDK itself still uses Method.getParameterTypes().length in a couple of places.
>>> This could be replaced with Method.getParameterCount() to avoid unnecessary cloning overhead.
>>> While this is often optimized away, I guess it's still good to not rely on that. Additionally, it's a little more concise to read.
>>> If you think this is worthwhile, I would need someone to sponsor that tiny change.
>>> P.S.: There is another occurrence in ForkJoinTask where I wasn't sure if I should change that, because it's usually changed under the JSR166 umbrella afaik.
>>> Cheers,
>>> Christoph
>>> ==== PATCH ====
>>> diff --git a/src/java.base/share/classes/java/lang/invoke/MethodHandleProxies.java b/src/java.base/share/classes/java/lang/invoke/MethodHandleProxies.java
>>> --- a/src/java.base/share/classes/java/lang/invoke/MethodHandleProxies.java
>>> +++ b/src/java.base/share/classes/java/lang/invoke/MethodHandleProxies.java
>>> @@ -276,13 +276,13 @@
>>> switch (m.getName()) {
>>> case "toString":
>>> return (m.getReturnType() == String.class
>>> - && m.getParameterTypes().length == 0);
>>> + && m.getParameterCount() == 0);
>>> case "hashCode":
>>> return (m.getReturnType() == int.class
>>> - && m.getParameterTypes().length == 0);
>>> + && m.getParameterCount() == 0);
>>> case "equals":
>>> return (m.getReturnType() == boolean.class
>>> - && m.getParameterTypes().length == 1
>>> + && m.getParameterCount() == 1
>>> && m.getParameterTypes()[0] == Object.class);
>>> }
>>> return false;
>>> diff --git a/src/java.base/share/classes/java/lang/reflect/Executable.java b/src/java.base/share/classes/java/lang/reflect/Executable.java
>>> --- a/src/java.base/share/classes/java/lang/reflect/Executable.java
>>> +++ b/src/java.base/share/classes/java/lang/reflect/Executable.java
>>> @@ -378,7 +378,7 @@
>>> private void verifyParameters(final Parameter[] parameters) {
>>> final int mask = Modifier.FINAL | Modifier.SYNTHETIC | Modifier.MANDATED;
>>> - if (getParameterTypes().length != parameters.length)
>>> + if (getParameterCount() != parameters.length)
>>> throw new MalformedParametersException("Wrong number of parameters in MethodParameters attribute");
>>> for (Parameter parameter : parameters) {
>>> diff --git a/src/java.base/share/classes/sun/reflect/annotation/AnnotationType.java b/src/java.base/share/classes/sun/reflect/annotation/AnnotationType.java
>>> --- a/src/java.base/share/classes/sun/reflect/annotation/AnnotationType.java
>>> +++ b/src/java.base/share/classes/sun/reflect/annotation/AnnotationType.java
>>> @@ -121,7 +121,7 @@
>>> if (Modifier.isPublic(method.getModifiers()) &&
>>> Modifier.isAbstract(method.getModifiers()) &&
>>> !method.isSynthetic()) {
>>> - if (method.getParameterTypes().length != 0) {
>>> + if (method.getParameterCount() != 0) {
>>> throw new IllegalArgumentException(method + " has params");
>>> }
>>> String name = method.getName();
>
More information about the core-libs-dev
mailing list