All Downloads are FREE. Search and download functionalities are using the official Maven repository.

utest.framework.StackMarker.scala Maven / Gradle / Ivy

There is a newer version: 0.7.11
Show newest version
package utest.framework

/**
  * Wrapper-functions that can be used to mark parts of the callstack that are
  * meant to be filtered out later.
  */
object StackMarker {
  // Ask Scalac/Scala.js nicely to try and avoid inlining these two marker methods,
  // to make sure they don't disappear from the stack traces
  @noinline
  def dropInside[T](t: => T): T = t
  @noinline
  def dropOutside[T](t: => T): T = t
  def filterCallStack(stack: Seq[StackTraceElement]): Seq[StackTraceElement] = {
    val droppedInside = stack.indexWhere(x =>
      x.getClassName == "utest.framework.StackMarker$" && x.getMethodName == "dropInside"
    )

    val droppedOutside = stack.indexWhere(x =>
      x.getClassName == "utest.framework.StackMarker$" && x.getMethodName == "dropOutside"
    )

    val stack1 = stack.slice(
      droppedInside match {case -1 => 0 case n => n + 2},
      droppedOutside match {case -1 => stack.length case n => n}
    )

    val lastNonLMFIndex = stack1.lastIndexWhere(x =>
      !x.getClassName.contains("$$Lambda$")
    )

    if (lastNonLMFIndex < 0) stack1
    else stack1.take(lastNonLMFIndex + 1)
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy