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

org.opalj.br.cp.CONSTANT_Fieldref_info.scala Maven / Gradle / Ivy

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

import org.opalj.bi.ConstantPoolTags

/**
 * Represents a field.
 *
 * @author Michael Eichberg
 * @author Andre Pacak
 */
case class CONSTANT_Fieldref_info(
        class_index:         Constant_Pool_Index,
        name_and_type_index: Constant_Pool_Index
) extends Constant_Pool_Entry {

    override def tag: Int = ConstantPoolTags.CONSTANT_Fieldref_ID

    // We don't mind if the field is initialized more than once (if reading the classfile
    // should be parallelized) as it is just an optimization and the object reference
    // is of no importance; an equals check will return true. Hence, w.r.t. the
    // previous definition this code is thread-safe.
    private[this] var fieldref: (ObjectType, String, FieldType) = null // to cache the result
    override def asFieldref(cp: Constant_Pool): (ObjectType, String, FieldType) = {
        var fieldref = this.fieldref
        if (fieldref eq null) {
            val nameAndType = cp(name_and_type_index).asNameAndType
            fieldref =
                (
                    cp(class_index).asObjectType(cp),
                    nameAndType.name(cp),
                    nameAndType.fieldType(cp)
                )
            this.fieldref = fieldref
        }
        fieldref
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy