Re: Use Method.getParameterCount() where possible

2020-04-06 Thread Claes Redestad

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  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();




Re: Use Method.getParameterCount() where possible

2020-04-06 Thread Chris Hegarty
The changes look good to me.

-Chris.

> On 6 Apr 2020, at 11:44, Claes Redestad  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();



Re: Use Method.getParameterCount() where possible

2020-04-06 Thread Claes Redestad

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();




Use Method.getParameterCount() where possible

2020-04-03 Thread Christoph Dreis
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();