public CodeGenerator newInstance(final Ir ir, final String outputDir) { return new JavaGenerator( ir, System.getProperty(JAVA_ENCODING_BUFFER_TYPE, JAVA_DEFAULT_ENCODING_BUFFER_TYPE), System.getProperty(JAVA_DECODING_BUFFER_TYPE, JAVA_DEFAULT_DECODING_BUFFER_TYPE), Boolean.getBoolean(JAVA_GROUP_ORDER_ANNOTATION), Boolean.getBoolean(JAVA_GENERATE_INTERFACES), Boolean.getBoolean(DECODE_UNKNOWN_ENUM_VALUES), new PackageOutputManager(outputDir, ir.applicableNamespace())); } },
private void generateCompositeFlyweightHeader( final Token token, final String typeName, final Writer out, final String buffer, final String fqBuffer, final String implementsString) throws IOException { out.append(generateFileHeader(ir.applicableNamespace(), fqBuffer)); out.append(generateDeclaration(typeName, implementsString, token)); out.append(generateFixedFlyweightCode(typeName, token.encodedLength(), buffer)); }
private void generateFixedFlyweightHeader( final Token token, final String typeName, final String implementsString, final Writer out, final String buffer, final String fqBuffer) throws IOException { out.append(generateFileHeader(ir.applicableNamespace(), fqBuffer)); out.append(generateDeclaration(typeName, implementsString, token)); out.append(generateFixedFlyweightCode(typeName, token.encodedLength(), buffer)); }
private Class<?> getModelClass(final Object encoder) throws ClassNotFoundException { final String className = "Model"; final String fqClassName = ir.applicableNamespace() + "." + className; return encoder.getClass().getClassLoader().loadClass(fqClassName); }
private void generateComposite(final List<Token> tokens) throws IOException { final String compositeName = CSharpUtil.formatClassName(tokens.get(0).applicableTypeName()); try (Writer out = outputManager.createOutput(compositeName)) { out.append(generateFileHeader(ir.applicableNamespace())); out.append(generateClassDeclaration(compositeName)); out.append(generateFixedFlyweightCode(tokens.get(0).encodedLength())); out.append(generateCompositePropertyElements(tokens.subList(1, tokens.size() - 1), BASE_INDENT)); out.append(INDENT + "}\n"); out.append("}\n"); } }
private Object getAEnumConstant( final Object flyweight, final String enumClassName, final int constantIndex) throws Exception { final String fqClassName = ir.applicableNamespace() + "." + enumClassName; return flyweight.getClass().getClassLoader().loadClass(fqClassName).getEnumConstants()[constantIndex]; }
public CodeGenerator newInstance(final Ir ir, final String outputDir) { return new CSharpGenerator(ir, new CSharpNamespaceOutputManager(outputDir, ir.applicableNamespace())); } }
public static CodeGenerator defaultRustGenerator(final Ir ir, final String outputDir) { return new RustGenerator(ir, new RustFlatFileOutputManager(outputDir, ir.applicableNamespace())); } }
public CodeGenerator newInstance(final Ir ir, final String outputDir) { return new CppGenerator(ir, new NamespaceOutputManager(outputDir, ir.applicableNamespace())); } },
public CodeGenerator newInstance(final Ir ir, final String outputDir) { return new GolangGenerator(ir, new GolangOutputManager(outputDir, ir.applicableNamespace())); } };
private void generateEnum(final List<Token> tokens) throws IOException { final Token enumToken = tokens.get(0); final String enumName = formatClassName(enumToken.applicableTypeName()); try (Writer out = outputManager.createOutput(enumName)) { out.append(generateEnumFileHeader(ir.applicableNamespace())); out.append(generateEnumDeclaration(enumName, enumToken)); out.append(generateEnumValues(getMessageBody(tokens))); out.append(generateEnumBody(enumToken, enumName)); out.append(generateEnumLookupMethod(getMessageBody(tokens), enumName)); out.append("}\n"); } }
private Class<?> compileModel() throws Exception { final String className = "Model"; final String fqClassName = ir.applicableNamespace() + "." + className; final Class<?> clazz = compile(fqClassName); assertNotNull(clazz); return clazz; }
private Class<?> compileCarDecoder() throws Exception { final String className = "CarDecoder"; final String fqClassName = ir.applicableNamespace() + "." + className; final Class<?> readerClass = compile(fqClassName); assertNotNull(readerClass); return readerClass; }
private Class<?> compileCarEncoder() throws Exception { final String className = "CarEncoder"; final String fqClassName = ir.applicableNamespace() + "." + className; final Class<?> clazz = compile(fqClassName); assertNotNull(clazz); return clazz; }
@Test public void shouldGenerateUint8EnumStub() throws Exception { final String className = "BooleanType"; final String fqClassName = ir.applicableNamespace() + "." + className; generateTypeStubs(); final Class<?> clazz = compile(fqClassName); assertNotNull(clazz); final Object result = clazz.getDeclaredMethod("get", short.class).invoke(null, (short)1); assertThat(result.toString(), is("T")); }
private Class<?> compile(final String className) throws Exception { final String fqClassName = ir.applicableNamespace() + "." + className; final Map<String, CharSequence> sources = outputManager.getSources(); final Class<?> aClass = CompilerUtil.compileInMemory(fqClassName, sources); if (aClass == null) { System.out.println(sources); } assertNotNull(aClass); return aClass; }
@Before public void setUp() throws Exception { final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final MessageSchema schema = parse(TestUtil.getLocalResource("code-generation-schema.xml"), options); final IrGenerator irg = new IrGenerator(); ir = irg.generate(schema); outputManager.clear(); outputManager.setPackageName(ir.applicableNamespace()); }
@Before public void setup() throws Exception { final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final MessageSchema schema = parse(TestUtil.getLocalResource("extension-schema.xml"), options); final IrGenerator irg = new IrGenerator(); ir = irg.generate(schema); outputManager.clear(); outputManager.setPackageName(ir.applicableNamespace()); generator().generate(); }
@Test(expected = IllegalArgumentException.class) public void shouldThrowWhenUsingATypeThatIsNotConstrainedToFitInAnIntAsTheGroupSize() throws Exception { final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final MessageSchema schema = parse(TestUtil.getLocalResource("issue567-invalid.xml"), options); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final StringWriterOutputManager outputManager = new StringWriterOutputManager(); outputManager.setPackageName(ir.applicableNamespace()); final CSharpGenerator generator = new CSharpGenerator(ir, outputManager); // Act + Assert (exception thrown) generator.generate(); }
@Test public void shouldGenerateWhenUsingATypeThatIsConstrainedToFitInAnIntAsTheGroupSize() throws Exception { final ParserOptions options = ParserOptions.builder().stopOnError(true).build(); final MessageSchema schema = parse(TestUtil.getLocalResource("issue567-valid.xml"), options); final IrGenerator irg = new IrGenerator(); final Ir ir = irg.generate(schema); final StringWriterOutputManager outputManager = new StringWriterOutputManager(); outputManager.setPackageName(ir.applicableNamespace()); final CSharpGenerator generator = new CSharpGenerator(ir, outputManager); // Act + Assert (no exception) generator.generate(); } }