public static Type createTypeFromSignature(String signature) {
            char firstChar = signature.charAt(0);
            if (firstChar == '[') {
                int dims = 0;
                while (signature.charAt(dims) == '[') {
                    dims++;
                }
                Type componentType = createTypeFromSignature(signature.substring(dims));
                return new Type(
                        signature,
                        signature.substring(0, dims) +
                                componentType.getErasureSignature());
            } else if (signature.length() == 1) {
                switch (firstChar) {
                    case 'V':
                        return Type.VOID;
                    case 'Z':
                        return Type.BOOLEAN;
                    case 'B':
                        return Type.BYTE;
                    case 'C':
                        return Type.CHAR;
                    case 'D':
                        return Type.DOUBLE;
                    case 'F':
                        return Type.FLOAT;
                    case 'I':
                        return Type.INT;
                    case 'J':
                        return Type.LONG;
                    case 'S':
                        return Type.SHORT;
                    default:
                        return null;
                }
            } else if (firstChar == 'L') {
                int leftAngleBracket = signature.indexOf('<');

                if (leftAngleBracket == -1) {
                    return new Type(signature);
                }
            }
            return new Type(signature);
        }
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