Skip to content

Commit 573fb8d

Browse files
authored
[ggj][codegen][resname] fix: resolve resname collisions, preferring method_signature args (#597)
* fix: fix dep ordering in Bazel dedupe rules * feat: add equals() and hashCode() overrides for ResourceReference * fix: resolve resname collisions, preferring method_signature args
1 parent 93335de commit 573fb8d

File tree

1 file changed

+13
-2
lines changed
  • src/main/java/com/google/api/generator/gapic/protoparser

1 file changed

+13
-2
lines changed

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

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import java.util.Objects;
6262
import java.util.Optional;
6363
import java.util.Set;
64+
import java.util.function.Function;
6465
import java.util.stream.Collectors;
6566

6667
public class Parser {
@@ -133,21 +134,31 @@ public static GapicContext parse(CodeGeneratorRequest request) {
133134
serviceConfigOpt);
134135

135136
Preconditions.checkState(!services.isEmpty(), "No services found to generate");
137+
Function<ResourceName, String> typeNameFn =
138+
r -> r.resourceTypeString().substring(r.resourceTypeString().indexOf("/") + 1);
139+
Function<Set<ResourceName>, Set<String>> typeStringSetFn =
140+
sr -> sr.stream().map(r -> typeNameFn.apply(r)).collect(Collectors.toSet());
136141

137142
// Include all resource names present in message types for backwards-compatibility with the
138143
// monolith. In the future, this should be removed on a client library major semver update.
144+
// Resolve type name collisions with the ones present in the method arguments.
145+
final Set<String> typeStringSet = typeStringSetFn.apply(outputArgResourceNames);
139146
outputArgResourceNames.addAll(
140147
resourceNames.values().stream()
141-
.filter(r -> r.hasParentMessageName())
148+
.filter(r -> r.hasParentMessageName() && !typeStringSet.contains(typeNameFn.apply(r)))
142149
.collect(Collectors.toSet()));
143150

144151
String servicePackage = services.get(0).pakkage();
145152
Map<String, ResourceName> patternsToResourceNames =
146153
ResourceParserHelpers.createPatternResourceNameMap(resourceNames);
147154
for (ResourceReference resourceReference : outputResourceReferencesSeen) {
155+
final Set<String> interimTypeStringSet = typeStringSetFn.apply(outputArgResourceNames);
148156
outputArgResourceNames.addAll(
149157
ResourceReferenceParser.parseResourceNames(
150-
resourceReference, servicePackage, null, resourceNames, patternsToResourceNames));
158+
resourceReference, servicePackage, null, resourceNames, patternsToResourceNames)
159+
.stream()
160+
.filter(r -> !interimTypeStringSet.contains(typeNameFn.apply(r)))
161+
.collect(Collectors.toSet()));
151162
}
152163

153164
return GapicContext.builder()

0 commit comments

Comments
 (0)