📄 traceclassvisitor.java
字号:
}
}
public void visitOuterClass(
final String owner,
final String name,
final String desc)
{
buf.setLength(0);
buf.append(tab).append("OUTERCLASS ");
appendDescriptor(INTERNAL_NAME, owner);
buf.append(' ');
if (name != null) {
buf.append(name).append(' ');
}
appendDescriptor(METHOD_DESCRIPTOR, desc);
buf.append('\n');
text.add(buf.toString());
if (cv != null) {
cv.visitOuterClass(owner, name, desc);
}
}
public AnnotationVisitor visitAnnotation(
final String desc,
final boolean visible)
{
text.add("\n");
AnnotationVisitor tav = super.visitAnnotation(desc, visible);
if (cv != null) {
((TraceAnnotationVisitor) tav).av = cv.visitAnnotation(desc,
visible);
}
return tav;
}
public void visitAttribute(final Attribute attr) {
text.add("\n");
super.visitAttribute(attr);
if (cv != null) {
cv.visitAttribute(attr);
}
}
public void visitInnerClass(
final String name,
final String outerName,
final String innerName,
final int access)
{
buf.setLength(0);
buf.append(tab).append("// access flags ");
buf.append(access & ~Opcodes.ACC_SUPER).append('\n');
buf.append(tab);
appendAccess(access);
buf.append("INNERCLASS ");
appendDescriptor(INTERNAL_NAME, name);
buf.append(' ');
appendDescriptor(INTERNAL_NAME, outerName);
buf.append(' ');
appendDescriptor(INTERNAL_NAME, innerName);
buf.append('\n');
text.add(buf.toString());
if (cv != null) {
cv.visitInnerClass(name, outerName, innerName, access);
}
}
public FieldVisitor visitField(
final int access,
final String name,
final String desc,
final String signature,
final Object value)
{
buf.setLength(0);
buf.append('\n');
if ((access & Opcodes.ACC_DEPRECATED) != 0) {
buf.append(tab).append("// DEPRECATED\n");
}
buf.append(tab).append("// access flags ").append(access).append('\n');
if (signature != null) {
buf.append(tab);
appendDescriptor(FIELD_SIGNATURE, signature);
TraceSignatureVisitor sv = new TraceSignatureVisitor(0);
SignatureReader r = new SignatureReader(signature);
r.acceptType(sv);
buf.append(tab)
.append("// declaration: ")
.append(sv.getDeclaration())
.append('\n');
}
buf.append(tab);
appendAccess(access);
appendDescriptor(FIELD_DESCRIPTOR, desc);
buf.append(' ').append(name);
if (value != null) {
buf.append(" = ");
if (value instanceof String) {
buf.append("\"").append(value).append("\"");
} else {
buf.append(value);
}
}
buf.append('\n');
text.add(buf.toString());
TraceFieldVisitor tav = createTraceFieldVisitor();
text.add(tav.getText());
if (cv != null) {
tav.fv = cv.visitField(access, name, desc, signature, value);
}
return tav;
}
public MethodVisitor visitMethod(
final int access,
final String name,
final String desc,
final String signature,
final String[] exceptions)
{
buf.setLength(0);
buf.append('\n');
if ((access & Opcodes.ACC_DEPRECATED) != 0) {
buf.append(tab).append("// DEPRECATED\n");
}
buf.append(tab).append("// access flags ").append(access).append('\n');
if (signature != null) {
buf.append(tab);
appendDescriptor(METHOD_SIGNATURE, signature);
TraceSignatureVisitor v = new TraceSignatureVisitor(0);
SignatureReader r = new SignatureReader(signature);
r.accept(v);
String genericDecl = v.getDeclaration();
String genericReturn = v.getReturnType();
String genericExceptions = v.getExceptions();
buf.append(tab)
.append("// declaration: ")
.append(genericReturn)
.append(' ')
.append(name)
.append(genericDecl);
if (genericExceptions != null) {
buf.append(" throws ").append(genericExceptions);
}
buf.append('\n');
}
buf.append(tab);
appendAccess(access);
if ((access & Opcodes.ACC_NATIVE) != 0) {
buf.append("native ");
}
if ((access & Opcodes.ACC_VARARGS) != 0) {
buf.append("varargs ");
}
if ((access & Opcodes.ACC_BRIDGE) != 0) {
buf.append("bridge ");
}
buf.append(name);
appendDescriptor(METHOD_DESCRIPTOR, desc);
if (exceptions != null && exceptions.length > 0) {
buf.append(" throws ");
for (int i = 0; i < exceptions.length; ++i) {
appendDescriptor(INTERNAL_NAME, exceptions[i]);
buf.append(' ');
}
}
buf.append('\n');
text.add(buf.toString());
TraceMethodVisitor tcv = createTraceMethodVisitor();
text.add(tcv.getText());
if (cv != null) {
tcv.mv = cv.visitMethod(access, name, desc, signature, exceptions);
}
return tcv;
}
public void visitEnd() {
text.add("}\n");
print(pw);
pw.flush();
if (cv != null) {
cv.visitEnd();
}
}
// ------------------------------------------------------------------------
// Utility methods
// ------------------------------------------------------------------------
protected TraceFieldVisitor createTraceFieldVisitor() {
return new TraceFieldVisitor();
}
protected TraceMethodVisitor createTraceMethodVisitor() {
return new TraceMethodVisitor();
}
/**
* Appends a string representation of the given access modifiers to {@link
* #buf buf}.
*
* @param access some access modifiers.
*/
private void appendAccess(final int access) {
if ((access & Opcodes.ACC_PUBLIC) != 0) {
buf.append("public ");
}
if ((access & Opcodes.ACC_PRIVATE) != 0) {
buf.append("private ");
}
if ((access & Opcodes.ACC_PROTECTED) != 0) {
buf.append("protected ");
}
if ((access & Opcodes.ACC_FINAL) != 0) {
buf.append("final ");
}
if ((access & Opcodes.ACC_STATIC) != 0) {
buf.append("static ");
}
if ((access & Opcodes.ACC_SYNCHRONIZED) != 0) {
buf.append("synchronized ");
}
if ((access & Opcodes.ACC_VOLATILE) != 0) {
buf.append("volatile ");
}
if ((access & Opcodes.ACC_TRANSIENT) != 0) {
buf.append("transient ");
}
if ((access & Opcodes.ACC_ABSTRACT) != 0) {
buf.append("abstract ");
}
if ((access & Opcodes.ACC_STRICT) != 0) {
buf.append("strictfp ");
}
if ((access & Opcodes.ACC_ENUM) != 0) {
buf.append("enum ");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -