Skip to content

Commit 96318ad

Browse files
committed
Redo the fix to cover both flattened and non-flattened methods
1 parent 8c59769 commit 96318ad

File tree

10 files changed

+84
-97
lines changed

10 files changed

+84
-97
lines changed

src/main/java/com/google/api/generator/gapic/composer/defaultvalue/DefaultValueComposer.java

+36-3
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import java.util.HashSet;
4949
import java.util.List;
5050
import java.util.Map;
51+
import java.util.Optional;
5152
import java.util.stream.Collectors;
5253

5354
public class DefaultValueComposer {
@@ -76,6 +77,7 @@ public static Expr createDefaultValue(
7677
Expr defValue =
7778
createDefaultValue(
7879
resourceName,
80+
methodArg.field().resourceReference().isChildType(),
7981
resourceNames.values().stream().collect(Collectors.toList()),
8082
methodArg.field().name());
8183

@@ -175,17 +177,45 @@ static Expr createDefaultValue(Field f, boolean useExplicitInitTypeInGenerics) {
175177
}
176178

177179
public static Expr createDefaultValue(
178-
ResourceName resourceName, List<ResourceName> resnames, String fieldOrMessageName) {
179-
return createDefaultValueResourceHelper(resourceName, resnames, fieldOrMessageName, true);
180+
ResourceName resourceName,
181+
boolean isChildType,
182+
List<ResourceName> resnames,
183+
String fieldOrMessageName) {
184+
return createDefaultValueResourceHelper(
185+
resourceName, isChildType, resnames, fieldOrMessageName, true);
186+
}
187+
188+
private static Optional<ResourceName> findParentResource(
189+
ResourceName childResource, List<ResourceName> resourceNames) {
190+
for (ResourceName parent : resourceNames) {
191+
for (String parentPattern : parent.patterns()) {
192+
String[] parentPatternParts = parentPattern.split("/");
193+
for (String childPattern : childResource.patterns()) {
194+
String[] childPatternParts = childPattern.split("/");
195+
if (parentPattern.length() < childPattern.length()
196+
&& childPattern.startsWith(parentPattern)
197+
&& childPatternParts.length - parentPatternParts.length == 2) {
198+
return Optional.of(parent);
199+
}
200+
}
201+
}
202+
}
203+
204+
return Optional.empty();
180205
}
181206

182207
@VisibleForTesting
183208
static Expr createDefaultValueResourceHelper(
184209
ResourceName resourceName,
210+
boolean isChildType,
185211
List<ResourceName> resnames,
186212
String fieldOrMessageName,
187213
boolean allowAnonResourceNameClass) {
188214

215+
if (isChildType) {
216+
resourceName = findParentResource(resourceName, resnames).orElse(resourceName);
217+
}
218+
189219
boolean hasOnePattern = resourceName.patterns().size() == 1;
190220
if (resourceName.isOnlyWildcard()) {
191221
List<ResourceName> unexaminedResnames = new ArrayList<>(resnames);
@@ -195,7 +225,7 @@ static Expr createDefaultValueResourceHelper(
195225
continue;
196226
}
197227
unexaminedResnames.remove(resname);
198-
return createDefaultValue(resname, unexaminedResnames, fieldOrMessageName);
228+
return createDefaultValue(resname, false, unexaminedResnames, fieldOrMessageName);
199229
}
200230

201231
if (unexaminedResnames.isEmpty()) {
@@ -280,9 +310,12 @@ public static Expr createSimpleMessageBuilderExpr(
280310
Expr defaultExpr = null;
281311
if (field.hasResourceReference()
282312
&& resourceNames.get(field.resourceReference().resourceTypeString()) != null) {
313+
ResourceName resourceName =
314+
resourceNames.get(field.resourceReference().resourceTypeString());
283315
defaultExpr =
284316
createDefaultValueResourceHelper(
285317
resourceNames.get(field.resourceReference().resourceTypeString()),
318+
field.resourceReference().isChildType(),
286319
resourceNames.values().stream().collect(Collectors.toList()),
287320
message.name(),
288321
/* allowAnonResourceNameClass = */ false);

src/main/java/com/google/api/generator/gapic/composer/samplecode/ServiceClientSampleCodeComposer.java

+1
Original file line numberDiff line numberDiff line change
@@ -1301,6 +1301,7 @@ private static List<Expr> createRpcMethodArgumentDefaultValueExprs(
13011301
.setExprReferenceExpr(
13021302
DefaultValueComposer.createDefaultValue(
13031303
resourceNames.get(arg.field().resourceReference().resourceTypeString()),
1304+
arg.field().resourceReference().isChildType(),
13041305
resourceNameList,
13051306
arg.field().name()))
13061307
.setMethodName("toString")

src/main/java/com/google/api/generator/gapic/protoparser/MethodSignatureParser.java

+2-13
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ private static Map<TypeNode, Field> parseTypeFromArgumentName(
197197
return typeToField;
198198
}
199199

200-
// Parse the resource name types.
200+
// Parse the resource name tyeps.
201201
List<ResourceName> resourceNameArgs =
202202
ResourceReferenceParser.parseResourceNames(
203203
field.resourceReference(),
@@ -206,18 +206,7 @@ private static Map<TypeNode, Field> parseTypeFromArgumentName(
206206
resourceNames,
207207
patternsToResourceNames);
208208
outputArgResourceNames.addAll(resourceNameArgs);
209-
// For flattened methods, use the first candidate resource reference.
210-
if (resourceNameArgs.size() >= 1) {
211-
typeToField.put(
212-
TypeNode.STRING,
213-
field
214-
.toBuilder()
215-
.setResourceReference(
216-
ResourceReference.withType(resourceNameArgs.get(0).resourceTypeString()))
217-
.build());
218-
} else {
219-
typeToField.put(TypeNode.STRING, field);
220-
}
209+
typeToField.put(TypeNode.STRING, field);
221210
typeToField.putAll(
222211
resourceNameArgs.stream()
223212
.collect(

src/test/java/com/google/api/generator/gapic/composer/defaultvalue/DefaultValueComposerTest.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ public void defaultValue_resourceNameWithOnePattern() {
161161
Expr expr =
162162
DefaultValueComposer.createDefaultValue(
163163
resourceName,
164+
false,
164165
typeStringsToResourceNames.values().stream().collect(Collectors.toList()),
165166
"ignored");
166167
expr.accept(writerVisitor);
@@ -177,6 +178,7 @@ public void defaultValue_resourceNameWithMultiplePatterns() {
177178
Expr expr =
178179
DefaultValueComposer.createDefaultValue(
179180
resourceName,
181+
false,
180182
typeStringsToResourceNames.values().stream().collect(Collectors.toList()),
181183
"ignored");
182184
expr.accept(writerVisitor);
@@ -194,6 +196,7 @@ public void defaultValue_resourceNameWithWildcardPattern() {
194196
Expr expr =
195197
DefaultValueComposer.createDefaultValue(
196198
resourceName,
199+
false,
197200
typeStringsToResourceNames.values().stream().collect(Collectors.toList()),
198201
"ignored");
199202
expr.accept(writerVisitor);
@@ -216,6 +219,7 @@ public void defaultValue_wildcardResourceNameWithOnlyDeletedTopic() {
216219
Expr expr =
217220
DefaultValueComposer.createDefaultValue(
218221
resourceName,
222+
false,
219223
typeStringsToResourceNames.values().stream().collect(Collectors.toList()),
220224
"ignored");
221225
expr.accept(writerVisitor);
@@ -236,6 +240,7 @@ public void defaultValue_resourceNameWithOnlyWildcards_valueOnly() {
236240
Expr expr =
237241
DefaultValueComposer.createDefaultValueResourceHelper(
238242
resourceName,
243+
false,
239244
Collections.emptyList(),
240245
fallbackField,
241246
/* allowAnonResourceNameClass = */ false);
@@ -257,7 +262,7 @@ public void defaultValue_resourceNameWithOnlyWildcards_allowAnonResourceNameClas
257262
String fallbackField = "foobar";
258263
Expr expr =
259264
DefaultValueComposer.createDefaultValue(
260-
resourceName, Collections.emptyList(), fallbackField);
265+
resourceName, false, Collections.emptyList(), fallbackField);
261266
expr.accept(writerVisitor);
262267
String expected =
263268
LineFormatter.lines(

src/test/java/com/google/api/generator/gapic/composer/grpc/goldens/MessagingClient.golden

+10-32
Original file line numberDiff line numberDiff line change
@@ -832,9 +832,7 @@ public class MessagingClient implements BackgroundResource {
832832
* try (MessagingClient messagingClient = MessagingClient.create()) {
833833
* CreateBlurbRequest request =
834834
* CreateBlurbRequest.newBuilder()
835-
* .setParent(
836-
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
837-
* .toString())
835+
* .setParent(ProfileName.of("[USER]").toString())
838836
* .setBlurb(Blurb.newBuilder().build())
839837
* .build();
840838
* Blurb response = messagingClient.createBlurb(request);
@@ -856,9 +854,7 @@ public class MessagingClient implements BackgroundResource {
856854
* try (MessagingClient messagingClient = MessagingClient.create()) {
857855
* CreateBlurbRequest request =
858856
* CreateBlurbRequest.newBuilder()
859-
* .setParent(
860-
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
861-
* .toString())
857+
* .setParent(ProfileName.of("[USER]").toString())
862858
* .setBlurb(Blurb.newBuilder().build())
863859
* .build();
864860
* ApiFuture<Blurb> future = messagingClient.createBlurbCallable().futureCall(request);
@@ -1151,9 +1147,7 @@ public class MessagingClient implements BackgroundResource {
11511147
* try (MessagingClient messagingClient = MessagingClient.create()) {
11521148
* ListBlurbsRequest request =
11531149
* ListBlurbsRequest.newBuilder()
1154-
* .setParent(
1155-
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
1156-
* .toString())
1150+
* .setParent(ProfileName.of("[USER]").toString())
11571151
* .setPageSize(883849137)
11581152
* .setPageToken("pageToken873572522")
11591153
* .build();
@@ -1178,9 +1172,7 @@ public class MessagingClient implements BackgroundResource {
11781172
* try (MessagingClient messagingClient = MessagingClient.create()) {
11791173
* ListBlurbsRequest request =
11801174
* ListBlurbsRequest.newBuilder()
1181-
* .setParent(
1182-
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
1183-
* .toString())
1175+
* .setParent(ProfileName.of("[USER]").toString())
11841176
* .setPageSize(883849137)
11851177
* .setPageToken("pageToken873572522")
11861178
* .build();
@@ -1204,9 +1196,7 @@ public class MessagingClient implements BackgroundResource {
12041196
* try (MessagingClient messagingClient = MessagingClient.create()) {
12051197
* ListBlurbsRequest request =
12061198
* ListBlurbsRequest.newBuilder()
1207-
* .setParent(
1208-
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
1209-
* .toString())
1199+
* .setParent(ProfileName.of("[USER]").toString())
12101200
* .setPageSize(883849137)
12111201
* .setPageToken("pageToken873572522")
12121202
* .build();
@@ -1258,9 +1248,7 @@ public class MessagingClient implements BackgroundResource {
12581248
* SearchBlurbsRequest request =
12591249
* SearchBlurbsRequest.newBuilder()
12601250
* .setQuery("query107944136")
1261-
* .setParent(
1262-
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
1263-
* .toString())
1251+
* .setParent(ProfileName.of("[USER]").toString())
12641252
* .setPageSize(883849137)
12651253
* .setPageToken("pageToken873572522")
12661254
* .build();
@@ -1285,9 +1273,7 @@ public class MessagingClient implements BackgroundResource {
12851273
* SearchBlurbsRequest request =
12861274
* SearchBlurbsRequest.newBuilder()
12871275
* .setQuery("query107944136")
1288-
* .setParent(
1289-
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
1290-
* .toString())
1276+
* .setParent(ProfileName.of("[USER]").toString())
12911277
* .setPageSize(883849137)
12921278
* .setPageToken("pageToken873572522")
12931279
* .build();
@@ -1312,9 +1298,7 @@ public class MessagingClient implements BackgroundResource {
13121298
* SearchBlurbsRequest request =
13131299
* SearchBlurbsRequest.newBuilder()
13141300
* .setQuery("query107944136")
1315-
* .setParent(
1316-
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
1317-
* .toString())
1301+
* .setParent(ProfileName.of("[USER]").toString())
13181302
* .setPageSize(883849137)
13191303
* .setPageToken("pageToken873572522")
13201304
* .build();
@@ -1335,11 +1319,7 @@ public class MessagingClient implements BackgroundResource {
13351319
* <pre>{@code
13361320
* try (MessagingClient messagingClient = MessagingClient.create()) {
13371321
* StreamBlurbsRequest request =
1338-
* StreamBlurbsRequest.newBuilder()
1339-
* .setName(
1340-
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
1341-
* .toString())
1342-
* .build();
1322+
* StreamBlurbsRequest.newBuilder().setName(ProfileName.of("[USER]").toString()).build();
13431323
* ServerStream<StreamBlurbsResponse> stream =
13441324
* messagingClient.streamBlurbsCallable().call(request);
13451325
* for (StreamBlurbsResponse response : stream) {
@@ -1380,9 +1360,7 @@ public class MessagingClient implements BackgroundResource {
13801360
* messagingClient.sendBlurbs().clientStreamingCall(responseObserver);
13811361
* CreateBlurbRequest request =
13821362
* CreateBlurbRequest.newBuilder()
1383-
* .setParent(
1384-
* BlurbName.ofUserLegacyUserBlurbName("[USER]", "[LEGACY_USER]", "[BLURB]")
1385-
* .toString())
1363+
* .setParent(ProfileName.of("[USER]").toString())
13861364
* .setBlurb(Blurb.newBuilder().build())
13871365
* .build();
13881366
* requestObserver.onNext(request);

0 commit comments

Comments
 (0)