我在Scala中查看一些遗留代码并查看方法:
private def method1 (value: AnyRef, fieldName: String, qualifiedFieldName: String, fieldType: Type, schema: Schema)
(implicit mode: ParseMode): Any = {...}
如何查看谁(或谁可以调用)此方法(从哪里)? (在IDE / InteliJ中跟踪很好 - 只是想'跟踪'谁正在调用方法以了解代码路由)..
在方法名称(方法体内)之后的理想print line
将是:
This method is being called from this class etc...
答案 0 :(得分:2)
您可以使用Thread.currentThread.getStackTrace()
来实现这一目标。
您可以在the official documentation上找到有关该信息的更多信息。
返回Array[StackTraceElement]
,其中每个StackTraceElement
包含调用者的类,方法,文件名和行号,从调用堆栈的顶部到底部排序。
您可以在Scala shell中运行以下方法以了解结果:
def stackTraceInfo(thread: Thread): Seq[String] =
thread.getStackTrace.map(ste => s"${ste.getClassName}.${ste.getMethodName}")
例如可以产生如下内容:
scala> stackTraceInfo(Thread.currentThread).foreach(println)
java.lang.Thread.getStackTrace
$line7.$read$$iw$$iw$.stackTraceInfo
$line10.$read$$iw$$iw$.<init>
$line10.$read$$iw$$iw$.<clinit>
$line10.$eval$.$print$lzycompute
$line10.$eval$.$print
$line10.$eval.$print
...