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); } }
@Test public void shouldGenerateMessageHeaderDecoderStub() throws Exception { final int bufferOffset = 64; final int templateIdOffset = 2; final short templateId = (short)7; final String fqClassName = ir.applicableNamespace() + "." + MESSAGE_HEADER_DECODER_TYPE; when(mockBuffer.getShort(bufferOffset + templateIdOffset, BYTE_ORDER)).thenReturn(templateId); final JavaGenerator generator = generator(); generator.generateTypeStubs(); generator.generateMessageHeaderStub(); final Class<?> clazz = compile(fqClassName); assertNotNull(clazz); final Object flyweight = clazz.getConstructor().newInstance(); final Method method = flyweight.getClass().getDeclaredMethod("wrap", READ_ONLY_BUFFER_CLASS, int.class); method.invoke(flyweight, mockBuffer, bufferOffset); final Integer result = (Integer)clazz.getDeclaredMethod("templateId").invoke(flyweight); assertThat(result, is((int)templateId)); }
@Test public void shouldGenerateMessageHeaderStub() throws Exception { final int bufferOffset = 64; final int templateIdOffset = 2; final short templateId = (short)7; final int blockLength = 32; final String fqClassName = ir.applicableNamespace() + "." + MESSAGE_HEADER_ENCODER_TYPE; when(mockBuffer.getShort(bufferOffset + templateIdOffset, BYTE_ORDER)).thenReturn(templateId); final JavaGenerator generator = generator(); generator.generateTypeStubs(); generator.generateMessageHeaderStub(); final Class<?> clazz = compile(fqClassName); assertNotNull(clazz); final Object flyweight = clazz.getConstructor().newInstance(); final Method method = flyweight.getClass().getDeclaredMethod("wrap", BUFFER_CLASS, int.class); method.invoke(flyweight, mockBuffer, bufferOffset); clazz.getDeclaredMethod("blockLength", int.class).invoke(flyweight, blockLength); verify(mockBuffer).putShort(bufferOffset, (short)blockLength, BYTE_ORDER); }
@Test public void shouldGenerateValidJava() throws Exception { System.setProperty(SbeTool.KEYWORD_APPEND_TOKEN, "_"); final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final MessageSchema schema = parse(TestUtil.getLocalResource("FixBinary.xml"), options); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final JavaGenerator generator = new JavaGenerator( ir, BUFFER_NAME, READ_ONLY_BUFFER_NAME, false, false, false, outputManager); outputManager.setPackageName(ir.applicableNamespace()); generator.generateMessageHeaderStub(); generator.generateTypeStubs(); generator.generate(); final Map<String, CharSequence> sources = outputManager.getSources(); final String className = "MDIncrementalRefreshTradeSummary42Decoder"; final String fqClassName = ir.applicableNamespace() + "." + className; final Class<?> aClass = CompilerUtil.compileInMemory(fqClassName, sources); assertNotNull(aClass); }
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 { 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); } }