use of com.google.api.generator.engine.ast.Reference in project gapic-generator-java by googleapis.
the class AbstractServiceStubSettingsClassComposer method createPagedListResponseFactoryAssignExpr.
private static Expr createPagedListResponseFactoryAssignExpr(VariableExpr pageStrDescVarExpr, Method method, TypeNode repeatedResponseType, TypeStore typeStore) {
Preconditions.checkState(method.isPaged(), String.format("Method %s is not paged", method.name()));
// Create the PagedListResponseFactory.
TypeNode pagedResponseType = typeStore.get(getPagedResponseTypeName(method.name()));
TypeNode apiFutureType = TypeNode.withReference(ConcreteReference.builder().setClazz(ApiFuture.class).setGenerics(Arrays.asList(pagedResponseType.reference())).build());
VariableExpr callableVarExpr = VariableExpr.withVariable(Variable.builder().setType(TypeNode.withReference(ConcreteReference.builder().setClazz(UnaryCallable.class).setGenerics(Arrays.asList(method.inputType().reference(), method.outputType().reference())).build())).setName("callable").build());
VariableExpr requestVarExpr = VariableExpr.withVariable(Variable.builder().setType(method.inputType()).setName("request").build());
VariableExpr contextVarExpr = VariableExpr.withVariable(Variable.builder().setType(FIXED_TYPESTORE.get("ApiCallContext")).setName("context").build());
VariableExpr futureResponseVarExpr = VariableExpr.withVariable(Variable.builder().setType(TypeNode.withReference(ConcreteReference.builder().setClazz(ApiFuture.class).setGenerics(Arrays.asList(method.outputType().reference())).build())).setName("futureResponse").build());
TypeNode pageContextType = TypeNode.withReference(ConcreteReference.builder().setClazz(PageContext.class).setGenerics(Arrays.asList(method.inputType(), method.outputType(), repeatedResponseType).stream().map(t -> t.reference()).collect(Collectors.toList())).build());
VariableExpr pageContextVarExpr = VariableExpr.withVariable(Variable.builder().setType(pageContextType).setName("pageContext").build());
AssignmentExpr pageContextAssignExpr = AssignmentExpr.builder().setVariableExpr(pageContextVarExpr.toBuilder().setIsDecl(true).build()).setValueExpr(MethodInvocationExpr.builder().setStaticReferenceType(FIXED_TYPESTORE.get("PageContext")).setMethodName("create").setArguments(callableVarExpr, pageStrDescVarExpr, requestVarExpr, contextVarExpr).setReturnType(pageContextVarExpr.type()).build()).build();
Expr returnExpr = MethodInvocationExpr.builder().setStaticReferenceType(typeStore.get(getPagedResponseTypeName(method.name()))).setMethodName("createAsync").setArguments(pageContextVarExpr, futureResponseVarExpr).setReturnType(apiFutureType).build();
MethodDefinition getFuturePagedResponseMethod = MethodDefinition.builder().setIsOverride(true).setScope(ScopeNode.PUBLIC).setReturnType(apiFutureType).setName("getFuturePagedResponse").setArguments(Arrays.asList(callableVarExpr, requestVarExpr, contextVarExpr, futureResponseVarExpr).stream().map(v -> v.toBuilder().setIsDecl(true).build()).collect(Collectors.toList())).setBody(Arrays.asList(ExprStatement.withExpr(pageContextAssignExpr))).setReturnExpr(returnExpr).build();
// Create the variable.
TypeNode pagedResponseFactoryType = TypeNode.withReference(ConcreteReference.builder().setClazz(PagedListResponseFactory.class).setGenerics(Arrays.asList(method.inputType(), method.outputType(), typeStore.get(getPagedResponseTypeName(method.name()))).stream().map(t -> t.reference()).collect(Collectors.toList())).build());
String varName = String.format(PAGED_RESPONSE_FACTORY_PATTERN, JavaStyle.toUpperSnakeCase(method.name()));
VariableExpr pagedListResponseFactoryVarExpr = VariableExpr.withVariable(Variable.builder().setType(pagedResponseFactoryType).setName(varName).build());
AnonymousClassExpr factoryAnonClassExpr = AnonymousClassExpr.builder().setType(pagedResponseFactoryType).setMethods(Arrays.asList(getFuturePagedResponseMethod)).build();
return AssignmentExpr.builder().setVariableExpr(pagedListResponseFactoryVarExpr.toBuilder().setIsDecl(true).setScope(ScopeNode.PRIVATE).setIsStatic(true).setIsFinal(true).build()).setValueExpr(factoryAnonClassExpr).build();
}
use of com.google.api.generator.engine.ast.Reference in project gapic-generator-java by googleapis.
the class AbstractServiceStubSettingsClassComposer method getCallSettingsType.
private static TypeNode getCallSettingsType(Method method, TypeStore typeStore, boolean isBatchingSettings, final boolean isSettingsBuilder) {
Function<Class<?>, TypeNode> typeMakerFn = clz -> TypeNode.withReference(ConcreteReference.withClazz(clz));
// Default: No streaming.
TypeNode callSettingsType = method.isPaged() ? typeMakerFn.apply(isSettingsBuilder ? PagedCallSettings.Builder.class : PagedCallSettings.class) : typeMakerFn.apply(isSettingsBuilder ? UnaryCallSettings.Builder.class : UnaryCallSettings.class);
if (isBatchingSettings) {
callSettingsType = typeMakerFn.apply(isSettingsBuilder ? BatchingCallSettings.Builder.class : BatchingCallSettings.class);
}
// Streaming takes precedence over paging, as per the monolith's existing behavior.
switch(method.stream()) {
case SERVER:
callSettingsType = typeMakerFn.apply(isSettingsBuilder ? ServerStreamingCallSettings.Builder.class : ServerStreamingCallSettings.class);
break;
case CLIENT:
// Fall through.
case BIDI:
callSettingsType = typeMakerFn.apply(isSettingsBuilder ? StreamingCallSettings.Builder.class : StreamingCallSettings.class);
break;
case NONE:
// Fall through.
default:
break;
}
List<Reference> generics = new ArrayList<>();
generics.add(method.inputType().reference());
generics.add(method.outputType().reference());
if (method.isPaged()) {
generics.add(typeStore.get(getPagedResponseTypeName(method.name())).reference());
}
return TypeNode.withReference(callSettingsType.reference().copyAndSetGenerics(generics));
}
use of com.google.api.generator.engine.ast.Reference in project gapic-generator-java by googleapis.
the class AbstractServiceStubSettingsClassComposer method createNestedClassSettingsBuilderGetterMethods.
private static List<MethodDefinition> createNestedClassSettingsBuilderGetterMethods(Map<String, VariableExpr> nestedMethodSettingsMemberVarExprs, Set<String> nestedDeprecatedSettingVarNames) {
Reference operationCallSettingsBuilderRef = ConcreteReference.withClazz(OperationCallSettings.Builder.class);
Function<TypeNode, Boolean> isOperationCallSettingsBuilderFn = t -> t.reference().copyAndSetGenerics(ImmutableList.of()).equals(operationCallSettingsBuilderRef);
AnnotationNode lroBetaAnnotation = AnnotationNode.builder().setType(FIXED_TYPESTORE.get("BetaApi")).setDescription("The surface for use by generated code is not stable yet and may change in the" + " future.").build();
AnnotationNode deprecatedAnnotation = AnnotationNode.withType(TypeNode.DEPRECATED);
List<MethodDefinition> javaMethods = new ArrayList<>();
for (Map.Entry<String, VariableExpr> settingsVarEntry : nestedMethodSettingsMemberVarExprs.entrySet()) {
String varName = settingsVarEntry.getKey();
VariableExpr settingsVarExpr = settingsVarEntry.getValue();
boolean isOperationCallSettings = isOperationCallSettingsBuilderFn.apply(settingsVarExpr.type());
List<AnnotationNode> annotations = new ArrayList<>();
if (isOperationCallSettings) {
annotations.add(lroBetaAnnotation);
}
boolean isDeprecated = nestedDeprecatedSettingVarNames.contains(varName);
if (isDeprecated) {
annotations.add(deprecatedAnnotation);
}
javaMethods.add(MethodDefinition.builder().setHeaderCommentStatements(SettingsCommentComposer.createCallSettingsBuilderGetterComment(getMethodNameFromSettingsVarName(varName), isDeprecated)).setAnnotations(annotations).setScope(ScopeNode.PUBLIC).setReturnType(settingsVarExpr.type()).setName(settingsVarExpr.variable().identifier().name()).setReturnExpr(settingsVarExpr).build());
}
return javaMethods;
}
use of com.google.api.generator.engine.ast.Reference in project gapic-generator-java by googleapis.
the class AbstractServiceStubSettingsClassComposer method createNestedUnaryMethodSettingsBuildersVarExpr.
private static VariableExpr createNestedUnaryMethodSettingsBuildersVarExpr() {
Reference builderRef = ConcreteReference.builder().setClazz(UnaryCallSettings.Builder.class).setGenerics(Arrays.asList(TypeNode.WILDCARD_REFERENCE, TypeNode.WILDCARD_REFERENCE)).build();
TypeNode varType = TypeNode.withReference(ConcreteReference.builder().setClazz(ImmutableList.class).setGenerics(Arrays.asList(builderRef)).build());
return VariableExpr.withVariable(Variable.builder().setType(varType).setName(NESTED_UNARY_METHOD_SETTINGS_BUILDERS_VAR_NAME).build());
}
use of com.google.api.generator.engine.ast.Reference in project gapic-generator-java by googleapis.
the class AbstractServiceClientClassComposer method createNestedRpcPagedResponseClass.
private static ClassDefinition createNestedRpcPagedResponseClass(Method method, TypeNode repeatedResponseType, Map<String, Message> messageTypes, TypeStore typeStore) {
Preconditions.checkState(method.isPaged(), String.format("Expected method %s to be paged", method.name()));
String className = String.format("%sPagedResponse", JavaStyle.toUpperCamelCase(method.name()));
TypeNode thisClassType = typeStore.get(className);
String upperJavaMethodName = JavaStyle.toUpperCamelCase(method.name());
TypeNode methodPageType = typeStore.get(String.format("%sPage", upperJavaMethodName));
TypeNode classExtendsType = TypeNode.withReference(ConcreteReference.builder().setClazz(AbstractPagedListResponse.class).setGenerics(Arrays.asList(method.inputType(), method.outputType(), repeatedResponseType, methodPageType, typeStore.get(String.format("%sFixedSizeCollection", upperJavaMethodName))).stream().map(t -> t.reference()).collect(Collectors.toList())).build());
// createAsync method - variables.
VariableExpr contextVarExpr = VariableExpr.withVariable(Variable.builder().setName("context").setType(TypeNode.withReference(ConcreteReference.builder().setClazz(PageContext.class).setGenerics(Arrays.asList(method.inputType(), method.outputType(), repeatedResponseType).stream().map(t -> t.reference()).collect(Collectors.toList())).build())).build());
VariableExpr futureResponseVarExpr = VariableExpr.withVariable(Variable.builder().setName("futureResponse").setType(TypeNode.withReference(ConcreteReference.builder().setClazz(ApiFuture.class).setGenerics(Arrays.asList(method.outputType().reference())).build())).build());
VariableExpr futurePageVarExpr = VariableExpr.withVariable(Variable.builder().setName("futurePage").setType(TypeNode.withReference(ConcreteReference.builder().setClazz(ApiFuture.class).setGenerics(Arrays.asList(methodPageType.reference())).build())).build());
// createAsync method - assignment expression.
MethodInvocationExpr createPageAsyncExpr = MethodInvocationExpr.builder().setStaticReferenceType(methodPageType).setMethodName("createEmptyPage").build();
createPageAsyncExpr = MethodInvocationExpr.builder().setExprReferenceExpr(createPageAsyncExpr).setMethodName("createPageAsync").setArguments(contextVarExpr, futureResponseVarExpr).setReturnType(futurePageVarExpr.type()).build();
AssignmentExpr futurePageAssignExpr = AssignmentExpr.builder().setVariableExpr(futurePageVarExpr.toBuilder().setIsDecl(true).build()).setValueExpr(createPageAsyncExpr).build();
// createAsync method - anonymous class expression.
VariableExpr inputVarExpr = VariableExpr.withVariable(Variable.builder().setName("input").setType(methodPageType).build());
// Overrides ApiFunction.apply.
// (https://github.com/googleapis/api-common-java/blob/debf25960dea0367b0d3b5e16d57d76c1d01947e/src/main/java/com/google/api/core/ApiFunction.java).
Expr pageToTransformExpr = LambdaExpr.builder().setArguments(inputVarExpr.toBuilder().setIsDecl(true).build()).setReturnExpr(NewObjectExpr.builder().setType(thisClassType).setArguments(inputVarExpr).build()).build();
// createAsync method - return expression.
TypeNode returnType = TypeNode.withReference(ConcreteReference.builder().setClazz(ApiFuture.class).setGenerics(Arrays.asList(typeStore.get(className).reference())).build());
Expr returnExpr = MethodInvocationExpr.builder().setStaticReferenceType(typeStore.get("ApiFutures")).setMethodName("transform").setArguments(futurePageVarExpr, pageToTransformExpr, MethodInvocationExpr.builder().setStaticReferenceType(typeStore.get("MoreExecutors")).setMethodName("directExecutor").build()).setReturnType(returnType).build();
MethodDefinition createAsyncMethod = MethodDefinition.builder().setScope(ScopeNode.PUBLIC).setIsStatic(true).setReturnType(returnType).setName("createAsync").setArguments(Arrays.asList(contextVarExpr, futureResponseVarExpr).stream().map(e -> e.toBuilder().setIsDecl(true).build()).collect(Collectors.toList())).setBody(Arrays.asList(ExprStatement.withExpr(futurePageAssignExpr))).setReturnExpr(returnExpr).build();
// Private constructor.
VariableExpr pageVarExpr = VariableExpr.withVariable(Variable.builder().setName("page").setType(methodPageType).build());
MethodDefinition privateCtor = MethodDefinition.constructorBuilder().setScope(ScopeNode.PRIVATE).setReturnType(thisClassType).setArguments(pageVarExpr.toBuilder().setIsDecl(true).build()).setBody(Arrays.asList(ExprStatement.withExpr(// Shortcut.
ReferenceConstructorExpr.superBuilder().setType(methodPageType).setArguments(pageVarExpr, MethodInvocationExpr.builder().setStaticReferenceType(typeStore.get(String.format("%sFixedSizeCollection", upperJavaMethodName))).setMethodName("createEmptyCollection").build()).build()))).build();
List<MethodDefinition> javaMethods = new ArrayList<>();
javaMethods.add(createAsyncMethod);
javaMethods.add(privateCtor);
return ClassDefinition.builder().setIsNested(true).setScope(ScopeNode.PUBLIC).setIsStatic(true).setExtendsType(classExtendsType).setName(className).setMethods(javaMethods).build();
}
Aggregations