Detects type checks and type casts in a series of if-else statements and replaces it by pattern matching.

Before:

  val value = 0
  if (value.isInstanceOf[Int]) {
    val x = value.asInstanceOf[Int] + 1
    val y = value.asInstanceOf[Int] + 2
  } else if (value.isInstanceOf[Long]) {
    val x = value.asInstanceOf[Long]
    println(x)
  }

After:

  val value = 0
  value match {
    case i: Int =>
      val x = i + 1
      val y = i + 2
    case x: Long =>
      println(x)
    case _ =>
  }