This is an automated email from the ASF dual-hosted git repository. srowen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push: new 11c9838283e [SPARK-42803][CORE][SQL][ML] Use getParameterCount function instead of getParameterTypes.length 11c9838283e is described below commit 11c9838283e98d5ebe6ce13b85e26217494feef2 Author: narek_karapetian <narek.karapetia...@yandex.ru> AuthorDate: Fri Mar 17 21:46:25 2023 -0500 [SPARK-42803][CORE][SQL][ML] Use getParameterCount function instead of getParameterTypes.length ### What changes were proposed in this pull request? Since jdk1.8 there is an additional function in reflection API `getParameterCount`, it is better to use that function instead of `getParameterTypes.length` because `getParameterTypes` function makes a copy of the parameter types array every invocation: ```java public Class<?>[] getParameterTypes() { return parameterTypes.clone(); } ``` `getParameterCount` returns amount of parameters directly: ```java public int getParameterCount() { return parameterTypes.length; } ``` ### Why are the changes needed? To avoid redundant arrays creation. ### Does this PR introduce _any_ user-facing change? No ### How was this patch tested? By existing unit tests Closes #40422 from NarekDW/reflection-get-parameter-count. Authored-by: narek_karapetian <narek.karapetia...@yandex.ru> Signed-off-by: Sean Owen <sro...@gmail.com> --- .../src/main/java/org/apache/spark/util/kvstore/KVTypeInfo.java | 2 +- mllib/common/src/main/scala/org/apache/spark/ml/param/params.scala | 2 +- .../main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/common/kvstore/src/main/java/org/apache/spark/util/kvstore/KVTypeInfo.java b/common/kvstore/src/main/java/org/apache/spark/util/kvstore/KVTypeInfo.java index a15d07cf599..bf7c256fc94 100644 --- a/common/kvstore/src/main/java/org/apache/spark/util/kvstore/KVTypeInfo.java +++ b/common/kvstore/src/main/java/org/apache/spark/util/kvstore/KVTypeInfo.java @@ -56,7 +56,7 @@ public class KVTypeInfo { KVIndex idx = m.getAnnotation(KVIndex.class); if (idx != null) { checkIndex(idx, indices); - Preconditions.checkArgument(m.getParameterTypes().length == 0, + Preconditions.checkArgument(m.getParameterCount() == 0, "Annotated method %s::%s should not have any parameters.", type.getName(), m.getName()); m.setAccessible(true); indices.put(idx.value(), idx); diff --git a/mllib/common/src/main/scala/org/apache/spark/ml/param/params.scala b/mllib/common/src/main/scala/org/apache/spark/ml/param/params.scala index 52840e04eae..b818be30583 100644 --- a/mllib/common/src/main/scala/org/apache/spark/ml/param/params.scala +++ b/mllib/common/src/main/scala/org/apache/spark/ml/param/params.scala @@ -652,7 +652,7 @@ trait Params extends Identifiable with Serializable { methods.filter { m => Modifier.isPublic(m.getModifiers) && classOf[Param[_]].isAssignableFrom(m.getReturnType) && - m.getParameterTypes.isEmpty + m.getParameterCount == 0 }.sortBy(_.getName) .map(m => m.invoke(this).asInstanceOf[Param[_]]) } diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala index b90fc585a09..7468d895cff 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/trees/TreeNode.scala @@ -786,7 +786,7 @@ abstract class TreeNode[BaseType <: TreeNode[BaseType]] extends Product with Tre } // Skip no-arg constructors that are just there for kryo. - val ctors = allCtors.filter(allowEmptyArgs || _.getParameterTypes.size != 0) + val ctors = allCtors.filter(allowEmptyArgs || _.getParameterCount != 0) if (ctors.isEmpty) { throw QueryExecutionErrors.constructorNotFoundError(nodeName) } @@ -796,7 +796,7 @@ abstract class TreeNode[BaseType <: TreeNode[BaseType]] extends Product with Tre newArgs ++ otherCopyArgs } val defaultCtor = ctors.find { ctor => - if (ctor.getParameterTypes.length != allArgs.length) { + if (ctor.getParameterCount != allArgs.length) { false } else if (allArgs.contains(null)) { // if there is a `null`, we can't figure out the class, therefore we should just fallback @@ -806,7 +806,7 @@ abstract class TreeNode[BaseType <: TreeNode[BaseType]] extends Product with Tre val argsArray: Array[Class[_]] = allArgs.map(_.getClass) ClassUtils.isAssignable(argsArray, ctor.getParameterTypes, true /* autoboxing */) } - }.getOrElse(ctors.maxBy(_.getParameterTypes.length)) // fall back to older heuristic + }.getOrElse(ctors.maxBy(_.getParameterCount)) // fall back to older heuristic try { CurrentOrigin.withOrigin(origin) { --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org