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

jas.MethodHandleCP Maven / Gradle / Ivy

/**
 * Models a CONSTANT_MethodHandle entry
 *
 * @author Eric Bodden
 */

package jas;

import java.io.DataOutputStream;
import java.io.IOException;

public class MethodHandleCP extends CP implements RuntimeConstants
{
  public final static int STATIC_METHOD_KIND = 6;

  int kind;
  CP fieldOrMethod;

  /**
   * @param cname Class in which method exists
   * @param ownerName name of class owning the method or field
   * @param fieldOrMethodName name of field or method
   * @param sig Signature of field r method
   */
  public MethodHandleCP(int kind, String ownerName, String fieldOrMethodName, String sig)
  {
    uniq = kind + "$gfd\u00A4" + ownerName + "&%$91&" + fieldOrMethodName + "*(012$" + sig;
    if(kind<5) { //first for kinds refer to fields
      fieldOrMethod = new FieldCP(ownerName, fieldOrMethodName, sig);
    } else {
      fieldOrMethod = new MethodCP(ownerName, fieldOrMethodName, sig);
    }
    this.kind = kind;
  }

  void resolve(ClassEnv e)
  {
    e.addCPItem(fieldOrMethod);
  }

  void write(ClassEnv e, DataOutputStream out)
    throws IOException, jasError
  {
    out.writeByte(CONSTANT_METHOD_HANDLE);
    out.writeByte(kind);
    out.writeShort(e.getCPIndex(fieldOrMethod));
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy