summaryrefslogtreecommitdiff
path: root/javalanglib/src/main/scala/java/lang/StackTraceElement.scala
blob: cc87aecf9f78ee6c086d7a3394e1756d3412a790 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package java.lang

import scala.scalajs.js

final class StackTraceElement(declaringClass: String, methodName: String,
    fileName: String, lineNumber: Int) extends AnyRef with java.io.Serializable {

  def getFileName(): String = fileName
  def getLineNumber(): Int = lineNumber
  def getClassName(): String = declaringClass
  def getMethodName(): String = methodName
  def isNativeMethod(): scala.Boolean = false

  override def equals(that: Any): scala.Boolean = that match {
    case that: StackTraceElement =>
      (getFileName == that.getFileName) &&
      (getLineNumber == that.getLineNumber) &&
      (getClassName == that.getClassName) &&
      (getMethodName == that.getMethodName)
    case _ =>
      false
  }

  override def toString(): String = {
    var result = ""
    if (declaringClass != "<jscode>")
      result += declaringClass + "."
    result += methodName
    if (fileName eq null) {
      if (isNativeMethod)
        result += "(Native Method)"
      else
        result += "(Unknown Source)"
    } else {
      result += s"($fileName"
      if (lineNumber >= 0) {
        result += s":$lineNumber"
        if (columnNumber >= 0)
          result += s":$columnNumber"
      }
      result += ")"
    }
    result
  }

  override def hashCode(): Int = {
    declaringClass.hashCode() ^ methodName.hashCode()
  }

  private def columnNumber: Int = {
    val rawNum = this.asInstanceOf[js.Dynamic].columnNumber
    if (!(!rawNum)) rawNum.asInstanceOf[Int]
    else -1
  }
}