private void determineApiTypes() { importedTypes = collectedTypes.stream(). map(ClassTypeInfo::getRaw). flatMap(Helper.instanceOf(ClassTypeInfo.class)). filter(t -> !t.getPackageName().equals(ifaceFQCN)). collect(Collectors.toSet()); referencedTypes = collectedTypes.stream(). map(ClassTypeInfo::getRaw). flatMap(Helper.instanceOf(ApiTypeInfo.class)). filter(t -> !t.equals(type.getRaw())). collect(Collectors.toSet()); referencedDataObjectTypes = collectedTypes.stream(). map(ClassTypeInfo::getRaw). flatMap(Helper.instanceOf(DataObjectTypeInfo.class)). filter(t -> t.getKind() == ClassKind.DATA_OBJECT). collect(Collectors.toSet()); referencedEnumTypes = collectedTypes.stream(). map(ClassTypeInfo::getRaw). flatMap(Helper.instanceOf(EnumTypeInfo.class)). filter(t -> t.getKind() == ClassKind.ENUM). collect(Collectors.toSet()); }
@Override public String render(EnumModel 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/enums\" />\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(); } }
private void render(EnumModel model, PrintWriter html) { html.append("[[").append(model.getType().getSimpleName()).append("]]\n"); html.append("== ").append(model.getType().getSimpleName()).append("\n"); html.append("\n"); Doc doc = model.getDoc(); if (doc != null) { html.append("++++\n"); Token.toHtml(doc.getTokens(), "", Tag::getName, "\n", html); html.append("++++\n"); html.append("'''\n"); } html.append("\n"); html.append("[cols=\">25%,75%\"]\n"); html.append("[frame=\"topbot\"]\n"); html.append("|===\n"); html.append("^|Name | Description\n"); model.getValues().forEach(value -> { html.append("|[[").append(value.getIdentifier()).append("]]`").append(value.getIdentifier()).append("`"); html.append("|"); if (value.getDoc() != null) { html.append("+++\n"); html.append(Token.toHtml(value.getDoc().getTokens(), "", Tag::getName, "\n").trim()).append("\n"); html.append("+++\n"); } else { html.append("-\n"); } }); html.append("|===\n"); } }
@Test public void testEnum() throws Exception { doTest(EnumHolder.class, map -> { EnumTypeInfo apiEnum = (EnumTypeInfo) map.get("apiEnum"); assertEquals(ClassKind.ENUM, apiEnum.getKind()); assertEquals(Arrays.asList("RED", "GREEN", "BLUE"), apiEnum.getValues()); assertTrue(apiEnum.isGen()); EnumTypeInfo otherEnum = (EnumTypeInfo) map.get("otherEnum"); assertEquals(ClassKind.ENUM, otherEnum.getKind()); assertEquals(Arrays.asList("NANOSECONDS", "MICROSECONDS", "MILLISECONDS", "SECONDS", "MINUTES", "HOURS", "DAYS"), otherEnum.getValues()); assertFalse(otherEnum.isGen()); }); }
return null; if (type.getKind() == ClassKind.ENUM && ((EnumTypeInfo) type).isGen()) { String baselink; if (coordinate == null) {
@Test public void testValidEnumParam() throws Exception { ClassModel model = new GeneratorHelper().generateClass(MethodWithEnumParam.class); assertEquals(MethodWithEnumParam.class.getName(), model.getIfaceFQCN()); assertEquals(MethodWithEnumParam.class.getSimpleName(), model.getIfaceSimpleName()); assertTrue(model.getImportedTypes().contains(TypeReflectionFactory.create(TestEnum.class))); assertTrue(model.getReferencedTypes().isEmpty()); assertTrue(model.getSuperTypes().isEmpty()); assertEquals(2, model.getMethods().size()); MethodInfo method = model.getMethods().get(0); checkMethod(method, "methodWithEnumParam", 1, "void", MethodKind.OTHER); List<ParamInfo> params = method.getParams(); checkParam(params.get(0), "weirdo", TestEnum.class); EnumTypeInfo enumType = (EnumTypeInfo) params.get(0).getType(); assertFalse(enumType.isGen()); assertEquals(Arrays.asList("TIM", "JULIEN", "NICK", "WESTON"), enumType.getValues()); method = model.getMethods().get(1); checkMethod(method, "methodWithGenEnumParam", 1, "void", MethodKind.OTHER); params = method.getParams(); checkParam(params.get(0), "weirdo", TestGenEnum.class); enumType = (EnumTypeInfo) params.get(0).getType(); assertTrue(enumType.isGen()); assertEquals(Arrays.asList("LAURA", "BOB", "MIKE", "LELAND"), enumType.getValues()); }
if (enumType.getRaw().getModuleName().equals(type.getModuleName())) { writer.printf("import { %s } from './enums';\n", enumType.getSimpleName()); imports = true; } else { writer.printf("import { %s } from '%s/enums';\n", enumType.getSimpleName(), getNPMScope(enumType.getRaw().getModule())); imports = true;
assertEquals(TestDataObject.class.getName(), model.getReferencedDataObjectTypes().iterator().next().getName()); assertEquals(1, model.getReferencedEnumTypes().size()); assertEquals(TestEnum.class.getName(), model.getReferencedEnumTypes().iterator().next().getName());
return new EnumTypeInfo( fqcn, classType.getDeclaredAnnotation(VertxGen.class) != null,
@Override public ModuleInfo getModule() { return type.getModule(); } }
@Override public String render(EnumModel model, int index, int size, Map<String, Object> session) { StringWriter sw = new StringWriter(); PrintWriter writer = new PrintWriter(sw); if (index == 0) { Util.generateLicense(writer); } else { writer.print("\n"); } writer.printf("export enum %s {\n", model.getType().getRaw().getSimpleName()); for (int i = 0; i < model.getValues().size(); i++) { EnumValueInfo value = model.getValues().get(i); writer.printf(" %s", value.getIdentifier()); if (i != model.getValues().size() - 1) { writer.print(","); } writer.print("\n"); } writer.print("}\n"); return sw.toString(); } }
@Override public String resolveTypeLink(TypeElement elt, Coordinate coordinate) { TypeInfo type = null; try { type = factory.create(elt.asType()); } catch (Exception e) { System.out.println("Could not resolve doc link for type " + elt.getQualifiedName()); return null; } if (type.getKind().equals(ClassKind.ENUM) && ((EnumTypeInfo)type).isGen()) { String baselink = null; if (coordinate == null) baselink = "../"; else baselink = "../../" + coordinate.getArtifactId() + "/"; return baselink + "enums.html#" + elt.getSimpleName().toString(); } if (type.getKind().equals(ClassKind.DATA_OBJECT)) { String baselink = null; if (coordinate == null) baselink = "../"; else baselink = "../../" + coordinate.getArtifactId() + "/"; return baselink + "dataobjects.html#" + elt.getSimpleName().toString(); } if (type.getKind().equals(ClassKind.API)) { ApiTypeInfo api = (ApiTypeInfo)type.getRaw(); return "../../scaladocs/" + api.translateName("scala").replace('.', '/') + ".html"; } return null; }
return new EnumTypeInfo(fqcn, gen, values, module, nullable); } else { ClassKind kind = ClassKind.getKind(fqcn, elt.getAnnotation(DataObject.class) != null, elt.getAnnotation(VertxGen.class) != null);
} else if (rawType.getKind() == ENUM && ((EnumTypeInfo) rawType).isGen()) { if (label.length() == 0) { label = rawType.getSimpleName();
@Override public String render(EnumModel 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/enums\" />\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(); } }
@Test public void testEnum() throws Exception { EnumModel model = new GeneratorHelper().generateEnum(ValidEnum.class); assertEquals(Arrays.asList("RED", "GREEN", "BLUE"), model.getValues().stream(). map(EnumValueInfo::getIdentifier). collect(Collectors.toList())); assertEquals(Arrays.asList("RED doc", "GREEN doc", "BLUE doc"), model.getValues().stream(). map(e -> e.getDoc().toString()). collect(Collectors.toList())); assertEquals("enum", model.getKind()); assertEquals("ValidEnum doc", model.getDoc().toString()); assertEquals(ValidEnum.class.getName(), model.getFqn()); assertEquals("dummy", model.getModule().getName()); assertTrue(model.getType().isGen()); }