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

org.opalj.br.cp.CONSTANT_Dynamic_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

/**
 * Is used by the ldc/ldc_w/ldc2_w instructions to specify a bootstrap method, the dynamic
 * invocation name, the argument and return types of the call, and optionally, a
 * sequence of additional constants called static arguments to the bootstrap method.
 *
 * @param bootstrapMethodAttributeIndex This is an index into the bootstrap table.
 *    Since the bootstrap table is a class level attribute it is only possible
 *    to resolve this reference after loading the entire class file (class level
 *    attributes are loaded last).
 *
 * @author Dominik Helm
 */
case class CONSTANT_Dynamic_info(
        bootstrapMethodAttributeIndex: Int,
        nameAndTypeIndex:              Constant_Pool_Index
) extends Constant_Pool_Entry {

    override def isDynamic = true

    override def asDynamic: this.type = this

    override def tag: Int = ConstantPoolTags.CONSTANT_Dynamic_ID

    def name(cp: Constant_Pool): String = cp(nameAndTypeIndex).asNameAndType.name(cp)

    def descriptor(cp: Constant_Pool): FieldType = {
        cp(nameAndTypeIndex).asNameAndType.fieldType(cp)
    }

    override def asConstantValue(cp: Constant_Pool): ConstantValue[_] = {
        new DynamicConstant(name(cp), descriptor(cp), bootstrapMethodAttributeIndex)
    }

    override def asBootstrapArgument(cp: Constant_Pool): BootstrapArgument =
        asConstantValue(cp)

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy