/**
*
*/
package xapi.bytecode;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
class MethodHandleInfo extends ConstInfo {
static final int tag = 15;
int refKind, refIndex;
public MethodHandleInfo(final DataInput in, final int index) throws IOException {
refKind = in.readUnsignedByte();
refIndex = in.readUnsignedShort();
}
public MethodHandleInfo(final int kind, final int referenceIndex, final int index) {
refKind = kind;
refIndex = referenceIndex;
}
@Override
@SuppressWarnings("rawtypes")
public int copy(final ConstPool src, final ConstPool dest, final Map map) {
return dest.addMethodHandleInfo(refKind,
src.getItem(refIndex).copy(src, dest, map));
}
@Override
public boolean equals(final Object obj) {
if (obj instanceof MethodHandleInfo) {
final MethodHandleInfo mh = (MethodHandleInfo)obj;
return mh.refKind == refKind && mh.refIndex == refIndex;
} else {
return false;
}
}
@Override
public int getTag() { return tag; }
@Override
public int hashCode() { return refKind << 16 ^ refIndex; }
@Override
public void print(final PrintWriter out) {
out.print("MethodHandle #");
out.print(refKind);
out.print(", index #");
out.println(refIndex);
}
@Override
public void write(final DataOutput out) throws IOException {
out.writeByte(tag);
out.writeByte(refKind);
out.writeShort(refIndex);
}
}