3535#include " generator/internal/stub_generator.h"
3636#include < google/longrunning/operations.pb.h>
3737#include < google/protobuf/compiler/code_generator.h>
38+ #include < google/protobuf/compiler/cpp/cpp_names.h>
3839#include < regex>
3940#include < string>
4041
4142using ::google::protobuf::FieldDescriptor;
4243using ::google::protobuf::MethodDescriptor;
4344using ::google::protobuf::ServiceDescriptor;
45+ using ::google::protobuf::compiler::cpp::FieldName;
4446
4547namespace google {
4648namespace cloud {
@@ -186,41 +188,43 @@ void SetMethodSignatureMethodVars(
186188 absl::StripAsciiWhitespace (¶meter);
187189 google::protobuf::FieldDescriptor const * parameter_descriptor =
188190 input_type->FindFieldByName (parameter);
191+ auto const parameter_name = FieldName (parameter_descriptor);
189192 if (parameter_descriptor->is_map ()) {
190193 method_signature += absl::StrFormat (
191194 " std::map<%s, %s> const& %s" ,
192195 CppTypeToString (parameter_descriptor->message_type ()->map_key ()),
193196 CppTypeToString (parameter_descriptor->message_type ()->map_value ()),
194- parameter );
197+ parameter_name );
195198 method_request_setters += absl::StrFormat (
196- " *request.mutable_%s() = {%s.begin(), %s.end()};\n " , parameter,
197- parameter, parameter );
199+ " *request.mutable_%s() = {%s.begin(), %s.end()};\n " ,
200+ parameter_name, parameter_name, parameter_name );
198201 } else if (parameter_descriptor->is_repeated ()) {
199- method_signature +=
200- absl::StrFormat ( " std::vector<%s> const& %s" ,
201- CppTypeToString (parameter_descriptor), parameter );
202+ method_signature += absl::StrFormat (
203+ " std::vector<%s> const& %s" , CppTypeToString (parameter_descriptor) ,
204+ parameter_name );
202205 method_request_setters += absl::StrFormat (
203- " *request.mutable_%s() = {%s.begin(), %s.end()};\n " , parameter,
204- parameter, parameter );
206+ " *request.mutable_%s() = {%s.begin(), %s.end()};\n " ,
207+ parameter_name, parameter_name, parameter_name );
205208 } else if (parameter_descriptor->type () ==
206209 FieldDescriptor::TYPE_MESSAGE) {
207210 method_signature += absl::StrFormat (
208- " %s const& %s" , CppTypeToString (parameter_descriptor), parameter);
211+ " %s const& %s" , CppTypeToString (parameter_descriptor),
212+ parameter_name);
209213 method_request_setters += absl::StrFormat (
210- " *request.mutable_%s() = %s;\n " , parameter, parameter );
214+ " *request.mutable_%s() = %s;\n " , parameter_name, parameter_name );
211215 } else {
212216 switch (parameter_descriptor->cpp_type ()) {
213217 case FieldDescriptor::CPPTYPE_STRING:
214218 method_signature += absl::StrFormat (
215219 " %s const& %s" , CppTypeToString (parameter_descriptor),
216- parameter );
220+ parameter_name );
217221 break ;
218222 default :
219223 method_signature += absl::StrFormat (
220- " %s %s" , CppTypeToString (parameter_descriptor), parameter );
224+ " %s %s" , CppTypeToString (parameter_descriptor), parameter_name );
221225 }
222- method_request_setters +=
223- absl::StrFormat ( " request.set_%s(%s);\n " , parameter, parameter );
226+ method_request_setters += absl::StrFormat (
227+ " request.set_%s(%s);\n " , parameter_name, parameter_name );
224228 }
225229 method_signature += " , " ;
226230 }
@@ -240,7 +244,14 @@ void SetResourceRoutingMethodVars(
240244 method_vars[" method_request_url_substitution" ] = result->url_substitution ;
241245 std::string param = result->param_key ;
242246 method_vars[" method_request_param_key" ] = param;
243- std::vector<std::string> chunks = absl::StrSplit (param, ' .' );
247+ std::vector<std::string> chunks;
248+ auto const * input_type = method.input_type ();
249+ for (auto const sv : absl::StrSplit (param, ' .' )) {
250+ auto const chunk = std::string (sv);
251+ auto const * chunk_descriptor = input_type->FindFieldByName (chunk);
252+ chunks.push_back (FieldName (chunk_descriptor));
253+ input_type = chunk_descriptor->message_type ();
254+ }
244255 method_vars[" method_request_param_value" ] =
245256 absl::StrJoin (chunks, " ()." ) + " ()" ;
246257 method_vars[" method_request_body" ] = result->body ;
@@ -334,7 +345,7 @@ std::string FormatApiMethodSignatureParameters(
334345 EscapePrinterDelimiter (ChompByValue (loc.leading_comments )),
335346 {{" \n\n " , " \n /// " }, {" \n " , " \n /// " }});
336347 absl::StrAppendFormat (¶meter_comments, " /// @param %s %s\n " ,
337- parameter , std::move (comment));
348+ FieldName (parameter_descriptor) , std::move (comment));
338349 }
339350 return parameter_comments;
340351}
0 commit comments