From 7e9abbb8b7a7b75e6a7cee1a3a832fe503086f4a Mon Sep 17 00:00:00 2001 From: Mira Leung Date: Wed, 25 Nov 2020 13:58:21 -0800 Subject: [PATCH 1/2] fix: handle empty method_signature in parsing protos --- .../protoparser/MethodSignatureParser.java | 5 +++ .../gapic/protoparser/ParserTest.java | 31 +++++++++++++++++-- .../api/generator/gapic/testdata/echo.proto | 1 + 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/google/api/generator/gapic/protoparser/MethodSignatureParser.java b/src/main/java/com/google/api/generator/gapic/protoparser/MethodSignatureParser.java index ebf877d133..06fcb0b357 100644 --- a/src/main/java/com/google/api/generator/gapic/protoparser/MethodSignatureParser.java +++ b/src/main/java/com/google/api/generator/gapic/protoparser/MethodSignatureParser.java @@ -23,6 +23,7 @@ import com.google.api.generator.gapic.model.ResourceReference; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; +import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.protobuf.Descriptors.MethodDescriptor; import java.util.ArrayList; @@ -59,6 +60,10 @@ public static List> parseMethodSignatures( // Example from Expand in echo.proto: // stringSigs: ["content,error", "content,error,info"]. for (String stringSig : stringSigs) { + if (Strings.isNullOrEmpty(stringSig)) { + continue; + } + List argumentNames = new ArrayList<>(); Map> argumentNameToOverloads = new HashMap<>(); diff --git a/src/test/java/com/google/api/generator/gapic/protoparser/ParserTest.java b/src/test/java/com/google/api/generator/gapic/protoparser/ParserTest.java index f3c696b9f1..c56a38ed2c 100644 --- a/src/test/java/com/google/api/generator/gapic/protoparser/ParserTest.java +++ b/src/test/java/com/google/api/generator/gapic/protoparser/ParserTest.java @@ -187,8 +187,9 @@ public void parseLro_missingMetadataType() { @Test public void parseMethodSignatures_empty() { // TODO(miraleung): Move this to MethodSignatureParserTest. - MethodDescriptor chatWithInfoMethodDescriptor = echoService.getMethods().get(5); - TypeNode inputType = TypeParser.parseType(chatWithInfoMethodDescriptor.getInputType()); + MethodDescriptor methodDescriptor = echoService.getMethods().get(3); + assertEquals("Chat", methodDescriptor.getName()); + TypeNode inputType = TypeParser.parseType(methodDescriptor.getInputType()); Map messageTypes = Parser.parseMessages(echoFileDescriptor); Map resourceNames = Parser.parseResourceNames(echoFileDescriptor); Set outputResourceNames = new HashSet<>(); @@ -198,7 +199,31 @@ public void parseMethodSignatures_empty() { echoService, ECHO_PACKAGE, messageTypes, resourceNames, outputResourceNames); assertThat( MethodSignatureParser.parseMethodSignatures( - chatWithInfoMethodDescriptor, + methodDescriptor, + ECHO_PACKAGE, + inputType, + messageTypes, + resourceNames, + outputResourceNames)) + .isEmpty(); + } + + @Test + public void parseMethodSignatures_emptyString() { + // TODO(miraleung): Move this to MethodSignatureParserTest. + MethodDescriptor methodDescriptor = echoService.getMethods().get(5); + assertEquals("PagedExpand", methodDescriptor.getName()); + TypeNode inputType = TypeParser.parseType(methodDescriptor.getInputType()); + Map messageTypes = Parser.parseMessages(echoFileDescriptor); + Map resourceNames = Parser.parseResourceNames(echoFileDescriptor); + Set outputResourceNames = new HashSet<>(); + + List methods = + Parser.parseMethods( + echoService, ECHO_PACKAGE, messageTypes, resourceNames, outputResourceNames); + assertThat( + MethodSignatureParser.parseMethodSignatures( + methodDescriptor, ECHO_PACKAGE, inputType, messageTypes, diff --git a/src/test/java/com/google/api/generator/gapic/testdata/echo.proto b/src/test/java/com/google/api/generator/gapic/testdata/echo.proto index 19058ab680..854956ffcc 100644 --- a/src/test/java/com/google/api/generator/gapic/testdata/echo.proto +++ b/src/test/java/com/google/api/generator/gapic/testdata/echo.proto @@ -96,6 +96,7 @@ service Echo { post: "/v1beta1/echo:pagedExpand" body: "*" }; + option (google.api.method_signature) = ""; } // This method will wait the requested amount of and then return. From 3e21503a4ae5c1ef2059d34e4e30ed1b62978a88 Mon Sep 17 00:00:00 2001 From: Mira Leung Date: Wed, 25 Nov 2020 14:01:15 -0800 Subject: [PATCH 2/2] fix: add google/type:type_java_proto as default test dep --- rules_java_gapic/java_gapic.bzl | 1 + test/integration/BUILD.bazel | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/rules_java_gapic/java_gapic.bzl b/rules_java_gapic/java_gapic.bzl index e76ecd4682..b178c397e8 100644 --- a/rules_java_gapic/java_gapic.bzl +++ b/rules_java_gapic/java_gapic.bzl @@ -197,6 +197,7 @@ def java_gapic_library( # Test deps. actual_test_deps = test_deps + actual_deps + [ + "@com_google_googleapis//google/type:type_java_proto", # Commonly used. "@com_google_api_gax_java//gax-grpc:gax_grpc_testlib", "@com_google_api_gax_java//gax:gax_testlib", "@com_google_code_gson_gson//jar", diff --git a/test/integration/BUILD.bazel b/test/integration/BUILD.bazel index 597e389b17..59b65ac274 100644 --- a/test/integration/BUILD.bazel +++ b/test/integration/BUILD.bazel @@ -55,7 +55,6 @@ java_gapic_library( "@com_google_googleapis//google/cloud/asset/v1:asset_java_proto", "@com_google_googleapis//google/iam/v1:iam_java_proto", "@com_google_googleapis//google/identity/accesscontextmanager/v1:accesscontextmanager_proto", - "@com_google_googleapis//google/type:type_java_proto", ], ) @@ -75,7 +74,6 @@ java_gapic_assembly_gradle_pkg( "@com_google_googleapis//google/cloud/asset/v1:asset_java_proto", "@com_google_googleapis//google/cloud/asset/v1:asset_proto", "@com_google_googleapis//google/cloud/orgpolicy/v1:orgpolicy_java_proto", - "@com_google_googleapis//google/identity/accesscontextmanager/type:type_java_proto", "@com_google_googleapis//google/identity/accesscontextmanager/v1:accesscontextmanager_java_proto", ], )