Use Method.getParameterCount() where possible

Chris Hegarty chris.hegarty at oracle.com
Mon Apr 6 11:38:51 UTC 2020


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