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;
}