Skip to content

Commit

Permalink
Redo the fix to cover both flattened and non-flattened methods
Browse files Browse the repository at this point in the history
  • Loading branch information
meltsufin committed Oct 28, 2021
1 parent 8c59769 commit 96318ad
Show file tree
Hide file tree
Showing 10 changed files with 84 additions and 97 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;

public class DefaultValueComposer {
Expand Down Expand Up @@ -76,6 +77,7 @@ public static Expr createDefaultValue(
Expr defValue =
createDefaultValue(
resourceName,
methodArg.field().resourceReference().isChildType(),
resourceNames.values().stream().collect(Collectors.toList()),
methodArg.field().name());

Expand Down Expand Up @@ -175,17 +177,45 @@ static Expr createDefaultValue(Field f, boolean useExplicitInitTypeInGenerics) {
}

public static Expr createDefaultValue(
ResourceName resourceName, List<ResourceName> resnames, String fieldOrMessageName) {
return createDefaultValueResourceHelper(resourceName, resnames, fieldOrMessageName, true);
ResourceName resourceName,
boolean isChildType,
List<ResourceName> resnames,
String fieldOrMessageName) {
return createDefaultValueResourceHelper(
resourceName, isChildType, resnames, fieldOrMessageName, true);
}

private static Optional<ResourceName> findParentResource(
ResourceName childResource, List<ResourceName> resourceNames) {
for (ResourceName parent : resourceNames) {
for (String parentPattern : parent.patterns()) {
String[] parentPatternParts = parentPattern.split("/");
for (String childPattern : childResource.patterns()) {
String[] childPatternParts = childPattern.split("/");
if (parentPattern.length() < childPattern.length()
&& childPattern.startsWith(parentPattern)
&& childPatternParts.length - parentPatternParts.length == 2) {
return Optional.of(parent);
}
}
}
}

return Optional.empty();
}

@VisibleForTesting
static Expr createDefaultValueResourceHelper(
ResourceName resourceName,
boolean isChildType,
List<ResourceName> resnames,
String fieldOrMessageName,
boolean allowAnonResourceNameClass) {

if (isChildType) {
resourceName = findParentResource(resourceName, resnames).orElse(resourceName);
}

boolean hasOnePattern = resourceName.patterns().size() == 1;
if (resourceName.isOnlyWildcard()) {
List<ResourceName> unexaminedResnames = new ArrayList<>(resnames);
Expand All @@ -195,7 +225,7 @@ static Expr createDefaultValueResourceHelper(
continue;
}
unexaminedResnames.remove(resname);
return createDefaultValue(resname, unexaminedResnames, fieldOrMessageName);
return createDefaultValue(resname, false, unexaminedResnames, fieldOrMessageName);
}

if (unexaminedResnames.isEmpty()) {
Expand Down Expand Up @@ -280,9 +310,12 @@ public static Expr createSimpleMessageBuilderExpr(
Expr defaultExpr = null;
if (field.hasResourceReference()
&& resourceNames.get(field.resourceReference().resourceTypeString()) != null) {
ResourceName resourceName =
resourceNames.get(field.resourceReference().resourceTypeString());
defaultExpr =
createDefaultValueResourceHelper(
resourceNames.get(field.resourceReference().resourceTypeString()),
field.resourceReference().isChildType(),
resourceNames.values().stream().collect(Collectors.toList()),
message.name(),
/* allowAnonResourceNameClass = */ false);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1301,6 +1301,7 @@ private static List<Expr> createRpcMethodArgumentDefaultValueExprs(
.setExprReferenceExpr(
DefaultValueComposer.createDefaultValue(
resourceNames.get(arg.field().resourceReference().resourceTypeString()),
arg.field().resourceReference().isChildType(),
resourceNameList,
arg.field().name()))
.setMethodName("toString")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ private static Map<TypeNode, Field> parseTypeFromArgumentName(
return typeToField;
}

// Parse the resource name types.
// Parse the resource name tyeps.
List<ResourceName> resourceNameArgs =
ResourceReferenceParser.parseResourceNames(
field.resourceReference(),
Expand All @@ -206,18 +206,7 @@ private static Map<TypeNode, Field> parseTypeFromArgumentName(
resourceNames,
patternsToResourceNames);
outputArgResourceNames.addAll(resourceNameArgs);
// For flattened methods, use the first candidate resource reference.
if (resourceNameArgs.size() >= 1) {
typeToField.put(
TypeNode.STRING,
field
.toBuilder()
.setResourceReference(
ResourceReference.withType(resourceNameArgs.get(0).resourceTypeString()))
.build());
} else {
typeToField.put(TypeNode.STRING, field);
}
typeToField.put(TypeNode.STRING, field);
typeToField.putAll(
resourceNameArgs.stream()
.collect(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ public void defaultValue_resourceNameWithOnePattern() {
Expr expr =
DefaultValueComposer.createDefaultValue(
resourceName,
false,
typeStringsToResourceNames.values().stream().collect(Collectors.toList()),
"ignored");
expr.accept(writerVisitor);
Expand All @@ -177,6 +178,7 @@ public void defaultValue_resourceNameWithMultiplePatterns() {
Expr expr =
DefaultValueComposer.createDefaultValue(
resourceName,
false,
typeStringsToResourceNames.values().stream().collect(Collectors.toList()),
"ignored");
expr.accept(writerVisitor);
Expand All @@ -194,6 +196,7 @@ public void defaultValue_resourceNameWithWildcardPattern() {
Expr expr =
DefaultValueComposer.createDefaultValue(
resourceName,
false,
typeStringsToResourceNames.values().stream().collect(Collectors.toList()),
"ignored");
expr.accept(writerVisitor);
Expand All @@ -216,6 +219,7 @@ public void defaultValue_wildcardResourceNameWithOnlyDeletedTopic() {
Expr expr =
DefaultValueComposer.createDefaultValue(
resourceName,
false,
typeStringsToResourceNames.values().stream().collect(Collectors.toList()),
"ignored");
expr.accept(writerVisitor);
Expand All @@ -236,6 +240,7 @@ public void defaultValue_resourceNameWithOnlyWildcards_valueOnly() {
Expr expr =
DefaultValueComposer.createDefaultValueResourceHelper(
resourceName,
false,
Collections.emptyList(),
fallbackField,
/* allowAnonResourceNameClass = */ false);
Expand All @@ -257,7 +262,7 @@ public void defaultValue_resourceNameWithOnlyWildcards_allowAnonResourceNameClas
String fallbackField = "foobar";
Expr expr =
DefaultValueComposer.createDefaultValue(
resourceName, Collections.emptyList(), fallbackField);
resourceName, false, Collections.emptyList(), fallbackField);
expr.accept(writerVisitor);
String expected =
LineFormatter.lines(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -832,9 +832,7 @@ public class MessagingClient implements BackgroundResource {
* try (MessagingClient messagingClient = MessagingClient.create()) {
* CreateBlurbRequest request =
* CreateBlurbRequest.newBuilder()
* .setParent(
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
* .toString())
* .setParent(ProfileName.of("[USER]").toString())
* .setBlurb(Blurb.newBuilder().build())
* .build();
* Blurb response = messagingClient.createBlurb(request);
Expand All @@ -856,9 +854,7 @@ public class MessagingClient implements BackgroundResource {
* try (MessagingClient messagingClient = MessagingClient.create()) {
* CreateBlurbRequest request =
* CreateBlurbRequest.newBuilder()
* .setParent(
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
* .toString())
* .setParent(ProfileName.of("[USER]").toString())
* .setBlurb(Blurb.newBuilder().build())
* .build();
* ApiFuture<Blurb> future = messagingClient.createBlurbCallable().futureCall(request);
Expand Down Expand Up @@ -1151,9 +1147,7 @@ public class MessagingClient implements BackgroundResource {
* try (MessagingClient messagingClient = MessagingClient.create()) {
* ListBlurbsRequest request =
* ListBlurbsRequest.newBuilder()
* .setParent(
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
* .toString())
* .setParent(ProfileName.of("[USER]").toString())
* .setPageSize(883849137)
* .setPageToken("pageToken873572522")
* .build();
Expand All @@ -1178,9 +1172,7 @@ public class MessagingClient implements BackgroundResource {
* try (MessagingClient messagingClient = MessagingClient.create()) {
* ListBlurbsRequest request =
* ListBlurbsRequest.newBuilder()
* .setParent(
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
* .toString())
* .setParent(ProfileName.of("[USER]").toString())
* .setPageSize(883849137)
* .setPageToken("pageToken873572522")
* .build();
Expand All @@ -1204,9 +1196,7 @@ public class MessagingClient implements BackgroundResource {
* try (MessagingClient messagingClient = MessagingClient.create()) {
* ListBlurbsRequest request =
* ListBlurbsRequest.newBuilder()
* .setParent(
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
* .toString())
* .setParent(ProfileName.of("[USER]").toString())
* .setPageSize(883849137)
* .setPageToken("pageToken873572522")
* .build();
Expand Down Expand Up @@ -1258,9 +1248,7 @@ public class MessagingClient implements BackgroundResource {
* SearchBlurbsRequest request =
* SearchBlurbsRequest.newBuilder()
* .setQuery("query107944136")
* .setParent(
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
* .toString())
* .setParent(ProfileName.of("[USER]").toString())
* .setPageSize(883849137)
* .setPageToken("pageToken873572522")
* .build();
Expand All @@ -1285,9 +1273,7 @@ public class MessagingClient implements BackgroundResource {
* SearchBlurbsRequest request =
* SearchBlurbsRequest.newBuilder()
* .setQuery("query107944136")
* .setParent(
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
* .toString())
* .setParent(ProfileName.of("[USER]").toString())
* .setPageSize(883849137)
* .setPageToken("pageToken873572522")
* .build();
Expand All @@ -1312,9 +1298,7 @@ public class MessagingClient implements BackgroundResource {
* SearchBlurbsRequest request =
* SearchBlurbsRequest.newBuilder()
* .setQuery("query107944136")
* .setParent(
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
* .toString())
* .setParent(ProfileName.of("[USER]").toString())
* .setPageSize(883849137)
* .setPageToken("pageToken873572522")
* .build();
Expand All @@ -1335,11 +1319,7 @@ public class MessagingClient implements BackgroundResource {
* <pre>{@code
* try (MessagingClient messagingClient = MessagingClient.create()) {
* StreamBlurbsRequest request =
* StreamBlurbsRequest.newBuilder()
* .setName(
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
* .toString())
* .build();
* StreamBlurbsRequest.newBuilder().setName(ProfileName.of("[USER]").toString()).build();
* ServerStream<StreamBlurbsResponse> stream =
* messagingClient.streamBlurbsCallable().call(request);
* for (StreamBlurbsResponse response : stream) {
Expand Down Expand Up @@ -1380,9 +1360,7 @@ public class MessagingClient implements BackgroundResource {
* messagingClient.sendBlurbs().clientStreamingCall(responseObserver);
* CreateBlurbRequest request =
* CreateBlurbRequest.newBuilder()
* .setParent(
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
* .toString())
* .setParent(ProfileName.of("[USER]").toString())
* .setBlurb(Blurb.newBuilder().build())
* .build();
* requestObserver.onNext(request);
Expand Down

0 comments on commit 96318ad

Please sign in to comment.