List nameParts()

in src/org/gridgain/inspection/abbrev/AbbreviationInspection.java [285:415]


    List<String> nameParts(String name) {
        List<String> res = new LinkedList<String>();

        StringBuilder sb = new StringBuilder();

        ParserState state = ParserState.START;

        char pending = 0;

        for (int i = 0; i < name.length(); i++) {
            char c = name.charAt(i);

            switch (state) {
                case START:
                    sb.append(c);

                    if (Character.isLowerCase(c))
                        state = ParserState.WORD;
                    else if (Character.isUpperCase(c))
                        state = ParserState.CAPITAL;
                    else if (Character.isDigit(c))
                        state = ParserState.NUM;
                    else {
                        res.add(sb.toString());

                        sb.setLength(0);

                        // Remain in start state.
                    }
                    break;

                case CAPITAL:
                    if (Character.isLowerCase(c)) {
                        sb.append(c);

                        state = ParserState.WORD;
                    }
                    else if (Character.isUpperCase(c)) {
                        pending = c;

                        state = ParserState.ABBREVIATION;
                    }
                    else if (Character.isDigit(c)) {
                        res.add(sb.toString());

                        sb.setLength(0);

                        sb.append(c);

                        state = ParserState.NUM;
                    }
                    else {
                        res.add(sb.toString());

                        sb.setLength(0);

                        res.add(String.valueOf(c));

                        state = ParserState.START;
                    }
                    break;

                case WORD:
                    if (Character.isLowerCase(c))
                        sb.append(c);
                    else {
                        res.add(sb.toString());

                        sb.setLength(0);

                        state = ParserState.START;

                        // Unread.
                        i--;
                    }
                    break;

                case ABBREVIATION:
                    if (Character.isUpperCase(c)) {
                        sb.append(pending);

                        pending = c;
                    }
                    else if (Character.isLowerCase(c)) {
                        res.add(sb.toString());

                        sb.setLength(0);

                        sb.append(pending).append(c);

                        state = ParserState.WORD;
                    }
                    else {
                        sb.append(pending);

                        res.add(sb.toString());

                        sb.setLength(0);

                        state = ParserState.START;

                        // Unread.
                        i--;
                    }
                    break;

                case NUM:
                    if (Character.isDigit(c))
                        sb.append(c);
                    else {
                        res.add(sb.toString());

                        sb.setLength(0);

                        state = ParserState.START;

                        // Unread.
                        i--;
                    }
                    break;
            }
        }

        if (state == ParserState.ABBREVIATION)
            sb.append(pending);

        if (sb.length() > 0)
            res.add(sb.toString());

        return res;
    }