Skip to content

Commit

Permalink
Use Function Interface
Browse files Browse the repository at this point in the history
  • Loading branch information
summer-ji-eng committed Dec 9, 2020
1 parent 6bb57b8 commit b956a40
Show file tree
Hide file tree
Showing 2 changed files with 165 additions and 57 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

Expand Down Expand Up @@ -229,7 +230,7 @@ static TryCatchStatement composeUnaryRpcMethodSampleCode(
List<Expr> rpcMethodArgDefaultValueExprs =
createRpcMethodArgumentDefaultValueExprs(arguments, resourceNames);
List<Expr> bodyExprs =
createMethodArgAssignmentWithDefaultValue(
createAssignmentsForVarExprsWithValueExprs(
rpcMethodArgVarExprs, rpcMethodArgDefaultValueExprs);
// Invoke current method based on return type.
// e.g. if return void, echoClient.echo(..); or,
Expand Down Expand Up @@ -288,7 +289,7 @@ static TryCatchStatement composeUnaryPagedRpcMethodSampleCode(
List<Expr> rpcMethodArgDefaultValueExprs =
createRpcMethodArgumentDefaultValueExprs(arguments, resourceNames);
List<Expr> bodyExprs =
createMethodArgAssignmentWithDefaultValue(
createAssignmentsForVarExprsWithValueExprs(
rpcMethodArgVarExprs, rpcMethodArgDefaultValueExprs);
// For loop paged response item on iterateAll method.
// e.g. for (LogEntry element : loggingServiceV2Client.ListLogs(parent).iterateAll()) {
Expand Down Expand Up @@ -354,37 +355,38 @@ private static List<Expr> createRpcMethodArgumentDefaultValueExprs(
List<MethodArgument> arguments, Map<String, ResourceName> resourceNames) {
List<ResourceName> resourceNameList =
resourceNames.values().stream().collect(Collectors.toList());
Function<MethodArgument, MethodInvocationExpr> stringResourceNameDefaultValueExpr =
arg ->
MethodInvocationExpr.builder()
.setExprReferenceExpr(
DefaultValueComposer.createDefaultValue(
resourceNames.get(arg.field().resourceReference().resourceTypeString()),
resourceNameList,
arg.field().name()))
.setMethodName("toString")
.setReturnType(TypeNode.STRING)
.build();
return arguments.stream()
.map(
arg ->
!isStringTypedResourceName(arg, resourceNames)
? DefaultValueComposer.createDefaultValue(arg, resourceNames)
: MethodInvocationExpr.builder()
.setExprReferenceExpr(
DefaultValueComposer.createDefaultValue(
resourceNames.get(
arg.field().resourceReference().resourceTypeString()),
resourceNameList,
arg.field().name()))
.setMethodName("toString")
.setReturnType(TypeNode.STRING)
.build())
: stringResourceNameDefaultValueExpr.apply(arg))
.collect(Collectors.toList());
}

// Create a list of assignment expressions for method argument with its default value.
private static List<Expr> createMethodArgAssignmentWithDefaultValue(
List<VariableExpr> rpcMethodArgVarExprs, List<Expr> rpcMethodArgDefaultValueExprs) {
// Create a list of assignment expressions for variable expr with value expr.
private static List<Expr> createAssignmentsForVarExprsWithValueExprs(
List<VariableExpr> variableExprs, List<Expr> valueExprs) {
Preconditions.checkState(
rpcMethodArgVarExprs.size() == rpcMethodArgDefaultValueExprs.size(),
variableExprs.size() == valueExprs.size(),
"Expected the number of method arguments to match the number of default values.");
return IntStream.range(0, rpcMethodArgVarExprs.size())
return IntStream.range(0, variableExprs.size())
.mapToObj(
i ->
AssignmentExpr.builder()
.setVariableExpr(
rpcMethodArgVarExprs.get(i).toBuilder().setIsDecl(true).build())
.setValueExpr(rpcMethodArgDefaultValueExprs.get(i))
.setVariableExpr(variableExprs.get(i).toBuilder().setIsDecl(true).build())
.setValueExpr(valueExprs.get(i))
.build())
.collect(Collectors.toList());
}
Expand Down
Loading

0 comments on commit b956a40

Please sign in to comment.