viirya commented on a change in pull request #32413:
URL: https://github.com/apache/spark/pull/32413#discussion_r625368691



##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/objects/objects.scala
##########
@@ -236,7 +236,26 @@ case class StaticInvoke(
   override def children: Seq[Expression] = arguments
 
   lazy val argClasses = ScalaReflection.expressionJavaClasses(arguments)
-  @transient lazy val method = cls.getDeclaredMethod(functionName, argClasses 
: _*)
+  @transient lazy val method = {
+    try {
+      cls.getDeclaredMethod(functionName, argClasses: _*)
+    } catch {
+      case _: NoSuchMethodException =>
+        // For some cases, e.g. arg class is Object, `getMethod` cannot find 
the method.
+        // We look at function name + argument length
+        val m = cls.getDeclaredMethods.filter { m =>
+          m.getName == functionName && m.getParameterCount == arguments.length
+        }
+        if (m.isEmpty) {
+          sys.error(s"Couldn't find $functionName on $cls")
+        } else if (m.length > 1) {
+          // Ambiguous case, we don't know which method to choose, just fail 
it.
+          sys.error(s"Found ${m.length} $functionName on $cls")
+        } else {
+          m.head

Review comment:
       I guess we work best here to find a method for given method name and 
arguments. For a method taking Object, seems it works to take a String. Adding 
`isAssignableFrom` check may work for some cases to catch a failure earily. 
Although as I test, `isAssignableFrom` is unable to catch the case if argument 
class is int and parameter type is Object too.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to