37
37
import com .google .api .generator .gapic .model .ResourceName ;
38
38
import com .google .api .generator .gapic .utils .JavaStyle ;
39
39
import com .google .api .generator .gapic .utils .ResourceNameConstants ;
40
+ import com .google .api .generator .gapic .utils .ResourceReferenceUtils ;
40
41
import com .google .common .annotations .VisibleForTesting ;
41
42
import com .google .common .base .Preconditions ;
42
43
import com .google .longrunning .Operation ;
48
49
import java .util .HashSet ;
49
50
import java .util .List ;
50
51
import java .util .Map ;
52
+ import java .util .Optional ;
51
53
import java .util .stream .Collectors ;
52
54
53
55
public class DefaultValueComposer {
@@ -76,6 +78,7 @@ public static Expr createDefaultValue(
76
78
Expr defValue =
77
79
createDefaultValue (
78
80
resourceName ,
81
+ methodArg .field ().resourceReference ().isChildType (),
79
82
resourceNames .values ().stream ().collect (Collectors .toList ()),
80
83
methodArg .field ().name ());
81
84
@@ -175,17 +178,46 @@ static Expr createDefaultValue(Field f, boolean useExplicitInitTypeInGenerics) {
175
178
}
176
179
177
180
public static Expr createDefaultValue (
178
- ResourceName resourceName , List <ResourceName > resnames , String fieldOrMessageName ) {
179
- return createDefaultValueResourceHelper (resourceName , resnames , fieldOrMessageName , true );
181
+ ResourceName resourceName ,
182
+ boolean isChildType ,
183
+ List <ResourceName > resnames ,
184
+ String fieldOrMessageName ) {
185
+ return createDefaultValueResourceHelper (
186
+ resourceName , isChildType , resnames , fieldOrMessageName , true );
187
+ }
188
+
189
+ private static Optional <ResourceName > findParentResource (
190
+ ResourceName childResource , List <ResourceName > resourceNames ) {
191
+ Map <String , ResourceName > patternToResourceName = new HashMap <>();
192
+
193
+ for (ResourceName resourceName : resourceNames ) {
194
+ for (String parentPattern : resourceName .patterns ()) {
195
+ patternToResourceName .put (parentPattern , resourceName );
196
+ }
197
+ }
198
+
199
+ for (String childPattern : childResource .patterns ()) {
200
+ Optional <String > parentPattern = ResourceReferenceUtils .parseParentPattern (childPattern );
201
+ if (parentPattern .isPresent () && patternToResourceName .containsKey (parentPattern .get ())) {
202
+ return Optional .of (patternToResourceName .get (parentPattern .get ()));
203
+ }
204
+ }
205
+
206
+ return Optional .empty ();
180
207
}
181
208
182
209
@ VisibleForTesting
183
210
static Expr createDefaultValueResourceHelper (
184
211
ResourceName resourceName ,
212
+ boolean isChildType ,
185
213
List <ResourceName > resnames ,
186
214
String fieldOrMessageName ,
187
215
boolean allowAnonResourceNameClass ) {
188
216
217
+ if (isChildType ) {
218
+ resourceName = findParentResource (resourceName , resnames ).orElse (resourceName );
219
+ }
220
+
189
221
boolean hasOnePattern = resourceName .patterns ().size () == 1 ;
190
222
if (resourceName .isOnlyWildcard ()) {
191
223
List <ResourceName > unexaminedResnames = new ArrayList <>(resnames );
@@ -195,7 +227,7 @@ static Expr createDefaultValueResourceHelper(
195
227
continue ;
196
228
}
197
229
unexaminedResnames .remove (resname );
198
- return createDefaultValue (resname , unexaminedResnames , fieldOrMessageName );
230
+ return createDefaultValue (resname , false , unexaminedResnames , fieldOrMessageName );
199
231
}
200
232
201
233
if (unexaminedResnames .isEmpty ()) {
@@ -283,6 +315,7 @@ public static Expr createSimpleMessageBuilderExpr(
283
315
defaultExpr =
284
316
createDefaultValueResourceHelper (
285
317
resourceNames .get (field .resourceReference ().resourceTypeString ()),
318
+ field .resourceReference ().isChildType (),
286
319
resourceNames .values ().stream ().collect (Collectors .toList ()),
287
320
message .name (),
288
321
/* allowAnonResourceNameClass = */ false );
0 commit comments