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

org.opalj.br.LineNumberTable.scala Maven / Gradle / Ivy

The newest version!
/* BSD 2-Clause License - see OPAL/LICENSE for details. */
package org.opalj
package br

/**
 * A method's line number table.
 *
 * @author Michael Eichberg
 */
trait LineNumberTable extends CodeAttribute {

    def lineNumbers: LineNumbers

    def lookupLineNumber(pc: PC): Option[Int]

    def firstLineNumber(): Option[Int]

    override def remapPCs(codeSize: PC, f: PC => PC): LineNumberTable = {
        UnpackedLineNumberTable(lineNumbers.flatMap[LineNumber](ln => ln.remapPCs(codeSize, f)))
    }

    override def kindId: Int = LineNumberTable.KindId

    override def similar(other: Attribute, config: SimilarityTestConfiguration): Boolean = {
        other match {
            case that: LineNumberTable => this.similar(that)
            case _                     => false
        }
    }

    def similar(other: LineNumberTable): Boolean = {
        val thisLineNumbers = this.lineNumbers
        val otherLineNumbers = other.lineNumbers
        // the order of two line number tables need to be identical
        thisLineNumbers.size == otherLineNumbers.size && thisLineNumbers == otherLineNumbers
    }

}

object LineNumberTable {

    final val KindId = 19

    def unapply(lnt: LineNumberTable): Option[LineNumbers] = Some(lnt.lineNumbers)

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy