private static String nameToSignature(String name) {
            int len = name.length();
            if (len < 8) {
                if (name.equals("int")) return "I";
                if (name.equals("void")) return "V";
                if (name.equals("long")) return "J";
                if (name.equals("boolean")) return "Z";
                if (name.equals("double")) return "D";
                if (name.equals("float")) return "F";
                if (name.equals("byte")) return "B";
                if (name.equals("short")) return "S";
                if (name.equals("char")) return "C";
                if (name.equals("?")) return name;
            }
            if (len == 0) {
                throw new DroidAssistBadTypeException("Bad type name: " + name);
            }
            if (name.endsWith("[]")) {
                return "[" + nameToSignature(name.substring(0, name.length() - 2));
            }

            if (name.charAt(0) == '[') {
                return name.replace('.', '/');
            }

            String packageName;
            int angly = name.indexOf('<');
            if (angly != -1) {
                name = name.substring(0, angly);
            }
            int index = name.lastIndexOf('.');
            if (index == -1) {
                packageName = "";
            } else {
                packageName = name.substring(0, index);
            }
            if (packageName.equals("")) {
                try {
                    String jlang = "java.lang." + name;
                    Class.forName(jlang);
                    name = jlang;
                } catch (ClassNotFoundException ignore) {
                }
            }
            return "L" + name.replace('.', '/') + ';';
        }
This is a parser for custom aop pointcut expression.
<p>
Such as <pre>int android.util.Log.d(java.lang.String,java.lang.String)</pre>
plugin/src/main/groovy/com/didichuxing/tools/droidassist/spec/SourceSpec.java