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

org.opalj.bi.ReferenceKind.scala Maven / Gradle / Ivy

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

/**
 * Common super class of the `reference_kind`s used by the constant pool's
 * CONSTANT_MethodHandle_info structure.
 *
 * @author Michael Eichberg
 */
sealed abstract class ReferenceKind {

    def referenceKind: Int

    def referenceKindName: String

}

/**
 * Factory for `ReferenceKind` objects.
 */
object ReferenceKind {

    private[this] val referenceKinds: Array[ReferenceKind] = Array(
        /* 0*/ null, // <=> Index 0 is not used
        /* 1*/ REF_getField,
        /* 2*/ REF_getStatic,
        /* 3*/ REF_putField,
        /* 4*/ REF_putStatic,
        /* 5*/ REF_invokeVirtual,
        /* 6*/ REF_invokeStatic,
        /* 7*/ REF_invokeSpecial,
        /* 8*/ REF_newInvokeSpecial,
        /* 9*/ REF_invokeInterface
    )

    def apply(referenceKindID: Int): ReferenceKind = referenceKinds(referenceKindID)
}

case object REF_getField extends ReferenceKind {
    final val referenceKind = 1
    final val referenceKindName = "REF_getField"
}

case object REF_getStatic extends ReferenceKind {
    final val referenceKind = 2
    final val referenceKindName = "REF_getStatic"
}

case object REF_putField extends ReferenceKind {
    final val referenceKind = 3
    final val referenceKindName = "REF_putField"
}

case object REF_putStatic extends ReferenceKind {
    final val referenceKind = 4
    final val referenceKindName = "REF_putStatic"
}

case object REF_invokeVirtual extends ReferenceKind {
    final val referenceKind = 5
    final val referenceKindName = "REF_invokeVirtual"
}

case object REF_invokeStatic extends ReferenceKind {
    final val referenceKind = 6
    final val referenceKindName = "REF_invokeStatic"
}

case object REF_invokeSpecial extends ReferenceKind {
    final val referenceKind = 7
    final val referenceKindName = "REF_invokeSpecial"
}

case object REF_newInvokeSpecial extends ReferenceKind {
    final val referenceKind = 8
    final val referenceKindName = "REF_newInvokeSpecial"
}

case object REF_invokeInterface extends ReferenceKind {
    final val referenceKind = 9
    final val referenceKindName = "REF_invokeInterface"
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy