'classOf' 表达式如何在 scala AST 中表示

How is 'classOf' expression represented in scala AST

我是 Scala AST 概念的新手。

我需要遍历包含如下表达式的 Scala 代码树: classOf[org.apache.commons.lang3.ArrayUtils]

我需要能够在 scala.reflect.internal.Trees.Tree 上进行模式匹配时识别这种情况。

例如我知道它不是case _:Apply

要成功匹配此表达式,正确的模式是什么?

一个classOf[C]表示为一个Literal(value),其中value.tag == ClazzTag,而value.typeValue是一个Type表示C。您可以将其匹配为:

case Literal(value) if value.tag == ClazzTag =>
  val tpe = value.typeValue
  // do something with `tpe`

有关 real-world 示例,请参阅 https://github.com/scala-js/scala-js/blob/ec5b328330276b9feb20cccadd75e19d27e887d3/compiler/src/main/scala/org/scalajs/nscplugin/GenJSCode.scala#L2043