private int generateGroups(final StringBuilder sb, 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(); generateGroupClassHeader(sb, groupName, tokens, index, indent + INDENT); final List<Token> rootFields = new ArrayList<>(); index = collectRootFields(tokens, ++index, rootFields); sb.append(generateFields(groupName, rootFields, indent + INDENT)); if (tokens.get(index).signal() == Signal.BEGIN_GROUP) { index = generateGroups(sb, tokens, index, indent + INDENT); } sb.append(indent).append(" };\n"); sb.append(generateGroupProperty(groupName, groupToken, indent)); } } return index; }
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 int generateGroups(final StringBuilder sb, 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(); generateGroupClassHeader(sb, groupName, tokens, index, indent + INDENT); final List<Token> rootFields = new ArrayList<>(); index = collectRootFields(tokens, ++index, rootFields); sb.append(generateFields(groupName, rootFields, indent + INDENT)); if (tokens.get(index).signal() == Signal.BEGIN_GROUP) { index = generateGroups(sb, tokens, index, indent + INDENT); } sb.append(generateGroupProperty(groupName, groupToken, indent)); } } return index; }
public void generate() throws IOException { generateMessageHeaderStub(); generateTypeStubs(); for (final List<Token> tokens : ir.messages()) { final Token msgToken = tokens.get(0); final List<Token> messageBody = getMessageBody(tokens); int offset = 0; final List<Token> rootFields = new ArrayList<>(); offset = collectRootFields(messageBody, offset, rootFields); final List<Token> groups = new ArrayList<>(); offset = collectGroups(messageBody, offset, groups); final List<Token> varData = messageBody.subList(offset, messageBody.size()); generateDecoder(groups, rootFields, varData, msgToken); generateEncoder(groups, rootFields, varData, msgToken); } }
public void generate() throws IOException { generateMessageHeaderStub(); final List<String> typesToInclude = 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().replace('.', '_'), className, typesToInclude)); 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(className, rootFields, BASE_INDENT)); final List<Token> groups = new ArrayList<>(); offset = collectGroups(messageBody, offset, groups); final StringBuilder sb = new StringBuilder(); generateGroups(sb, groups, 0, BASE_INDENT); out.append(sb); final List<Token> varData = messageBody.subList(offset, messageBody.size()); out.append(generateVarData(varData)); out.append("};\n}\n#endif\n"); } } }
public void generate() throws IOException { generateMessageHeaderStub(); final List<String> typesToInclude = 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().replace('.', '_'), typesToInclude)); out.append(generateClassDeclaration(className)); out.append(generateMessageFlyweightCode(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(className, rootFields, BASE_INDENT)); final List<Token> groups = new ArrayList<>(); offset = collectGroups(messageBody, offset, groups); final StringBuilder sb = new StringBuilder(); generateGroups(sb, groups, 0, BASE_INDENT); out.append(sb); final List<Token> varData = messageBody.subList(offset, messageBody.size()); out.append(generateVarData(varData)); } } }
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"); } } }
private int generateDecoderGroups( final StringBuilder sb, final String parentMessageClassName, final List<Token> tokens, int index, final String indent) throws IOException { for (int size = tokens.size(); index < size; index++) { final Token groupToken = tokens.get(index); if (groupToken.signal() == Signal.BEGIN_GROUP) { final String groupName = decoderName(formatClassName(groupToken.name())); sb.append(generateGroupDecoderProperty(groupName, groupToken, indent)); generateAnnotations(groupName, tokens, sb, index + 1, this::decoderName); generateGroupDecoderClassHeader(sb, groupName, parentMessageClassName, tokens, index, indent + INDENT); final List<Token> rootFields = new ArrayList<>(); index = collectRootFields(tokens, ++index, rootFields); sb.append(generateDecoderFields(rootFields, indent + INDENT)); if (tokens.get(index).signal() == Signal.BEGIN_GROUP) { index = generateDecoderGroups(sb, parentMessageClassName, tokens, index, indent + INDENT); } sb.append(indent).append(" }\n"); } } return index; }
private int generateEncoderGroups( final StringBuilder sb, final String parentMessageClassName, final List<Token> tokens, int index, final String indent) throws IOException { for (int size = tokens.size(); index < size; index++) { final Token groupToken = tokens.get(index); if (groupToken.signal() == Signal.BEGIN_GROUP) { final String groupName = groupToken.name(); final String groupClassName = formatClassName(encoderName(groupName)); sb.append(generateGroupEncoderProperty(groupName, groupToken, indent)); generateAnnotations(groupClassName, tokens, sb, index + 1, this::encoderName); generateGroupEncoderClassHeader(sb, groupName, parentMessageClassName, tokens, index, indent + INDENT); final List<Token> rootFields = new ArrayList<>(); index = collectRootFields(tokens, ++index, rootFields); sb.append(generateEncoderFields(groupClassName, rootFields, indent + INDENT)); if (tokens.get(index).signal() == Signal.BEGIN_GROUP) { index = generateEncoderGroups(sb, parentMessageClassName, tokens, index, indent + INDENT); } sb.append(indent).append(" }\n"); } } return index; }