@Override public Stream<Generator<?>> loadGenerators(ProcessingEnvironment processingEnv) { return Stream.of(new RxJava2Generator()); } }
@Override protected void genMethods(ClassModel model, MethodInfo method, List<String> cacheDecls, PrintWriter writer) { genMethod(model, method, cacheDecls, writer); MethodInfo flowableOverload = genOverloadedMethod(method, io.reactivex.Flowable.class); MethodInfo observableOverload = genOverloadedMethod(method, io.reactivex.Observable.class); if (flowableOverload != null) { genMethod(model, flowableOverload, cacheDecls, writer); } if (observableOverload != null) { genMethod(model, observableOverload, cacheDecls, writer); } }
@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); }
@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); }
@Override protected void genRxMethod(ClassModel model, MethodInfo method, PrintWriter writer) { MethodInfo futMethod = genFutureMethod(method); ClassTypeInfo raw = futMethod.getReturnType().getRaw(); String methodSimpleName = raw.getSimpleName(); String adapterType = "io.vertx.reactivex.impl.AsyncResult" + methodSimpleName + ".to" + methodSimpleName; String rxType = raw.getName(); startMethodTemplate(model.getType(), futMethod, "", writer); writer.println(" { "); writer.print(" return "); writer.print(adapterType); writer.println("(handler -> {"); writer.print(" "); writer.print(method.getName()); writer.print("("); List<ParamInfo> params = futMethod.getParams(); writer.print(params.stream().map(ParamInfo::getName).collect(Collectors.joining(", "))); if (params.size() > 0) { writer.print(", "); } writer.println("handler);"); writer.println(" });"); writer.println(" }"); writer.println(); }
private void genToXXXEr(TypeInfo streamType, String rxType, String rxName, PrintWriter writer) { writer.format(" public synchronized io.vertx.reactivex.WriteStream%s<%s> to%s() {%n", rxType, genTypeName(streamType), rxType); writer.format(" if (%s == null) {%n", rxName); if (streamType.getKind() == ClassKind.API) { writer.format(" java.util.function.Function<%s, %s> conv = %s::getDelegate;%n", genTypeName(streamType.getRaw()), streamType.getName(), genTypeName(streamType)); writer.format(" %s = io.vertx.reactivex.RxHelper.to%s(getDelegate(), conv);%n", rxName, rxType); } else if (streamType.isVariable()) { String typeVar = streamType.getSimpleName(); writer.format(" java.util.function.Function<%s, %s> conv = (java.util.function.Function<%s, %s>) __typeArg_0.unwrap;%n", typeVar, typeVar, typeVar, typeVar); writer.format(" %s = io.vertx.reactivex.RxHelper.to%s(getDelegate(), conv);%n", rxName, rxType); } else { writer.format(" %s = io.vertx.reactivex.RxHelper.to%s(getDelegate());%n", rxName, rxType); } writer.println(" }"); writer.format(" return %s;%n", rxName); writer.println(" }"); writer.println(); }
private MethodInfo genFutureMethod(MethodInfo method) { String futMethodName = genFutureMethodName(method); List<ParamInfo> futParams = new ArrayList<>(); int count = 0; int size = method.getParams().size() - 1; while (count < size) { ParamInfo param = method.getParam(count); /* Transform ReadStream -> Flowable */ futParams.add(param); count = count + 1; } ParamInfo futParam = method.getParam(size); TypeInfo futType = ((ParameterizedTypeInfo) ((ParameterizedTypeInfo) futParam.getType()).getArg(0)).getArg(0); TypeInfo futUnresolvedType = ((ParameterizedTypeInfo) ((ParameterizedTypeInfo) futParam.getUnresolvedType()).getArg(0)).getArg(0); TypeInfo futReturnType; if (futUnresolvedType.getKind() == VOID) { futReturnType = io.vertx.codegen.type.TypeReflectionFactory.create(io.reactivex.Completable.class); } else if (futUnresolvedType.isNullable()) { futReturnType = new io.vertx.codegen.type.ParameterizedTypeInfo(io.vertx.codegen.type.TypeReflectionFactory.create(io.reactivex.Maybe.class).getRaw(), false, Collections.singletonList(futType)); } else { futReturnType = new io.vertx.codegen.type.ParameterizedTypeInfo(io.vertx.codegen.type.TypeReflectionFactory.create(io.reactivex.Single.class).getRaw(), false, Collections.singletonList(futType)); } return method.copy().setName(futMethodName).setReturnType(futReturnType).setParams(futParams); }
writer.print(rxType); writer.print("<"); writer.print(genTypeName(streamType)); writer.print("> to"); writer.print(rxType); writer.print(streamType.getName()); writer.print(", "); writer.print(genTypeName(streamType)); writer.print("> conv = "); writer.print(genTypeName(streamType.getRaw())); writer.println("::newInstance;");