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

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

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

/**
 * Enumeration of the different contexts in which the JVM Spec. uses
 * `access_flags` fields and also an enumeration which `access_flags` are found
 * in which context.
 */
object AccessFlagsContexts extends Enumeration {

    val INNER_CLASS, CLASS, METHOD, FIELD, METHOD_PARAMETERS, MODULE = Value

    val INNER_CLASS_FLAGS: IndexedSeq[AccessFlag] =
        IndexedSeq(
            ACC_PUBLIC,
            ACC_PRIVATE,
            ACC_PROTECTED,
            ACC_STATIC,
            ACC_SUPER /*NOT SPECIFIED IN THE JVM SPEC. - MAYBE THIS BIT IS JUST SET BY THE SCALA COMPILER!*/ ,
            ACC_FINAL,
            ACC_INTERFACE,
            ACC_ABSTRACT,
            ACC_SYNTHETIC,
            ACC_ANNOTATION,
            ACC_ENUM
        )

    val CLASS_FLAGS: IndexedSeq[AccessFlag] =
        IndexedSeq(
            ACC_PUBLIC,
            ACC_FINAL,
            ACC_SUPER,
            ACC_INTERFACE,
            ACC_ABSTRACT,
            ACC_SYNTHETIC,
            ACC_ANNOTATION,
            ACC_ENUM,
            ACC_MODULE
        )

    val FIELD_FLAGS: IndexedSeq[AccessFlag] =
        IndexedSeq(
            ACC_PUBLIC,
            ACC_PRIVATE,
            ACC_PROTECTED,
            ACC_STATIC,
            ACC_FINAL,
            ACC_VOLATILE,
            ACC_TRANSIENT,
            ACC_SYNTHETIC,
            ACC_ENUM
        )

    val METHOD_FLAGS: IndexedSeq[AccessFlag] =
        IndexedSeq(
            ACC_PUBLIC,
            ACC_PRIVATE,
            ACC_PROTECTED,
            ACC_STATIC,
            ACC_FINAL,
            ACC_SYNCHRONIZED,
            ACC_BRIDGE,
            ACC_VARARGS,
            ACC_NATIVE,
            ACC_ABSTRACT,
            ACC_STRICT,
            ACC_SYNTHETIC
        )

    /**
     * Access flags related to Java 9 module definitions.
     */
    val MODULE_FLAGS: IndexedSeq[AccessFlag] = {
        IndexedSeq(
            ACC_OPEN,
            ACC_TRANSITIVE,
            ACC_STATIC_PHASE,
            ACC_SYNTHETIC,
            ACC_MANDATED
        )
    }

    val METHOD_PARAMETER_FLAGS: IndexedSeq[AccessFlag] = {
        IndexedSeq(ACC_FINAL, ACC_SYNTHETIC, ACC_MANDATED)
    }

    val CLASS_VISIBILITY_FLAGS: IndexedSeq[AccessFlag] = {
        IndexedSeq(ACC_PUBLIC)
    }

    val MEMBER_VISIBILITY_FLAGS: IndexedSeq[AccessFlag] = {
        IndexedSeq(ACC_PUBLIC, ACC_PRIVATE, ACC_PROTECTED)
    }

    val INNER_CLASS_VISIBILITY_FLAGS: IndexedSeq[AccessFlag] = MEMBER_VISIBILITY_FLAGS

    val FIELD_VISIBILITY_FLAGS: IndexedSeq[AccessFlag] = MEMBER_VISIBILITY_FLAGS

    val METHOD_VISIBILITY_FLAGS: IndexedSeq[AccessFlag] = MEMBER_VISIBILITY_FLAGS

    def potentialAccessFlags(ctx: AccessFlagsContext): IndexedSeq[AccessFlag] = {
        ctx match {
            case INNER_CLASS       ⇒ INNER_CLASS_FLAGS
            case CLASS             ⇒ CLASS_FLAGS
            case METHOD            ⇒ METHOD_FLAGS
            case FIELD             ⇒ FIELD_FLAGS
            case METHOD_PARAMETERS ⇒ METHOD_PARAMETER_FLAGS
            case MODULE            ⇒ MODULE_FLAGS
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy