public static String methodDeclaration()

in bytekit-core/src/main/java/com/alibaba/bytekit/utils/AsmUtils.java [435:524]


    public static String methodDeclaration(Type owner, MethodNode methodNode) {
        int access = methodNode.access;
        StringBuilder sb = new StringBuilder(128);

//        int ACC_PUBLIC = 0x0001; // class, field, method
//        int ACC_PRIVATE = 0x0002; // class, field, method
//        int ACC_PROTECTED = 0x0004; // class, field, method
//        int ACC_STATIC = 0x0008; // field, method
//        int ACC_FINAL = 0x0010; // class, field, method, parameter
//        int ACC_SUPER = 0x0020; // class
//        int ACC_SYNCHRONIZED = 0x0020; // method
//        int ACC_OPEN = 0x0020; // module
//        int ACC_TRANSITIVE = 0x0020; // module requires
//        int ACC_VOLATILE = 0x0040; // field
//        int ACC_BRIDGE = 0x0040; // method
//        int ACC_STATIC_PHASE = 0x0040; // module requires
//        int ACC_VARARGS = 0x0080; // method
//        int ACC_TRANSIENT = 0x0080; // field
//        int ACC_NATIVE = 0x0100; // method
//        int ACC_INTERFACE = 0x0200; // class
//        int ACC_ABSTRACT = 0x0400; // class, method
//        int ACC_STRICT = 0x0800; // method
//        int ACC_SYNTHETIC = 0x1000; // class, field, method, parameter, module *
//        int ACC_ANNOTATION = 0x2000; // class
//        int ACC_ENUM = 0x4000; // class(?) field inner
//        int ACC_MANDATED = 0x8000; // parameter, module, module *
//        int ACC_MODULE = 0x8000; // class

        if ((access & Opcodes.ACC_PUBLIC) != 0) {
            sb.append("public ");
        }
        if ((access & Opcodes.ACC_PRIVATE) != 0) {
            sb.append("private ");
        }
        if ((access & Opcodes.ACC_PROTECTED) != 0) {
            sb.append("protected ");
        }
        if ((access & Opcodes.ACC_STATIC) != 0) {
            sb.append("static ");
        }

        if ((access & Opcodes.ACC_FINAL) != 0) {
            sb.append("final ");
        }
        if ((access & Opcodes.ACC_SYNCHRONIZED) != 0) {
            sb.append("synchronized ");
        }
        if ((access & Opcodes.ACC_NATIVE) != 0) {
            sb.append("native ");
        }
        if ((access & Opcodes.ACC_ABSTRACT) != 0) {
            sb.append("abstract ");
        }

        Type methodType = Type.getMethodType(methodNode.desc);

        // skip constructor return type
        if (methodNode.name.equals("<init>")) {
            sb.append(owner.getClassName());
        } else {
            sb.append(methodType.getReturnType().getClassName()).append(' ');
            sb.append(methodNode.name);
        }

        sb.append('(');
        Type[] argumentTypes = methodType.getArgumentTypes();
        for (int i = 0; i < argumentTypes.length; ++i) {
            sb.append(argumentTypes[i].getClassName());
            if (i != argumentTypes.length - 1) {
                sb.append(", ");
            }
        }
        sb.append(')');
        if (methodNode.exceptions != null) {
            int exceptionSize = methodNode.exceptions.size();
            if (exceptionSize > 0) {
                sb.append(" throws");
                for (int i = 0; i < exceptionSize; ++i) {
                    sb.append(' ');
                    sb.append(Type.getObjectType(methodNode.exceptions.get(i)).getClassName());
                    if (i != exceptionSize - 1) {
                        sb.append(',');
                    }
                }
            }

        }

        return sb.toString();
    }