@Override public SignatureVisitor visitReturnType() { endFormals(); if (seenParameter) { seenParameter = false; } else { declaration.append('('); } declaration.append(')'); returnType = new StringBuilder(); return new TraceSignatureVisitor(returnType); }
@Override public void visitEnd() { if (argumentStack % 2 != 0) { declaration.append('>'); } argumentStack /= 2; endType(); }
@Override public SignatureVisitor visitSuperclass() { endFormals(); separator = " extends "; startType(); return this; }
/** * Appends the Java generic type declaration corresponding to the given signature. * * @param name a class, field or method name. * @param signature a class, field or method signature. */ private void appendJavaDeclaration(final String name, final String signature) { TraceSignatureVisitor traceSignatureVisitor = new TraceSignatureVisitor(access); new SignatureReader(signature).accept(traceSignatureVisitor); stringBuilder.append("// declaration: "); if (traceSignatureVisitor.getReturnType() != null) { stringBuilder.append(traceSignatureVisitor.getReturnType()); stringBuilder.append(' '); } stringBuilder.append(name); stringBuilder.append(traceSignatureVisitor.getDeclaration()); if (traceSignatureVisitor.getExceptions() != null) { stringBuilder.append(" throws ").append(traceSignatureVisitor.getExceptions()); } stringBuilder.append('\n'); }
/** * Converts the given type signature to a human readable type string. * <p> * Example: {@code Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; -> java.util.Map<java.lang.String, java.lang.String>} */ public static String toReadableType(final String type) { final SignatureReader reader = new SignatureReader(type); final TraceSignatureVisitor visitor = new TraceSignatureVisitor(0); reader.acceptType(visitor); return visitor.getDeclaration(); }
@Override public SignatureVisitor visitClassBound() { separator = " extends "; startType(); return this; }
@Override public SignatureVisitor visitExceptionType() { if (exceptions == null) { exceptions = new StringBuilder(); } else { exceptions.append(COMMA_SEPARATOR); } return new TraceSignatureVisitor(exceptions); }
/** * Appends the Java generic type declaration corresponding to the given signature. * * @param name a class, field or method name. * @param signature a class, field or method signature. */ private void appendJavaDeclaration(final String name, final String signature) { TraceSignatureVisitor traceSignatureVisitor = new TraceSignatureVisitor(access); new SignatureReader(signature).accept(traceSignatureVisitor); stringBuilder.append("// declaration: "); if (traceSignatureVisitor.getReturnType() != null) { stringBuilder.append(traceSignatureVisitor.getReturnType()); stringBuilder.append(' '); } stringBuilder.append(name); stringBuilder.append(traceSignatureVisitor.getDeclaration()); if (traceSignatureVisitor.getExceptions() != null) { stringBuilder.append(" throws ").append(traceSignatureVisitor.getExceptions()); } stringBuilder.append('\n'); }
/** * Converts the given type signature to a human readable type string. * <p> * Example: {@code Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>; -> java.util.Map<java.lang.String, java.lang.String>} */ public static String toReadableType(final String type) { final SignatureReader reader = new SignatureReader(type); final TraceSignatureVisitor visitor = new TraceSignatureVisitor(0); reader.acceptType(visitor); return visitor.getDeclaration(); }
@Override public SignatureVisitor visitInterfaceBound() { separator = seenInterfaceBound ? ", " : " extends "; seenInterfaceBound = true; startType(); return this; }
@Override public SignatureVisitor visitExceptionType() { if (exceptions == null) { exceptions = new StringBuilder(); } else { exceptions.append(COMMA_SEPARATOR); } return new TraceSignatureVisitor(exceptions); }
StringBuilder sb=new StringBuilder(); appendModifiers(sb, access); TraceSignatureVisitor v = new TraceSignatureVisitor(0); new SignatureReader(signature).accept(v); String declaration = v.getDeclaration(), rType = v.getReturnType(); if(declaration.charAt(0)=='<') sb.append(declaration, 0, declaration.indexOf("(")).append(' '); if((access&Opcodes.ACC_VARARGS)!=0 && declaration.endsWith("[])")) sb.replace(sb.length()-3, sb.length(), "...)"); String genericExceptions = v.getExceptions(); if(genericExceptions!=null && !v.getDeclaration().isEmpty()) sb.append(" throws ").append(genericExceptions); else if(exceptions!=null && exceptions.length>0) {
/** * Converts a method descriptor / signature into strings like * <pre> * meth(java.lang.String, java.util.Map) * <T extends java.io.IOException>meth(T, double, java.lang.List<T>)</pre> * Notice that the result includes neither the return type nor the accessibility. */ public static String toString(String methodName, String methodDescriptor, @Nullable String methodSignature) { if (methodSignature != null) { TraceSignatureVisitor tsv = new TraceSignatureVisitor(0); new SignatureReader(methodSignature).accept(tsv); return methodName + tsv.getDeclaration(); } StringBuilder sb = new StringBuilder(methodName).append('('); Type[] ats = Type.getArgumentTypes(methodDescriptor); if (ats.length >= 1) { for (int i = 0;;) { sb.append(ats[i++].getClassName()); if (i == ats.length) break; sb.append(", "); } } return sb.append(')').toString(); } }
@Override public SignatureVisitor visitSuperclass() { endFormals(); separator = EXTENDS_SEPARATOR; startType(); return this; }
@Override public SignatureVisitor visitReturnType() { endFormals(); if (parameterTypeVisited) { parameterTypeVisited = false; } else { declaration.append('('); } declaration.append(')'); returnType = new StringBuilder(); return new TraceSignatureVisitor(returnType); }
@Override public SignatureVisitor visitInterface() { separator = seenInterface ? ", " : isInterface ? " extends " : " implements "; seenInterface = true; startType(); return this; }
@Override public void visitEnd() { if (argumentStack % 2 != 0) { declaration.append('>'); } argumentStack /= 2; endType(); }
@Override public SignatureVisitor visitExceptionType() { if (exceptions == null) { exceptions = new StringBuilder(); } else { exceptions.append(", "); } // startType(); return new TraceSignatureVisitor(exceptions); }
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();
@Override public void visitLocalVariable(final String name, final String desc, final String signature, final Label start, final Label end, final int index) { buf.setLength(0); buf.append(tab2).append("LOCALVARIABLE ").append(name).append(' '); appendDescriptor(FIELD_DESCRIPTOR, desc); buf.append(' '); appendLabel(start); buf.append(' '); appendLabel(end); buf.append(' ').append(index).append('\n'); if (signature != null) { buf.append(tab2); appendDescriptor(FIELD_SIGNATURE, signature); TraceSignatureVisitor sv = new TraceSignatureVisitor(0); SignatureReader r = new SignatureReader(signature); r.acceptType(sv); buf.append(tab2).append("// declaration: ") .append(sv.getDeclaration()).append('\n'); } text.add(buf.toString()); }