private void generateGroups( final StringBuilder sb, final String parentMessageClassName, final List<Token> tokens, final String indent) { for (int i = 0, size = tokens.size(); i < size; i++) { final Token groupToken = tokens.get(i); if (groupToken.signal() != Signal.BEGIN_GROUP) { throw new IllegalStateException("tokens must begin with BEGIN_GROUP: token=" + groupToken); } final String groupName = groupToken.name(); sb.append(generateGroupProperty(groupName, groupToken, indent + INDENT)); generateGroupClassHeader(sb, groupName, parentMessageClassName, tokens, i, indent + INDENT); i++; i += tokens.get(i).componentTokenCount(); final List<Token> fields = new ArrayList<>(); i = collectFields(tokens, i, fields); sb.append(generateFields(fields, indent + INDENT)); final List<Token> groups = new ArrayList<>(); i = collectGroups(tokens, i, groups); generateGroups(sb, parentMessageClassName, groups, indent + INDENT); final List<Token> varData = new ArrayList<>(); i = collectVarData(tokens, i, varData); sb.append(generateVarData(varData, indent + INDENT + INDENT)); sb.append(indent).append(INDENT + "}\n"); } }
out.append(generateFields(fields, BASE_INDENT));
private int generateGroups( final StringBuilder sb, final String parentMessageClassName, final List<Token> tokens, int index, final String indent) { for (int size = tokens.size(); index < size; index++) { if (tokens.get(index).signal() == Signal.BEGIN_GROUP) { final Token groupToken = tokens.get(index); final String groupName = groupToken.name(); sb.append(generateGroupProperty(groupName, groupToken, indent)); generateGroupClassHeader(sb, groupName, parentMessageClassName, tokens, index, indent + INDENT); final List<Token> rootFields = new ArrayList<>(); index = collectRootFields(tokens, ++index, rootFields); sb.append(generateFields(rootFields, indent + INDENT)); if (tokens.get(index).signal() == Signal.BEGIN_GROUP) { index = generateGroups(sb, parentMessageClassName, tokens, index, indent + INDENT); } sb.append(indent).append(" }\n"); } } return index; }
private void generateGroups( final StringBuilder sb, final String parentMessageClassName, final List<Token> tokens, final String indent) { for (int i = 0, size = tokens.size(); i < size; i++) { final Token groupToken = tokens.get(i); if (groupToken.signal() != Signal.BEGIN_GROUP) { throw new IllegalStateException("tokens must begin with BEGIN_GROUP: token=" + groupToken); } final String groupName = groupToken.name(); sb.append(generateGroupProperty(groupName, groupToken, indent + INDENT)); generateGroupClassHeader(sb, groupName, parentMessageClassName, tokens, i, indent + INDENT); i++; i += tokens.get(i).componentTokenCount(); final List<Token> fields = new ArrayList<>(); i = collectFields(tokens, i, fields); sb.append(generateFields(fields, indent + INDENT)); final List<Token> groups = new ArrayList<>(); i = collectGroups(tokens, i, groups); generateGroups(sb, parentMessageClassName, groups, indent + INDENT); final List<Token> varData = new ArrayList<>(); i = collectVarData(tokens, i, varData); sb.append(generateVarData(varData, indent + INDENT + INDENT)); sb.append(indent).append(INDENT + "}\n"); } }
private void generateGroups( final StringBuilder sb, final String parentMessageClassName, final List<Token> tokens, final String indent) { for (int i = 0, size = tokens.size(); i < size; i++) { final Token groupToken = tokens.get(i); if (groupToken.signal() != Signal.BEGIN_GROUP) { throw new IllegalStateException("tokens must begin with BEGIN_GROUP: token=" + groupToken); } final String groupName = groupToken.name(); sb.append(generateGroupProperty(groupName, groupToken, indent + INDENT)); generateGroupClassHeader(sb, groupName, parentMessageClassName, tokens, i, indent + INDENT); i++; i += tokens.get(i).componentTokenCount(); final List<Token> fields = new ArrayList<>(); i = collectFields(tokens, i, fields); sb.append(generateFields(fields, indent + INDENT)); final List<Token> groups = new ArrayList<>(); i = collectGroups(tokens, i, groups); generateGroups(sb, parentMessageClassName, groups, indent + INDENT); final List<Token> varData = new ArrayList<>(); i = collectVarData(tokens, i, varData); sb.append(generateVarData(varData, indent + INDENT + INDENT)); sb.append(indent).append(INDENT + "}\n"); } }
public void generate() throws IOException { generateMessageHeaderStub(); generateTypeStubs(); for (final List<Token> tokens : ir.messages()) { final Token msgToken = tokens.get(0); final String className = formatClassName(msgToken.name()); try (final Writer out = outputManager.createOutput(className)) { out.append(generateFileHeader(ir.applicableNamespace())); out.append(generateClassDeclaration(className)); out.append(generateMessageFlyweightCode(className, msgToken)); final List<Token> messageBody = tokens.subList(1, tokens.size() - 1); int offset = 0; final List<Token> rootFields = new ArrayList<>(); offset = collectRootFields(messageBody, offset, rootFields); out.append(generateFields(rootFields, BASE_INDENT)); final List<Token> groups = new ArrayList<>(); offset = collectGroups(messageBody, offset, groups); final StringBuilder sb = new StringBuilder(); generateGroups(sb, className, groups, 0, BASE_INDENT); out.append(sb); final List<Token> varData = messageBody.subList(offset, messageBody.size()); out.append(generateVarData(varData)); out.append(" }\n"); out.append("}\n"); } } }
out.append(generateFields(fields, BASE_INDENT));
out.append(generateFields(fields, BASE_INDENT));