opu.lljvm-python.0.2.0-EXPERIMENTAL.source-code.GenericAttr Maven / Gradle / Ivy
The newest version!
/**
* This is an opaque attribute that lets you add an uninterpreted
* stream of bytes into an attribute in a class file. This can be
* used (for instance) to embed versioning or signatures into the
* class file or method.
*
* @author $Author: jonmeyerny $
* @version $Revision: 1.1 $
*/
package jas;
import java.io.*;
public class GenericAttr
{
CP attr_name;
byte data[];
/**
* Make up a new attribute
* @param data stream of bytes to be placed with the attribute
* @see ClassEnv#addGenericAttr
* @see CodeAttr#addGenericAttr
*/
public GenericAttr(String name, byte data[])
{
attr_name = new AsciiCP(name);
this.data = data;
}
/**
* Make up a new attribute
* @param name CP to be defined as the name of the attribute
* @param data stream of bytes to be placed with the attribute
* @see ClassEnv#addGenericAttr
* @see CodeAttr#addGenericAttr
*/
public GenericAttr(CP name, byte data[])
{
attr_name = name;
this.data = data;
}
/**
* Make up a new attribute
* @param name Name to be associated with the attribute
* @param file name of file with attribute contens
*/
public GenericAttr(String name, String file) throws IOException, jasError
{
FileInputStream inp;
try {
inp = new FileInputStream(file);
} catch(FileNotFoundException e) {
throw new jasError("Generic atribute file " +file+ " not found");
}
data = new byte[inp.available()];
inp.read(data);
inp.close();
attr_name = new AsciiCP(name);
}
void resolve(ClassEnv e)
{ e.addCPItem(attr_name); }
int size()
{ return (2 + 4 + data.length); }
void write(ClassEnv e, DataOutputStream out)
throws IOException, jasError
{
out.writeShort(e.getCPIndex(attr_name));
out.writeInt(data.length);
out.write(data);
}
}