public static MessageComponents collectMessageComponents(final List<Token> tokens) { final Token msgToken = tokens.get(0); final List<Token> messageBody = GenerationUtil.getMessageBody(tokens); int i = 0; final List<Token> fields = new ArrayList<>(); i = GenerationUtil.collectFields(messageBody, i, fields); final List<Token> groups = new ArrayList<>(); i = GenerationUtil.collectGroups(messageBody, i, groups); final List<Token> varData = new ArrayList<>(); GenerationUtil.collectVarData(messageBody, i, varData); return new MessageComponents(msgToken, fields, groups, varData); } }
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 List<Token> tokens, final String prefix) { 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); } // Make a unique Group name by adding our parent final String groupName = prefix + formatTypeName(groupToken.name()); ++i; final int groupHeaderTokenCount = tokens.get(i).componentTokenCount(); i += groupHeaderTokenCount; final List<Token> fields = new ArrayList<>(); i = collectFields(tokens, i, fields); generateFields(sb, groupName, fields); final List<Token> groups = new ArrayList<>(); i = collectGroups(tokens, i, groups); generateGroups(sb, groups, groupName); final List<Token> varData = new ArrayList<>(); i = collectVarData(tokens, i, varData); generateVarData(sb, formatTypeName(groupName), varData); } }
public void generate() throws IOException { generateTypeStubs(); generateMessageHeaderStub(); for (final List<Token> tokens : ir.messages()) { final Token msgToken = tokens.get(0); final List<Token> messageBody = getMessageBody(tokens); int i = 0; final List<Token> fields = new ArrayList<>(); i = collectFields(messageBody, i, fields); final List<Token> groups = new ArrayList<>(); i = collectGroups(messageBody, i, groups); final List<Token> varData = new ArrayList<>(); collectVarData(messageBody, i, varData); generateDecoder(BASE_INDENT, fields, groups, varData, msgToken); generateEncoder(BASE_INDENT, fields, groups, varData, msgToken); } }
offset = collectGroups(messageBody, offset, groups); final StringBuilder sb = new StringBuilder(); generateGroups(sb, className, groups, BASE_INDENT);
i = collectGroups(tokens, i, groups);
i = collectGroups(messageBody, i, groups);
i = collectGroups(tokens, i, groups);
private void generateGroups(final StringBuilder sb, 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(); final Token numInGroupToken = Generators.findFirst("numInGroup", tokens, i); final String cppTypeForNumInGroup = cppTypeName(numInGroupToken.encoding().primitiveType()); generateGroupClassHeader(sb, groupName, tokens, i, indent + INDENT); ++i; final int groupHeaderTokenCount = tokens.get(i).componentTokenCount(); i += groupHeaderTokenCount; final List<Token> fields = new ArrayList<>(); i = collectFields(tokens, i, fields); sb.append(generateFields(formatClassName(groupName), fields, indent + INDENT)); final List<Token> groups = new ArrayList<>(); i = collectGroups(tokens, i, groups); generateGroups(sb, groups, indent + INDENT); final List<Token> varData = new ArrayList<>(); i = collectVarData(tokens, i, varData); sb.append(generateVarData(formatClassName(groupName), varData, indent + INDENT)); sb.append(indent).append(" };\n"); sb.append(generateGroupProperty(groupName, groupToken, cppTypeForNumInGroup, indent)); } }
i = collectGroups(groupsTokens, i, childGroups);
i = collectGroups(messageBody, i, groups);
public static MessageComponents collectMessageComponents(final List<Token> tokens) { final Token msgToken = tokens.get(0); final List<Token> messageBody = GenerationUtil.getMessageBody(tokens); int i = 0; final List<Token> fields = new ArrayList<>(); i = GenerationUtil.collectFields(messageBody, i, fields); final List<Token> groups = new ArrayList<>(); i = GenerationUtil.collectGroups(messageBody, i, groups); final List<Token> varData = new ArrayList<>(); GenerationUtil.collectVarData(messageBody, i, varData); return new MessageComponents(msgToken, fields, groups, varData); } }
public static MessageComponents collectMessageComponents(final List<Token> tokens) { final Token msgToken = tokens.get(0); final List<Token> messageBody = GenerationUtil.getMessageBody(tokens); int i = 0; final List<Token> fields = new ArrayList<>(); i = GenerationUtil.collectFields(messageBody, i, fields); final List<Token> groups = new ArrayList<>(); i = GenerationUtil.collectGroups(messageBody, i, groups); final List<Token> varData = new ArrayList<>(); GenerationUtil.collectVarData(messageBody, i, varData); return new MessageComponents(msgToken, fields, groups, varData); } }
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('.', '_'), 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)); } } }
private void generateGroups(final StringBuilder sb, final List<Token> tokens, final String prefix) { 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); } // Make a unique Group name by adding our parent final String groupName = prefix + formatTypeName(groupToken.name()); ++i; final int groupHeaderTokenCount = tokens.get(i).componentTokenCount(); i += groupHeaderTokenCount; final List<Token> fields = new ArrayList<>(); i = collectFields(tokens, i, fields); generateFields(sb, groupName, fields); final List<Token> groups = new ArrayList<>(); i = collectGroups(tokens, i, groups); generateGroups(sb, groups, groupName); final List<Token> varData = new ArrayList<>(); i = collectVarData(tokens, i, varData); generateVarData(sb, formatTypeName(groupName), varData); } }
i = collectGroups(messageBody, i, groups);
public void generate() throws IOException { generateTypeStubs(); generateMessageHeaderStub(); for (final List<Token> tokens : ir.messages()) { final Token msgToken = tokens.get(0); final List<Token> messageBody = getMessageBody(tokens); int i = 0; final List<Token> fields = new ArrayList<>(); i = collectFields(messageBody, i, fields); final List<Token> groups = new ArrayList<>(); i = collectGroups(messageBody, i, groups); final List<Token> varData = new ArrayList<>(); collectVarData(messageBody, i, varData); generateDecoder(BASE_INDENT, fields, groups, varData, msgToken); generateEncoder(BASE_INDENT, fields, groups, varData, msgToken); } }
public void generate() throws IOException { generateTypeStubs(); generateMessageHeaderStub(); for (final List<Token> tokens : ir.messages()) { final Token msgToken = tokens.get(0); final List<Token> messageBody = getMessageBody(tokens); int i = 0; final List<Token> fields = new ArrayList<>(); i = collectFields(messageBody, i, fields); final List<Token> groups = new ArrayList<>(); i = collectGroups(messageBody, i, groups); final List<Token> varData = new ArrayList<>(); collectVarData(messageBody, i, varData); generateDecoder(BASE_INDENT, fields, groups, varData, msgToken); generateEncoder(BASE_INDENT, fields, groups, varData, msgToken); } }
private void generateGroups(final StringBuilder sb, 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(); final Token numInGroupToken = Generators.findFirst("numInGroup", tokens, i); final String cppTypeForNumInGroup = cppTypeName(numInGroupToken.encoding().primitiveType()); generateGroupClassHeader(sb, groupName, tokens, i, indent + INDENT); ++i; final int groupHeaderTokenCount = tokens.get(i).componentTokenCount(); i += groupHeaderTokenCount; final List<Token> fields = new ArrayList<>(); i = collectFields(tokens, i, fields); sb.append(generateFields(formatClassName(groupName), fields, indent + INDENT, false)); final List<Token> groups = new ArrayList<>(); i = collectGroups(tokens, i, groups); generateGroups(sb, groups, indent + INDENT); final List<Token> varData = new ArrayList<>(); i = collectVarData(tokens, i, varData); sb.append(generateVarData(formatClassName(groupName), varData, indent + INDENT)); sb.append(indent).append(" };\n"); sb.append(generateGroupProperty(groupName, groupToken, cppTypeForNumInGroup, indent)); } }