Github user viirya commented on a diff in the pull request:
https://github.com/apache/spark/pull/21276#discussion_r194630048
--- Diff: core/src/main/scala/org/apache/spark/util/Utils.scala ---
@@ -2715,6 +2716,62 @@ private[spark] object Utils extends Logging {
HashCodes.fromBytes(secretBytes).toString()
}
+ /**
+ * Safer than Class obj's getSimpleName which may throw Malformed class
name error in scala.
+ * This method mimicks scalatest's getSimpleNameOfAnObjectsClass.
+ */
+ def getSimpleName(cls: Class[_]): String = {
+ try {
+ return cls.getSimpleName
+ } catch {
+ case err: InternalError => return
stripDollars(stripPackages(cls.getName))
+ }
+ }
+
+ /**
+ * Remove the packages from full qualified class name
+ */
+ private def stripPackages(fullyQualifiedName: String): String = {
+ fullyQualifiedName.split("\\.").takeRight(1)(0)
+ }
+
+ /**
+ * Remove trailing dollar signs from qualified class name,
+ * and return the trailing part after the last dollar sign in the middle
+ */
+ private def stripDollars(s: String): String = {
+ val lastDollarIndex = s.lastIndexOf('$')
+ if (lastDollarIndex < s.length - 1) {
+ // The last char is not a dollar sign
+ if (lastDollarIndex == -1 || !s.contains("$iw")) {
+ // The name does not have dollar sign or is not an intepreter
+ // generated class, so we should return the full string
+ s
+ } else {
+ // The class name is intepreter generated,
+ // return the part after the last dollar sign
+ // This is the same behavior as getClass.getSimpleName
+ s.substring(lastDollarIndex + 1)
+ }
+ }
+ else {
--- End diff --
style:
```scala
if (...) {
} else {
}
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]