Re: Use Method.getParameterCount() where possible
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
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
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
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();