@Override public String getFqn() { return type.getName(); }
private static boolean rawTypeIs(TypeInfo type, Class<?>... classes) { if (type instanceof ParameterizedTypeInfo) { String rawClassName = type.getRaw().getName(); for (Class<?> c : classes) { if (rawClassName.equals(c.getName())) { return true; } } } return false; }
@Override public String getFqn() { return type.getRaw().getName(); }
public Set<String> adjustedImports(ClassTypeInfo type, Set<TypeInfo> importedTypes) { Set<String> imps = TypeHelper.generateImports(type, importedTypes, Collections.emptyList()); imps.add("io.vertx.lang.scala.HandlerOps._"); imps.add("scala.reflect.runtime.universe._"); imps.add("io.vertx.lang.scala.Converter._"); //Change //import io.vertx.scala.ext.web.common.template.TemplateEngine if(type.getName().equals("io.vertx.ext.web.templ.TemplateEngine")) { imps.remove("io.vertx.scala.ext.web.common.template.TemplateEngine"); imps.add("io.vertx.scala.ext.web.common.template.{TemplateEngine => STemplateEngine}"); imps.remove("io.vertx.ext.web.common.template.{TemplateEngine => JTemplateEngine}"); } if(type.getName().equals("io.vertx.core.Vertx")) { imps.add("io.vertx.lang.scala.ScalaVerticle"); } return imps; }
private void generateDoc(ClassModel model, PrintWriter writer) { ClassTypeInfo type = model.getType(); Doc doc = model.getDoc(); if (doc != null) { writer.println("/**"); Token.toHtml(doc.getTokens(), " *", this::renderLinkToHtml, "\n", writer); writer.println(" *"); writer.println(" * <p/>"); writer.print(" * NOTE: This class has been automatically generated from the {@link "); writer.print(type.getName()); writer.println(" original} non RX-ified interface using Vert.x codegen."); writer.println(" */"); } }
public static boolean isMethodNeedsOverride(String callingClassName, MethodInfo method) { if (method.getName().equals("toString") && method.getParams().isEmpty()) { return true; } else { /*There is only one entry in here (0 would be a bug)*/ for (ClassTypeInfo ownerType : method.getOwnerTypes()) { if (!ownerType.getName().equals(callingClassName)) { return true; } } return false; } }
private void generateDoc(ClassModel model, PrintWriter writer) { ClassTypeInfo type = model.getType(); Doc doc = model.getDoc(); if (doc != null) { writer.println("/**"); Token.toHtml(doc.getTokens(), " *", this::renderLinkToHtml, "\n", writer); writer.println(" *"); writer.println(" * <p/>"); writer.print(" * NOTE: This class has been automatically generated from the {@link "); writer.print(type.getName()); writer.println(" original} non RX-ified interface using Vert.x codegen."); writer.println(" */"); } }
public static String renderLinkToHtml(Tag.Link link) { ClassTypeInfo rawType = link.getTargetType().getRaw(); if (rawType.getModule() != null) { String label = link.getLabel().trim(); if (rawType.getKind() == ClassKind.DATA_OBJECT) { return "[" + rawType.getName() + "]"; } else { if (rawType.getKind() == ClassKind.API) { String ret = "[" + rawType.getName() + "]"; if (label.length() > 0) { ret += "[" + label + "]" + ret; } return ret; } } } return "[" + rawType.getName() + "]"; } }
private void genRequire(ClassModel model, PrintWriter writer) { ClassTypeInfo type = model.getType(); writer.println("var utils = require('vertx-js/util/utils');"); for (ClassTypeInfo referencedType : model.getReferencedTypes()) { writer.format("var %s = require('%s');\n", referencedType.getSimpleName(), getModuleName(referencedType)); } writer.println(); //The top level vars for the module writer.println("var io = Packages.io;"); writer.println("var JsonObject = io.vertx.core.json.JsonObject;"); writer.format("var J%s = Java.type('%s');\n", type.getSimpleName(), type.getName()); for (ClassTypeInfo dataObjectType : model.getReferencedDataObjectTypes()) { writer.format("var %s = Java.type('%s');\n", dataObjectType.getSimpleName(), dataObjectType.getName()); } } }
@Override public String filename(DataObjectModel model) { return model.getType().getName().replace(".", "_") + ".properties"; }
@Override public String render(DataObjectModel model, int index, int size, Map<String, Object> session) { StringWriter sw = new StringWriter(); PrintWriter writer = new PrintWriter(sw); if (index == 0) { Util.generateLicense(writer); writer.printf("/// <reference types=\"%s/options\" />\n", getNPMScope(model.getType().getRaw().getModule())); } writer.printf("export const %s = Java.type('%s');\n", model.getType().getRaw().getSimpleName(), model.getType().getName()); return sw.toString(); } }
@Override public String render(DataObjectModel model, int index, int size, Map<String, Object> session) { StringWriter sw = new StringWriter(); PrintWriter writer = new PrintWriter(sw); if (index == 0) { Util.generateLicense(writer); writer.printf("/// <reference types=\"%s/options\" />\n", getNPMScope(model.getType().getRaw().getModule())); writer.print("module.exports = {\n"); } writer.printf(" %s: Java.type('%s')", model.getType().getRaw().getSimpleName(), model.getType().getName()); if (index != size - 1) { writer.print(','); } writer.print('\n'); if (index == size - 1) { writer.print("};\n"); } return sw.toString(); } }
@Override public String render(ClassModel model, int index, int size, Map<String, Object> session) { StringWriter sw = new StringWriter(); PrintWriter writer = new PrintWriter(sw); if (index == 0) { Util.generateLicense(writer); writer.printf("/// <reference types=\"%s\" />\n", getNPMScope(model.getType().getRaw().getModule())); if (model.getType().getRaw().getModuleName().equals("vertx")) { writer.print("export const AsyncResult = Java.type('io.vertx.core.AsyncResult');\n"); } } writer.printf("export const %s = Java.type('%s');\n", model.getType().getRaw().getSimpleName(), model.getType().getName()); return sw.toString(); } }
private void genConstant(ClassModel model, ConstantInfo constant, PrintWriter writer) { Doc doc = constant.getDoc(); if (doc != null) { writer.println(" /**"); Token.toHtml(doc.getTokens(), " *", this::renderLinkToHtml, "\n", writer); writer.println(" */"); } writer.print(model.isConcrete() ? " public static final" : ""); writer.println(" " + constant.getType().getSimpleName() + " " + constant.getName() + " = " + genConvReturn(constant.getType(), null, model.getType().getName() + "." + constant.getName()) + ";"); }
private void genConstant(ClassModel model, ConstantInfo constant, PrintWriter writer) { Doc doc = constant.getDoc(); if (doc != null) { writer.println(" /**"); Token.toHtml(doc.getTokens(), " *", this::renderLinkToHtml, "\n", writer); writer.println(" */"); } writer.print(model.isConcrete() ? " public static final" : ""); writer.println(" " + constant.getType().getSimpleName() + " " + constant.getName() + " = " + genConvReturn(constant.getType(), null, model.getType().getName() + "." + constant.getName()) + ";"); }
private void generateImport(DataObjectModel model, CodeWriter writer) { writer.println("import " + model.getType().getRaw().getName()); Set<String> genImports = new TreeSet<>(); for (PropertyInfo p : model.getPropertyMap().values()) { ClassKind propertyKind = p.getType().getKind(); if ((propertyKind == ClassKind.ENUM || propertyKind == ClassKind.DATA_OBJECT) && !p.getType().equals(model.getType())) { genImports.add(p.getType().getName()); } } for (String i : genImports) { writer.println("import " + i); } }
private ClassTypeInfo assertClass(TypeInfo type, String expectedName, ClassKind expectedKind) { assertEquals(ClassTypeInfo.class, type.getClass()); ClassTypeInfo classType = (ClassTypeInfo) type; assertEquals(expectedKind, classType.getKind()); assertEquals(expectedName, classType.getName()); return classType; }
private void generateDoc(DataObjectModel model, CodeWriter writer) { Doc doc = model.getDoc(); if (doc != null) { writer.println("/**"); writer.println(" * A function providing a DSL for building [" + model.getType().getName() + "] objects."); writer.println(" *"); Token.toHtml(doc.getTokens(), " *", KotlinCodeGenHelper::renderLinkToHtml, "\n", writer); writer.println(" *"); model.getPropertyMap().values().stream().filter(filterProperties()).forEach(p -> { writer.print(" * @param " + p.getName() + " "); if (p.getDoc() != null) { String docInfo = Token.toHtml(p.getDoc().getTokens(), "", KotlinCodeGenHelper::renderLinkToHtml, "").replace("/*", "/<star>"); writer.print(docInfo); } writer.println(); }); writer.println(" *"); writer.println(" * <p/>"); writer.println(" * NOTE: This function has been automatically generated from the [" + model.getType().getName() + " original] using Vert.x codegen."); writer.println(" */"); } }
@Test public void testClassAnnotated() throws Exception { DataObjectModel model = new GeneratorHelper().generateDataObject(AnnotatedDataObject.class); assertTrue(model.getPropertyMap().values().stream().allMatch(PropertyInfo::isAnnotated)); assertEquals(1, model.getPropertyMap().get("annotatedWithClassValue").getAnnotations().size()); assertEquals(3, model.getPropertyMap().get("annotatedWithClassValue").getAnnotations().get(0).getMembersNames().size()); assertNotNull(model.getPropertyMap().get("annotatedWithClassValue").getAnnotations().get(0).getMember("value")); assertNotNull(model.getPropertyMap().get("annotatedWithClassValue").getAnnotations().get(0).getMember("array")); assertNotNull(model.getPropertyMap().get("annotatedWithClassValue").getAnnotations().get(0).getMember("defaultValue")); assertEquals(String.class, Class.forName(((ClassTypeInfo) model.getPropertyMap().get("annotatedWithClassValue").getAnnotations().get(0).getMember("value")).getName())); assertArrayEquals(new Class[]{String.class, String.class}, ((List) model.getPropertyMap().get("annotatedWithClassValue").getAnnotations().get(0).getMember("array")).stream().map(i -> { try { return Class.forName(((ClassTypeInfo) i).getName()); } catch (ClassNotFoundException e) { e.printStackTrace(); return null; } }).toArray()); assertEquals(String.class, Class.forName(((ClassTypeInfo) model.getPropertyMap().get("annotatedWithClassValue").getAnnotations().get(0).getMember("defaultValue")).getName())); }
@Test public void testMethodWithTypeVarParamByGenericType() throws Exception { Runnable test = () -> { try { ClassModel model = new GeneratorHelper().generateClass(MethodWithTypeVarParamByGenericType.class); MethodInfo meth = model.getMethods().get(0); ParamInfo param = meth.getParam(0); ParameterizedTypeInfo handler = (ParameterizedTypeInfo) param.getType(); assertEquals(Handler.class.getName(), handler.getRaw().getName()); ParameterizedTypeInfo genericInt2 = (ParameterizedTypeInfo) handler.getArg(0); assertEquals(GenericInterface2.class.getName(), genericInt2.getRaw().getName()); TypeVariableInfo k = (TypeVariableInfo) genericInt2.getArg(0); assertEquals("K", k.getName()); TypeVariableInfo v = (TypeVariableInfo) genericInt2.getArg(1); assertEquals("V", v.getName()); } catch (Exception e) { throw new AssertionError(e); } }; blacklist(test, Stream.of(WriteStream.class)); test.run(); }