public List<TypeInfo> abstractClasses(Collection<TypeInfo> classTypeInfos) { return classTypeInfos .stream() .filter(clazz -> !((ApiTypeInfo)clazz.getRaw()).isConcrete()) .collect(Collectors.toList()); } }
public TypeInfo getHandlerType() { return (type.getKind() == ClassKind.API) ? ((ApiTypeInfo)type).getHandlerArg() : null; }
@Override protected void genToObservable(ApiTypeInfo type, PrintWriter writer) { TypeInfo streamType = type.getReadStreamArg(); writer.print(" private io.reactivex.Observable<"); writer.print(genTypeName(streamType)); writer.println("> observable;"); writer.print(" private io.reactivex.Flowable<"); writer.print(genTypeName(streamType)); writer.println("> flowable;"); writer.println(); genToXXXAble(streamType, "Observable", "observable", writer); genToXXXAble(streamType, "Flowable", "flowable", writer); }
@Test public void testInterfaceExtendingWriteStream() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceExtentingWriteStream.class); ApiTypeInfo apiType = (ApiTypeInfo) model.getType(); assertFalse(apiType.isReadStream()); assertNull(apiType.getReadStreamArg()); assertTrue(apiType.isWriteStream()); assertEquals(TypeReflectionFactory.create(String.class), apiType.getWriteStreamArg()); assertFalse(apiType.isHandler()); }
@Test public void testInterfaceExtendingHandlerVertxGenSubtype() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceExtendingHandlerVertxGenSubtype.class, VertxGenClass1.class); TypeInfo handlerSuperType = model.getHandlerType(); assertEquals(TypeReflectionFactory.create(VertxGenClass1.class), handlerSuperType); ApiTypeInfo apiType = (ApiTypeInfo) model.getType(); assertTrue(apiType.isHandler()); assertEquals(TypeReflectionFactory.create(VertxGenClass1.class), apiType.getHandlerArg()); assertFalse(apiType.isReadStream()); assertFalse(apiType.isWriteStream()); assertEquals(1, model.getMethodMap().size()); assertEquals(1, model.getMethodMap().get("handle").size()); checkMethod(model.getMethodMap().get("handle").get(0), "handle", 1, "void", MethodKind.OTHER); }
if (api.isReadStream()) { genToObservable(api, writer); if (api.isWriteStream()) { genToSubscriber(api, writer);
@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; }
@Override protected void genToSubscriber(ApiTypeInfo type, PrintWriter writer) { TypeInfo streamType = type.getWriteStreamArg(); writer.format(" private io.vertx.reactivex.WriteStreamObserver<%s> observer;%n", genTypeName(streamType)); writer.format(" private io.vertx.reactivex.WriteStreamSubscriber<%s> subscriber;%n", genTypeName(streamType)); writer.println(); genToXXXEr(streamType, "Observer", "observer", writer); genToXXXEr(streamType, "Subscriber", "subscriber", writer); }
java.lang.reflect.TypeVariable<Class<ReadStream>> classTypeVariable = ReadStream.class.getTypeParameters()[0]; Type readStreamArg = Helper.resolveTypeParameter(type, classTypeVariable); return new ApiTypeInfo(fqcn, true, typeParams, readStreamArg != null ? create(readStreamArg) : null, null, null, module, false, false); } else if (kind == ClassKind.DATA_OBJECT) { boolean _abstract = Modifier.isAbstract(classType.getModifiers());
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()); }
@Test public void testInterfaceSubtypingReadStream() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceSubtypingReadStream.class); ApiTypeInfo apiType = (ApiTypeInfo) model.getType(); assertTrue(apiType.isReadStream()); assertEquals(TypeReflectionFactory.create(String.class), apiType.getReadStreamArg()); assertFalse(apiType.isWriteStream()); assertNull(apiType.getWriteStreamArg()); assertFalse(apiType.isHandler()); }
@Test public void testInterfaceExtendingHandlerStringSubtype() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceExtendingHandlerStringSubtype.class); TypeInfo handlerSuperType = model.getHandlerType(); assertEquals(TypeReflectionFactory.create(String.class), handlerSuperType); ApiTypeInfo apiType = (ApiTypeInfo) model.getType(); assertTrue(apiType.isHandler()); assertEquals(TypeReflectionFactory.create(String.class), apiType.getHandlerArg()); assertFalse(apiType.isReadStream()); assertFalse(apiType.isWriteStream()); assertEquals(1, model.getMethodMap().size()); assertEquals(1, model.getMethodMap().get("handle").size()); checkMethod(model.getMethodMap().get("handle").get(0), "handle", 1, "void", MethodKind.OTHER); }
if (api.isReadStream()) { genToObservable(api, writer); if (api.isWriteStream()) { genToSubscriber(api, writer);
@Test public void testModuleScopedSubApiModel() throws Exception { ClassModel model = new GeneratorHelper().generateClass(ModuleScopedSubApi.class); assertEquals(ModuleScopedSubApi.class.getName(), model.getFqn()); assertEquals("io.vertx.test.codegen.testmodule.modulescoped", model.getModule().getPackageName()); assertEquals("simple", model.getModule().getName()); ApiTypeInfo type = (ApiTypeInfo) model.getType(); assertEquals("io.vertx.test.groovy.codegen.testmodule.modulescoped.sub.ModuleScopedSubApi", type.translateName("groovy")); assertEquals("io.vertx.test.ceylon.simple.sub.ModuleScopedSubApi", type.translateName(TypeNameTranslator.composite("ceylon"))); }
raw = new ApiTypeInfo(fqcn, genAnn.concrete(), typeParams, args[0], args[1], args[2], module, nullable, proxyGen); } else if (kind == ClassKind.DATA_OBJECT) { boolean _abstract = elt.getModifiers().contains(Modifier.ABSTRACT);
@Test public void testInterfaceExtendingReadStream() throws Exception { ClassModel model = new GeneratorHelper().generateClass(InterfaceExtentingReadStream.class); ApiTypeInfo apiType = (ApiTypeInfo) model.getType(); assertTrue(apiType.isReadStream()); assertEquals(TypeReflectionFactory.create(String.class), apiType.getReadStreamArg()); assertFalse(apiType.isWriteStream()); assertNull(apiType.getWriteStreamArg()); assertFalse(apiType.isHandler()); }
public List<TypeInfo> classes(Collection<TypeInfo> classTypeInfos) { return classTypeInfos .stream() .filter(clazz -> ((ApiTypeInfo)clazz.getRaw()).isConcrete()) .collect(Collectors.toList()); }
@Test public void testEmptyPkg() throws Exception { ClassModel model = new GeneratorHelper().generateClass(EmptyPkg.class); assertEquals(EmptyPkg.class.getName(), model.getIfaceFQCN()); assertEquals("io.vertx.test.codegen.testmodule.emptypkg", model.getModule().getPackageName()); assertEquals("simple", model.getModule().getName()); ApiTypeInfo type = (ApiTypeInfo) model.getType(); assertEquals("io.vertx.test.groovy.codegen.testmodule.emptypkg.empty.sub.EmptyPkg", type.translateName("groovy")); assertEquals("io.vertx.test.ceylon.simple.empty.sub.EmptyPkg", type.translateName(TypeNameTranslator.composite("ceylon"))); }
@Test public void testStream() throws Exception { doTest(StreamHolder.class, map -> { ApiTypeInfo readStreamOfString = assertApi(assertParameterized(map.get("readStreamOfString"), "io.vertx.core.streams.ReadStream<java.lang.String>", ClassKind.API).getRaw(), "io.vertx.core.streams.ReadStream"); assertTypeVariable(readStreamOfString.getReadStreamArg(), "T"); ApiTypeInfo extendsReadStreamWithClassArg = assertApi(map.get("extendsReadStreamWithClassArg"), InterfaceExtentingReadStream.class.getName()); assertClass(extendsReadStreamWithClassArg.getReadStreamArg(), "java.lang.String", ClassKind.STRING); ApiTypeInfo extendsGenericReadStreamSubTypeWithClassArg = assertApi(map.get("extendsGenericReadStreamSubTypeWithClassArg"), InterfaceSubtypingReadStream.class.getName()); assertClass(extendsGenericReadStreamSubTypeWithClassArg.getReadStreamArg(), "java.lang.String", ClassKind.STRING); ApiTypeInfo genericReadStreamSubTypeWithClassTypeParamArg = assertApi(assertParameterized(map.get("genericReadStreamSubTypeWithClassTypeParamArg"), ReadStreamWithParameterizedTypeArg.class.getName() + "<ClassTypeParam>", ClassKind.API).getRaw(), "io.vertx.test.codegen.testapi.streams.ReadStreamWithParameterizedTypeArg"); // Cannot assert the correct value for now becasue Java does not provide enough info }); }
@Test public void testGenericInterfaceExtendingReadStream() throws Exception { ClassModel model = new GeneratorHelper().generateClass(GenericInterfaceExtentingReadStream.class); ApiTypeInfo apiType = (ApiTypeInfo) model.getType().getRaw(); assertTrue(apiType.isReadStream()); TypeVariableInfo readStreamArg = (TypeVariableInfo) apiType.getReadStreamArg(); assertEquals("U", readStreamArg.getName()); assertFalse(apiType.isWriteStream()); assertNull(apiType.getWriteStreamArg()); assertFalse(apiType.isHandler()); }