use of com.google.api.generator.engine.ast.MethodInvocationExpr in project gapic-generator-java by googleapis.
the class AbstractServiceCallableFactoryClassComposer method createGenericCallableMethod.
protected MethodDefinition createGenericCallableMethod(Service service, TypeStore typeStore, List<String> methodTemplateNames, String returnCallableKindName, List<String> returnCallableTemplateNames, String methodVariantName, List<Object> transportCallSettingsTemplateObjects, String callSettingsVariantName, List<Object> callSettingsTemplateObjects, List<AnnotationNode> annotations) {
String methodName = String.format("create%sCallable", methodVariantName);
String callSettingsTypeName = String.format("%sCallSettings", callSettingsVariantName);
String returnTypeName = String.format("%sCallable", returnCallableKindName);
boolean isOperationCallable = methodVariantName.equals("Operation");
List<VariableExpr> arguments = new ArrayList<>();
arguments.add(VariableExpr.builder().setVariable(Variable.builder().setName(getTransportContext().transportCallSettingsName()).setType(getTransportContext().transportCallSettingsType()).build()).setIsDecl(true).setTemplateObjects(transportCallSettingsTemplateObjects).build());
arguments.add(VariableExpr.builder().setVariable(Variable.builder().setName("callSettings").setType(typeStore.get(callSettingsTypeName)).build()).setIsDecl(true).setTemplateObjects(callSettingsTemplateObjects).build());
arguments.add(VariableExpr.builder().setVariable(Variable.builder().setName("clientContext").setType(typeStore.get("ClientContext")).build()).setIsDecl(true).build());
if (isOperationCallable) {
arguments.add(VariableExpr.builder().setVariable(Variable.builder().setName("operationsStub").setType(getOperationsStubType(service)).build()).setIsDecl(true).build());
}
TypeNode returnType = typeStore.get(returnTypeName);
MethodInvocationExpr returnExpr = MethodInvocationExpr.builder().setMethodName(methodName).setStaticReferenceType(getTransportContext().transportCallableFactoryType()).setArguments(arguments.stream().map(v -> v.toBuilder().setIsDecl(false).build()).collect(Collectors.toList())).setReturnType(returnType).build();
return MethodDefinition.builder().setIsOverride(true).setScope(ScopeNode.PUBLIC).setTemplateNames(methodTemplateNames).setReturnType(returnType).setReturnTemplateNames(returnCallableTemplateNames).setName(methodName).setArguments(arguments).setReturnExpr(returnExpr).setAnnotations(annotations).build();
}
use of com.google.api.generator.engine.ast.MethodInvocationExpr 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();
}
use of com.google.api.generator.engine.ast.MethodInvocationExpr in project gapic-generator-java by googleapis.
the class AbstractServiceClientClassComposer method createCallableMethod.
private static MethodDefinition createCallableMethod(Service service, Method method, CallableMethodKind callableMethodKind, TypeStore typeStore, Map<String, Message> messageTypes, Map<String, ResourceName> resourceNames, List<Sample> samples) {
TypeNode rawCallableReturnType = null;
if (callableMethodKind.equals(CallableMethodKind.LRO)) {
rawCallableReturnType = typeStore.get("OperationCallable");
} else {
switch(method.stream()) {
case CLIENT:
rawCallableReturnType = typeStore.get("ClientStreamingCallable");
break;
case SERVER:
rawCallableReturnType = typeStore.get("ServerStreamingCallable");
break;
case BIDI:
rawCallableReturnType = typeStore.get("BidiStreamingCallable");
break;
case NONE:
// Fall through.
default:
rawCallableReturnType = typeStore.get("UnaryCallable");
}
}
// Set generics.
TypeNode returnType = TypeNode.withReference(rawCallableReturnType.reference().copyAndSetGenerics(getGenericsForCallable(callableMethodKind, method, typeStore)));
String rawMethodName = JavaStyle.toLowerCamelCase(method.name());
String methodName = getCallableName(callableMethodKind, rawMethodName);
TypeNode stubType = typeStore.get(ClassNames.getServiceStubClassName(service));
MethodInvocationExpr returnExpr = MethodInvocationExpr.builder().setExprReferenceExpr(VariableExpr.builder().setVariable(Variable.builder().setName("stub").setType(stubType).build()).build()).setMethodName(methodName).setReturnType(returnType).build();
Optional<Sample> sampleCode = Optional.empty();
if (callableMethodKind.equals(CallableMethodKind.LRO)) {
sampleCode = Optional.of(ServiceClientCallableMethodSampleComposer.composeLroCallableMethod(method, typeStore.get(ClassNames.getServiceClientClassName(service)), resourceNames, messageTypes));
} else if (callableMethodKind.equals(CallableMethodKind.PAGED)) {
sampleCode = Optional.of(ServiceClientCallableMethodSampleComposer.composePagedCallableMethod(method, typeStore.get(ClassNames.getServiceClientClassName(service)), resourceNames, messageTypes));
} else if (callableMethodKind.equals(CallableMethodKind.REGULAR)) {
if (method.stream().equals(Stream.NONE)) {
sampleCode = Optional.of(ServiceClientCallableMethodSampleComposer.composeRegularCallableMethod(method, typeStore.get(ClassNames.getServiceClientClassName(service)), resourceNames, messageTypes));
} else {
sampleCode = Optional.of(ServiceClientCallableMethodSampleComposer.composeStreamCallableMethod(method, typeStore.get(ClassNames.getServiceClientClassName(service)), resourceNames, messageTypes));
}
}
Optional<String> sampleDocCode = Optional.empty();
if (sampleCode.isPresent()) {
samples.add(sampleCode.get());
sampleDocCode = Optional.of(SampleCodeWriter.writeInlineSample(sampleCode.get().body()));
}
MethodDefinition.Builder methodDefBuilder = MethodDefinition.builder();
if (method.isDeprecated()) {
methodDefBuilder = methodDefBuilder.setAnnotations(Arrays.asList(AnnotationNode.withType(TypeNode.DEPRECATED)));
}
return methodDefBuilder.setHeaderCommentStatements(ServiceClientCommentComposer.createRpcCallableMethodHeaderComment(method, sampleDocCode)).setScope(ScopeNode.PUBLIC).setIsFinal(true).setName(methodName).setReturnType(returnType).setReturnExpr(returnExpr).build();
}
use of com.google.api.generator.engine.ast.MethodInvocationExpr in project gapic-generator-java by googleapis.
the class JavaWriterVisitor method visit.
@Override
public void visit(MethodInvocationExpr methodInvocationExpr) {
// Expression or static reference.
if (methodInvocationExpr.exprReferenceExpr() != null) {
methodInvocationExpr.exprReferenceExpr().accept(this);
buffer.append(DOT);
} else if (methodInvocationExpr.staticReferenceType() != null) {
methodInvocationExpr.staticReferenceType().accept(this);
buffer.append(DOT);
}
if (methodInvocationExpr.isGeneric()) {
leftAngle();
int numGenerics = methodInvocationExpr.generics().size();
for (int i = 0; i < numGenerics; i++) {
buffer.append(methodInvocationExpr.generics().get(i).name());
if (i < numGenerics - 1) {
buffer.append(COMMA);
space();
}
}
rightAngle();
}
methodInvocationExpr.methodIdentifier().accept(this);
leftParen();
int numArguments = methodInvocationExpr.arguments().size();
for (int i = 0; i < numArguments; i++) {
Expr argExpr = methodInvocationExpr.arguments().get(i);
argExpr.accept(this);
if (i < numArguments - 1) {
buffer.append(COMMA);
space();
}
}
rightParen();
}
use of com.google.api.generator.engine.ast.MethodInvocationExpr in project gapic-generator-java by googleapis.
the class ResourceNameHelperClassComposer method createOfOrFormatMethodHelper.
private static List<MethodDefinition> createOfOrFormatMethodHelper(ResourceName resourceName, Map<String, VariableExpr> patternTokenVarExprs, List<List<String>> tokenHierarchies, TypeStore typeStore, boolean isFormatMethod) {
List<MethodDefinition> javaMethods = new ArrayList<>();
String methodNameFormat = isFormatMethod ? "format%s" : "of%s";
String newBuilderMethodNameFormat = "new%s";
String setMethodNameFormat = "set%s";
String buildMethodName = "build";
String toStringMethodName = "toString";
AnnotationNode betaAnnotation = AnnotationNode.builder().setType(FIXED_TYPESTORE.get("BetaApi")).setDescription(String.format("The static %s methods are not stable yet and may be changed in the future.", isFormatMethod ? "format" : "create")).build();
List<AnnotationNode> annotations = Arrays.asList(betaAnnotation);
TypeNode thisClassType = typeStore.get(getThisClassName(resourceName));
TypeNode returnType = isFormatMethod ? TypeNode.STRING : thisClassType;
// Create the newBuilder and variation methods here.
// Variation example: newProjectLocationAutoscalingPolicyBuilder().
boolean hasVariants = tokenHierarchies.size() > 1;
for (int i = 0; i < tokenHierarchies.size(); i++) {
List<String> tokens = tokenHierarchies.get(i);
// PubSub special-case handling.
if (tokens.contains(ResourceNameConstants.DELETED_TOPIC_LITERAL)) {
Expr deletedTopicStringValExpr = ValueExpr.withValue(StringObjectValue.withValue(ResourceNameConstants.DELETED_TOPIC_LITERAL));
// Simply return `new TopicName("_deleted-topic_")` or the string value itself.
javaMethods.add(MethodDefinition.builder().setScope(ScopeNode.PUBLIC).setIsStatic(true).setAnnotations(annotations).setReturnType(returnType).setName(String.format(methodNameFormat, concatToUpperCamelCaseName(tokens) + "Name")).setReturnExpr(returnType.equals(TypeNode.STRING) ? deletedTopicStringValExpr : NewObjectExpr.builder().setType(returnType).setArguments(deletedTopicStringValExpr).build()).build());
continue;
}
String builderMethodName = String.format(newBuilderMethodNameFormat, getBuilderTypeName(tokenHierarchies, i));
MethodInvocationExpr returnExpr = MethodInvocationExpr.builder().setMethodName(builderMethodName).build();
for (String token : tokens) {
String javaTokenVarName = JavaStyle.toLowerCamelCase(token);
returnExpr = MethodInvocationExpr.builder().setExprReferenceExpr(returnExpr).setMethodName(String.format(setMethodNameFormat, JavaStyle.toUpperCamelCase(token))).setArguments(Arrays.asList(VariableExpr.withVariable(Variable.builder().setName(javaTokenVarName).setType(TypeNode.STRING).build()))).build();
}
returnExpr = MethodInvocationExpr.builder().setExprReferenceExpr(returnExpr).setMethodName(buildMethodName).setReturnType(thisClassType).build();
if (isFormatMethod) {
returnExpr = MethodInvocationExpr.builder().setExprReferenceExpr(returnExpr).setMethodName(toStringMethodName).setReturnType(TypeNode.STRING).build();
}
List<VariableExpr> methodArgs = tokens.stream().map(t -> patternTokenVarExprs.get(t).toBuilder().setIsDecl(true).build()).collect(Collectors.toList());
javaMethods.add(MethodDefinition.builder().setScope(ScopeNode.PUBLIC).setIsStatic(true).setAnnotations(i == 0 ? Collections.emptyList() : annotations).setReturnType(returnType).setName(String.format(methodNameFormat, i == 0 ? "" : concatToUpperCamelCaseName(tokens) + "Name")).setArguments(methodArgs).setReturnExpr(returnExpr).build());
if (i == 0 && hasVariants) {
javaMethods.add(MethodDefinition.builder().setScope(ScopeNode.PUBLIC).setIsStatic(true).setAnnotations(annotations).setReturnType(returnType).setName(String.format(methodNameFormat, concatToUpperCamelCaseName(tokenHierarchies.get(i)) + "Name")).setArguments(methodArgs).setReturnExpr(returnExpr).build());
}
}
return javaMethods;
}
Aggregations