Как узнать, кто и откуда вызвал метод? - PullRequest
0 голосов
/ 22 мая 2018

Я смотрю какой-то устаревший код в 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...

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать Thread.currentThread.getStackTrace() для достижения этого.

Более подробную информацию об этом можно найти в официальной документации .

Возвращает Array[StackTraceElement],где каждый StackTraceElement содержит класс, метод, имя файла и номер строки вызывающей стороны, упорядоченные сверху вниз по стеку вызовов.

Вы можете запустить следующий метод в оболочке Scala, чтобы получить представлениерезультата:

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
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...