diff --git a/src/main/java/com/google/api/generator/gapic/composer/Composer.java b/src/main/java/com/google/api/generator/gapic/composer/Composer.java index 4c6a4d3eed..5c191b0a27 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/Composer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/Composer.java @@ -33,13 +33,11 @@ import com.google.api.generator.gapic.model.GapicClass.Kind; import com.google.api.generator.gapic.model.GapicContext; import com.google.api.generator.gapic.model.GapicPackageInfo; -import com.google.api.generator.gapic.model.ResourceName; import com.google.api.generator.gapic.model.Service; import com.google.api.generator.gapic.model.Transport; import com.google.common.annotations.VisibleForTesting; import java.util.ArrayList; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; public class Composer { @@ -47,11 +45,7 @@ public static List composeServiceClasses(GapicContext context) { List clazzes = new ArrayList<>(); clazzes.addAll(generateServiceClasses(context)); clazzes.addAll(generateMockClasses(context, context.mixinServices())); - clazzes.addAll( - generateResourceNameHelperClasses( - context.helperResourceNames().values().stream() - .map(r -> r) - .collect(Collectors.toSet()))); + clazzes.addAll(generateResourceNameHelperClasses(context)); return addApacheLicense(clazzes); } @@ -68,11 +62,11 @@ public static List generateServiceClasses(GapicContext context) { return clazzes; } - public static List generateResourceNameHelperClasses( - Set resourceNames) { - return resourceNames.stream() + public static List generateResourceNameHelperClasses(GapicContext context) { + return context.helperResourceNames().values().stream() + .distinct() .filter(r -> !r.isOnlyWildcard()) - .map(r -> ResourceNameHelperClassComposer.instance().generate(r)) + .map(r -> ResourceNameHelperClassComposer.instance().generate(r, context)) .collect(Collectors.toList()); } diff --git a/src/main/java/com/google/api/generator/gapic/composer/resourcename/ResourceNameHelperClassComposer.java b/src/main/java/com/google/api/generator/gapic/composer/resourcename/ResourceNameHelperClassComposer.java index d838ca2160..80801e31fe 100644 --- a/src/main/java/com/google/api/generator/gapic/composer/resourcename/ResourceNameHelperClassComposer.java +++ b/src/main/java/com/google/api/generator/gapic/composer/resourcename/ResourceNameHelperClassComposer.java @@ -49,6 +49,7 @@ import com.google.api.generator.gapic.composer.comment.CommentComposer; import com.google.api.generator.gapic.composer.store.TypeStore; import com.google.api.generator.gapic.model.GapicClass; +import com.google.api.generator.gapic.model.GapicContext; import com.google.api.generator.gapic.model.ResourceName; import com.google.api.generator.gapic.utils.JavaStyle; import com.google.api.generator.gapic.utils.ResourceNameConstants; @@ -79,8 +80,10 @@ public class ResourceNameHelperClassComposer { new ResourceNameHelperClassComposer(); private static final TypeStore FIXED_TYPESTORE = createStaticTypes(); + private static final Map FIXED_CLASS_VARS = + createFixedClassMemberVariables(); - private static Map FIXED_CLASS_VARS = createFixedClassMemberVariables(); + private static Reference javaObjectReference = ConcreteReference.withClazz(Object.class); private ResourceNameHelperClassComposer() {} @@ -88,14 +91,25 @@ public static ResourceNameHelperClassComposer instance() { return INSTANCE; } - public GapicClass generate(ResourceName resourceName) { + public GapicClass generate(ResourceName resourceName, GapicContext context) { + // Set up types. List> tokenHierarchies = ResourceNameTokenizer.parseTokenHierarchy(resourceName.patterns()); TypeStore typeStore = createDynamicTypes(resourceName, tokenHierarchies); + // Use the full name java.lang.Object if there is a proto message that is also named "Object". + // Affects GCS. + if (context.messages().keySet().stream() + .anyMatch(s -> s.equals("Object") || s.endsWith(".Object"))) { + javaObjectReference = + ConcreteReference.builder().setClazz(Object.class).setUseFullName(true).build(); + } + + // Set up variables. List templateFinalVarExprs = createTemplateClassMembers(tokenHierarchies); Map patternTokenVarExprs = createPatternTokenClassMembers(tokenHierarchies); + // Check invariants. Preconditions.checkState( patternTokenVarExprs.size() > 0, String.format("No patterns found for resource name %s", resourceName.resourceTypeString())); @@ -1292,7 +1306,11 @@ private static MethodDefinition createToStringMethod( private static MethodDefinition createEqualsMethod( ResourceName resourceName, List> tokenHierarchies, TypeStore typeStore) { // Create method definition variables. - Variable oVariable = Variable.builder().setType(TypeNode.OBJECT).setName("o").build(); + Variable oVariable = + Variable.builder() + .setType(TypeNode.withReference(javaObjectReference)) + .setName("o") + .build(); VariableExpr argVarExpr = VariableExpr.builder().setIsDecl(false).setVariable(oVariable).build(); TypeNode thisClassType = typeStore.get(getThisClassName(resourceName)); diff --git a/src/test/java/com/google/api/generator/gapic/composer/resourcename/BUILD.bazel b/src/test/java/com/google/api/generator/gapic/composer/resourcename/BUILD.bazel index a62cd2dad8..c62de44173 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/resourcename/BUILD.bazel +++ b/src/test/java/com/google/api/generator/gapic/composer/resourcename/BUILD.bazel @@ -23,6 +23,7 @@ TEST_DEPS = [ "//src/main/java/com/google/api/generator/gapic/composer/resourcename", "//src/main/java/com/google/api/generator/gapic/model", "//src/main/java/com/google/api/generator/gapic/protoparser", + "//src/test/java/com/google/api/generator/gapic/composer/common", "//src/test/java/com/google/api/generator/gapic/testdata:showcase_java_proto", "//src/test/java/com/google/api/generator/test/framework:asserts", "//src/test/java/com/google/api/generator/test/framework:utils", diff --git a/src/test/java/com/google/api/generator/gapic/composer/resourcename/ResourceNameHelperClassComposerTest.java b/src/test/java/com/google/api/generator/gapic/composer/resourcename/ResourceNameHelperClassComposerTest.java index 16251dc124..7f4117a0b5 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/resourcename/ResourceNameHelperClassComposerTest.java +++ b/src/test/java/com/google/api/generator/gapic/composer/resourcename/ResourceNameHelperClassComposerTest.java @@ -18,7 +18,9 @@ import static junit.framework.Assert.assertEquals; import com.google.api.generator.engine.writer.JavaWriterVisitor; +import com.google.api.generator.gapic.composer.common.TestProtoLoader; import com.google.api.generator.gapic.model.GapicClass; +import com.google.api.generator.gapic.model.GapicContext; import com.google.api.generator.gapic.model.Message; import com.google.api.generator.gapic.model.ResourceName; import com.google.api.generator.gapic.model.Service; @@ -101,7 +103,9 @@ public void generateResourceNameClass_echoFoobarMultiplePatterns() { ResourceName foobarResname = resourceNames.get("showcase.googleapis.com/Foobar"); assertThat(outputResourceNames).contains(foobarResname); - GapicClass clazz = ResourceNameHelperClassComposer.instance().generate(foobarResname); + GapicClass clazz = + ResourceNameHelperClassComposer.instance() + .generate(foobarResname, TestProtoLoader.instance().parseShowcaseEcho()); JavaWriterVisitor visitor = new JavaWriterVisitor(); clazz.classDefinition().accept(visitor); @@ -149,7 +153,8 @@ public void generateResourceNameClass_loggingOnePatternMultipleVariables() { assertThat(outputResourceNames).contains(billingAccountLocationResname); GapicClass clazz = - ResourceNameHelperClassComposer.instance().generate(billingAccountLocationResname); + ResourceNameHelperClassComposer.instance() + .generate(billingAccountLocationResname, TestProtoLoader.instance().parseLogging()); JavaWriterVisitor visitor = new JavaWriterVisitor(); clazz.classDefinition().accept(visitor); @@ -179,7 +184,9 @@ public void generateResourceNameClass_testingSessionOnePattern() { ResourceName sessionResname = resourceNames.get("showcase.googleapis.com/Session"); assertThat(outputResourceNames).contains(sessionResname); - GapicClass clazz = ResourceNameHelperClassComposer.instance().generate(sessionResname); + GapicClass clazz = + ResourceNameHelperClassComposer.instance() + .generate(sessionResname, TestProtoLoader.instance().parseShowcaseTesting()); JavaWriterVisitor visitor = new JavaWriterVisitor(); clazz.classDefinition().accept(visitor); @@ -208,7 +215,9 @@ public void generateResourceNameClass_testingBlueprintPatternWithNonSlashSeparat ResourceName testResname = resourceNames.get("showcase.googleapis.com/Test"); assertThat(outputResourceNames).contains(testResname); - GapicClass clazz = ResourceNameHelperClassComposer.instance().generate(testResname); + GapicClass clazz = + ResourceNameHelperClassComposer.instance() + .generate(testResname, TestProtoLoader.instance().parseShowcaseTesting()); JavaWriterVisitor visitor = new JavaWriterVisitor(); clazz.classDefinition().accept(visitor); @@ -231,7 +240,9 @@ public void generateResourceNameClass_childSingleton() { .setDescription("This is a description") .build(); - GapicClass clazz = ResourceNameHelperClassComposer.instance().generate(agentResname); + GapicContext irrelevantContext = TestProtoLoader.instance().parseShowcaseEcho(); + GapicClass clazz = + ResourceNameHelperClassComposer.instance().generate(agentResname, irrelevantContext); JavaWriterVisitor visitor = new JavaWriterVisitor(); clazz.classDefinition().accept(visitor); Utils.saveCodegenToFile(this.getClass(), "AgentName.golden", visitor.write()); diff --git a/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/AgentName.golden b/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/AgentName.golden index 8a6dda2b8d..76f96eead8 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/AgentName.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/AgentName.golden @@ -164,7 +164,7 @@ public class AgentName implements ResourceName { } @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (o == this) { return true; } diff --git a/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/BillingAccountLocationName.golden b/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/BillingAccountLocationName.golden index 3930537244..68c8b4c472 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/BillingAccountLocationName.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/BillingAccountLocationName.golden @@ -120,7 +120,7 @@ public class BillingAccountLocationName implements ResourceName { } @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (o == this) { return true; } diff --git a/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/FoobarName.golden b/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/FoobarName.golden index 0931804132..4af08e31b7 100644 --- a/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/FoobarName.golden +++ b/src/test/java/com/google/api/generator/gapic/composer/resourcename/goldens/FoobarName.golden @@ -258,7 +258,7 @@ public class FoobarName implements ResourceName { } @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (o == this) { return true; } diff --git a/test/integration/goldens/storage/com/google/storage/v2/BucketName.java b/test/integration/goldens/storage/com/google/storage/v2/BucketName.java index 7a00e63d2a..b7844cb7c8 100644 --- a/test/integration/goldens/storage/com/google/storage/v2/BucketName.java +++ b/test/integration/goldens/storage/com/google/storage/v2/BucketName.java @@ -133,7 +133,7 @@ public String toString() { } @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (o == this) { return true; } diff --git a/test/integration/goldens/storage/com/google/storage/v2/CryptoKeyName.java b/test/integration/goldens/storage/com/google/storage/v2/CryptoKeyName.java index 987146bc65..ef9ff23e31 100644 --- a/test/integration/goldens/storage/com/google/storage/v2/CryptoKeyName.java +++ b/test/integration/goldens/storage/com/google/storage/v2/CryptoKeyName.java @@ -171,7 +171,7 @@ public String toString() { } @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (o == this) { return true; } diff --git a/test/integration/goldens/storage/com/google/storage/v2/ProjectName.java b/test/integration/goldens/storage/com/google/storage/v2/ProjectName.java index d9cbaa5efa..09495c6219 100644 --- a/test/integration/goldens/storage/com/google/storage/v2/ProjectName.java +++ b/test/integration/goldens/storage/com/google/storage/v2/ProjectName.java @@ -123,7 +123,7 @@ public String toString() { } @Override - public boolean equals(Object o) { + public boolean equals(java.lang.Object o) { if (o == this) { return true; }