private static void check(String t, String expected, String message, Tokenizer tokenizer) { if (!t.equalsIgnoreCase(expected)) { throw new IllegalArgumentException(message+ ": expected '" + expected + "' but got '" + t + "' at " + tokenizer.getLocationString()); } }
public String nextToken() { while (st.hasMoreTokens()) { String t = st.nextToken(); if (t.equals("\n")) { ++ line; currentLine.setLength(0); } else { currentLine.append(t); } if (!isWhitespace(t)) { return t; } } throw new IllegalArgumentException("unexpected end of schema"); }
t = st.nextToken(); childBuilder.length(Integer.parseInt(st.nextToken())); check(st.nextToken(), ")", "type length ended by )", st); String name = st.nextToken(); t = st.nextToken(); OriginalType originalType = null; if (t.equalsIgnoreCase("(")) { originalType = OriginalType.valueOf(st.nextToken()); childBuilder.as(originalType); if (OriginalType.DECIMAL == originalType) { t = st.nextToken(); childBuilder.precision(Integer.parseInt(st.nextToken())); t = st.nextToken(); if (t.equalsIgnoreCase(",")) { childBuilder.scale(Integer.parseInt(st.nextToken())); t = st.nextToken(); t = st.nextToken(); t = st.nextToken(); t = st.nextToken(); childBuilder.id(Integer.parseInt(st.nextToken())); t = st.nextToken();
private static void addGroupType(String t, Tokenizer st, Repetition r, GroupBuilder<?> builder) { GroupBuilder<?> childBuilder = builder.group(r); String name = st.nextToken(); // Read annotation, if any. t = st.nextToken(); OriginalType originalType = null; if (t.equalsIgnoreCase("(")) { originalType = OriginalType.valueOf(st.nextToken()); childBuilder.as(originalType); check(st.nextToken(), ")", "original type ended by )", st); t = st.nextToken(); } if (t.equals("=")) { childBuilder.id(Integer.parseInt(st.nextToken())); t = st.nextToken(); } try { addGroupTypeFields(t, st, childBuilder); } catch (IllegalArgumentException e) { throw new IllegalArgumentException("problem reading type: type = group, name = " + name + ", original type = " + originalType, e); } childBuilder.named(name); }
private static PrimitiveTypeName asPrimitive(String t, Tokenizer st) { try { return PrimitiveTypeName.valueOf(t.toUpperCase()); } catch (IllegalArgumentException e) { throw new IllegalArgumentException("expected one of " + Arrays.toString(PrimitiveTypeName.values()) +" got " + t + " at " + st.getLocationString(), e); } }
private static MessageType parse(String schemaString) { Tokenizer st = new Tokenizer(schemaString, " ;{}()\n\t"); Types.MessageTypeBuilder builder = Types.buildMessage(); String t = st.nextToken(); check(t, "message", "start with 'message'", st); String name = st.nextToken(); addGroupTypeFields(st.nextToken(), st, builder); return builder.named(name); }
private static Repetition asRepetition(String t, Tokenizer st) { try { return Repetition.valueOf(t.toUpperCase()); } catch (IllegalArgumentException e) { throw new IllegalArgumentException("expected one of " + Arrays.toString(Repetition.values()) +" got " + t + " at " + st.getLocationString(), e); } }
private static void addGroupTypeFields(String t, Tokenizer st, Types.GroupBuilder builder) { check(t, "{", "start of message", st); while (!(t = st.nextToken()).equals("}")) { addType(t, st, builder); } }
private static void addType(String t, Tokenizer st, Types.GroupBuilder builder) { Repetition repetition = asRepetition(t, st); // Read type. String type = st.nextToken(); if ("group".equalsIgnoreCase(type)) { addGroupType(t, st, repetition, builder); } else { addPrimitiveType(t, st, asPrimitive(type, st), repetition, builder); } }