public static String internalizeDescriptor()

in bytekit-core/src/main/java/com/alibaba/bytekit/utils/TypeHelper.java [282:401]


    public static String internalizeDescriptor(String desc)
    {
        StringBuffer buffer = new StringBuffer();
        String sepr = "";
        int argStart = desc.indexOf('(');
        int argEnd = desc.indexOf(')');
        int max = desc.length();
        if (argStart < 0 || argEnd < 0) {
            return "(...)";
        }
        int arrayCount = 0;
        boolean addSepr = false;

        buffer.append("(");

        for (int idx = argStart + 1; idx < max;) {
            char next = desc.charAt(idx);
            if (addSepr) {
                while (arrayCount > 0) {
                    buffer.append("[]");
                    arrayCount--;
                }
                buffer.append(sepr);
            }
            addSepr = true;
            switch(next) {
                case 'B':
                {
                    buffer.append("byte");
                }
                break;
                case 'C':
                {
                    buffer.append("char");
                }
                break;
                case 'S':
                {
                    buffer.append("short");
                }
                break;
                case 'I':
                {
                    buffer.append("int");
                }
                break;
                case 'J':
                {
                    buffer.append("long");
                }
                break;
                case 'Z':
                {
                    buffer.append("boolean");
                }
                break;
                case 'F':
                {
                    buffer.append("float");
                }
                break;
                case 'D':
                {
                    buffer.append("double");
                }
                case 'V':
                {
                    buffer.append("void");
                }
                break;
                case 'L':
                {
                    int tailIdx = idx+1;
                    while (tailIdx < max) {
                        char tailChar = desc.charAt(tailIdx);
                        if (tailChar == ';') {
                            break;
                        }
                        if (tailChar == '/')
                        {
                            tailChar = '.';
                        }
                        buffer.append(tailChar);
                        tailIdx++;
                    }
                    idx = tailIdx;
                }
                break;
                case '[':
                {
                    arrayCount++;
                    addSepr = false;
                }
                break;
                case ')':
                {
                    if (idx == argEnd - 1) {
                        buffer.append(")");
                    } else {
                        // leave room for return type
                        buffer.append(") ");
                    }
                    addSepr = false;
                }
                break;
                default:
                {
                    addSepr = false;
                }
            }
            idx++;
            if (idx < argEnd) {
                sepr = ",";
            } else {
                sepr = "";
            }
        }

        return buffer.toString();
    }