Constructors Summary |
---|
public Signature(Signature c)Initialize from another object. Note that both objects use the same
references (shallow copy). Use clone() for a physical copy.
this(c.getNameIndex(), c.getLength(), c.getSignatureIndex(), c.getConstantPool());
|
Signature(int name_index, int length, DataInputStream file, ConstantPool constant_pool)Construct object from file stream.
this(name_index, length, file.readUnsignedShort(), constant_pool);
|
public Signature(int name_index, int length, int signature_index, ConstantPool constant_pool)
super(Constants.ATTR_SIGNATURE, name_index, length, constant_pool);
this.signature_index = signature_index;
|
Methods Summary |
---|
public void | accept(com.sun.org.apache.bcel.internal.classfile.Visitor v)Called by objects that are traversing the nodes of the tree implicitely
defined by the contents of a Java class. I.e., the hierarchy of methods,
fields, attributes, etc. spawns a tree of objects.
System.err.println("Visiting non-standard Signature object");
v.visitSignature(this);
|
public com.sun.org.apache.bcel.internal.classfile.Attribute | copy(com.sun.org.apache.bcel.internal.classfile.ConstantPool constant_pool)
return (Signature)clone();
|
public final void | dump(java.io.DataOutputStream file)Dump source file attribute to file stream in binary format.
super.dump(file);
file.writeShort(signature_index);
|
public final java.lang.String | getSignature()
ConstantUtf8 c = (ConstantUtf8)constant_pool.getConstant(signature_index,
Constants.CONSTANT_Utf8);
return c.getBytes();
|
public final int | getSignatureIndex() return signature_index;
|
private static boolean | identPart(int ch)
return ch == '/" || ch == ';";
|
private static boolean | identStart(int ch)
return ch == 'T" || ch == 'L";
|
public static final boolean | isActualParameterList(java.lang.String s)
return s.startsWith("L") && s.endsWith(">;");
|
public static final boolean | isFormalParameterList(java.lang.String s)
return s.startsWith("<") && (s.indexOf(':") > 0);
|
private static final void | matchGJIdent(com.sun.org.apache.bcel.internal.classfile.Signature$MyByteArrayInputStream in, java.lang.StringBuffer buf)
int ch;
matchIdent(in, buf);
ch = in.read();
if((ch == '<") || ch == '(") { // Parameterized or method
//System.out.println("Enter <");
buf.append((char)ch);
matchGJIdent(in, buf);
while(((ch = in.read()) != '>") && (ch != ')")) { // List of parameters
if(ch == -1)
throw new RuntimeException("Illegal signature: " + in.getData() +
" reaching EOF");
//System.out.println("Still no >");
buf.append(", ");
in.unread();
matchGJIdent(in, buf); // Recursive call
}
//System.out.println("Exit >");
buf.append((char)ch);
} else
in.unread();
ch = in.read();
if(identStart(ch)) {
in.unread();
matchGJIdent(in, buf);
} else if(ch == ')") {
in.unread();
return;
} else if(ch != ';")
throw new RuntimeException("Illegal signature: " + in.getData() + " read " +
(char)ch);
|
private static final void | matchIdent(com.sun.org.apache.bcel.internal.classfile.Signature$MyByteArrayInputStream in, java.lang.StringBuffer buf)
int ch;
if((ch = in.read()) == -1)
throw new RuntimeException("Illegal signature: " + in.getData() +
" no ident, reaching EOF");
//System.out.println("return from ident:" + (char)ch);
if(!identStart(ch)) {
StringBuffer buf2 = new StringBuffer();
int count = 1;
while(Character.isJavaIdentifierPart((char)ch)) {
buf2.append((char)ch);
count++;
ch = in.read();
}
if(ch == ':") { // Ok, formal parameter
in.skip("Ljava/lang/Object".length());
buf.append(buf2);
ch = in.read();
in.unread();
//System.out.println("so far:" + buf2 + ":next:" +(char)ch);
} else {
for(int i=0; i < count; i++)
in.unread();
}
return;
}
StringBuffer buf2 = new StringBuffer();
ch = in.read();
do {
buf2.append((char)ch);
ch = in.read();
//System.out.println("within ident:"+ (char)ch);
} while((ch != -1) && (Character.isJavaIdentifierPart((char)ch) || (ch == '/")));
buf.append(buf2.toString().replace('/", '."));
//System.out.println("regular return ident:"+ (char)ch + ":" + buf2);
if(ch != -1)
in.unread();
|
public final void | setSignatureIndex(int signature_index)
this.signature_index = signature_index;
|
public final java.lang.String | toString()
String s = getSignature();
return "Signature(" + s + ")";
|
public static java.lang.String | translate(java.lang.String s)
//System.out.println("Sig:" + s);
StringBuffer buf = new StringBuffer();
matchGJIdent(new MyByteArrayInputStream(s), buf);
return buf.toString();
|