protobuf/src/google/protobuf/compiler/command_line_interface.h
Go to the documentation of this file.
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 // Author: kenton@google.com (Kenton Varda)
32 // Based on original Protocol Buffers design by
33 // Sanjay Ghemawat, Jeff Dean, and others.
34 //
35 // Implements the Protocol Compiler front-end such that it may be reused by
36 // custom compilers written to support other languages.
37 
38 #ifndef GOOGLE_PROTOBUF_COMPILER_COMMAND_LINE_INTERFACE_H__
39 #define GOOGLE_PROTOBUF_COMPILER_COMMAND_LINE_INTERFACE_H__
40 
41 #include <cstdint>
42 #include <map>
43 #include <memory>
44 #include <set>
45 #include <string>
46 #include <unordered_map>
47 #include <unordered_set>
48 #include <utility>
49 #include <vector>
50 
51 #include <google/protobuf/stubs/common.h>
52 #include <google/protobuf/port_def.inc>
53 
54 namespace google {
55 namespace protobuf {
56 
57 class Descriptor; // descriptor.h
58 class DescriptorDatabase; // descriptor_database.h
59 class DescriptorPool; // descriptor.h
60 class FileDescriptor; // descriptor.h
61 class FileDescriptorSet; // descriptor.h
62 class FileDescriptorProto; // descriptor.pb.h
63 template <typename T>
64 class RepeatedPtrField; // repeated_field.h
65 class SimpleDescriptorDatabase; // descriptor_database.h
66 
67 namespace compiler {
68 
69 class CodeGenerator; // code_generator.h
70 class GeneratorContext; // code_generator.h
71 class DiskSourceTree; // importer.h
72 
73 // This class implements the command-line interface to the protocol compiler.
74 // It is designed to make it very easy to create a custom protocol compiler
75 // supporting the languages of your choice. For example, if you wanted to
76 // create a custom protocol compiler binary which includes both the regular
77 // C++ support plus support for your own custom output "Foo", you would
78 // write a class "FooGenerator" which implements the CodeGenerator interface,
79 // then write a main() procedure like this:
80 //
81 // int main(int argc, char* argv[]) {
82 // google::protobuf::compiler::CommandLineInterface cli;
83 //
84 // // Support generation of C++ source and headers.
85 // google::protobuf::compiler::cpp::CppGenerator cpp_generator;
86 // cli.RegisterGenerator("--cpp_out", &cpp_generator,
87 // "Generate C++ source and header.");
88 //
89 // // Support generation of Foo code.
90 // FooGenerator foo_generator;
91 // cli.RegisterGenerator("--foo_out", &foo_generator,
92 // "Generate Foo file.");
93 //
94 // return cli.Run(argc, argv);
95 // }
96 //
97 // The compiler is invoked with syntax like:
98 // protoc --cpp_out=outdir --foo_out=outdir --proto_path=src src/foo.proto
99 //
100 // The .proto file to compile can be specified on the command line using either
101 // its physical file path, or a virtual path relative to a directory specified
102 // in --proto_path. For example, for src/foo.proto, the following two protoc
103 // invocations work the same way:
104 // 1. protoc --proto_path=src src/foo.proto (physical file path)
105 // 2. protoc --proto_path=src foo.proto (virtual path relative to src)
106 //
107 // If a file path can be interpreted both as a physical file path and as a
108 // relative virtual path, the physical file path takes precedence.
109 //
110 // For a full description of the command-line syntax, invoke it with --help.
111 class PROTOC_EXPORT CommandLineInterface {
112  public:
113  static const char* const kPathSeparator;
114 
115  CommandLineInterface();
116  ~CommandLineInterface();
117 
118  // Register a code generator for a language.
119  //
120  // Parameters:
121  // * flag_name: The command-line flag used to specify an output file of
122  // this type. The name must start with a '-'. If the name is longer
123  // than one letter, it must start with two '-'s.
124  // * generator: The CodeGenerator which will be called to generate files
125  // of this type.
126  // * help_text: Text describing this flag in the --help output.
127  //
128  // Some generators accept extra parameters. You can specify this parameter
129  // on the command-line by placing it before the output directory, separated
130  // by a colon:
131  // protoc --foo_out=enable_bar:outdir
132  // The text before the colon is passed to CodeGenerator::Generate() as the
133  // "parameter".
134  void RegisterGenerator(const std::string& flag_name, CodeGenerator* generator,
135  const std::string& help_text);
136 
137  // Register a code generator for a language.
138  // Besides flag_name you can specify another option_flag_name that could be
139  // used to pass extra parameters to the registered code generator.
140  // Suppose you have registered a generator by calling:
141  // command_line_interface.RegisterGenerator("--foo_out", "--foo_opt", ...)
142  // Then you could invoke the compiler with a command like:
143  // protoc --foo_out=enable_bar:outdir --foo_opt=enable_baz
144  // This will pass "enable_bar,enable_baz" as the parameter to the generator.
145  void RegisterGenerator(const std::string& flag_name,
146  const std::string& option_flag_name,
147  CodeGenerator* generator,
148  const std::string& help_text);
149 
150  // Enables "plugins". In this mode, if a command-line flag ends with "_out"
151  // but does not match any registered generator, the compiler will attempt to
152  // find a "plugin" to implement the generator. Plugins are just executables.
153  // They should live somewhere in the PATH.
154  //
155  // The compiler determines the executable name to search for by concatenating
156  // exe_name_prefix with the unrecognized flag name, removing "_out". So, for
157  // example, if exe_name_prefix is "protoc-" and you pass the flag --foo_out,
158  // the compiler will try to run the program "protoc-gen-foo".
159  //
160  // The plugin program should implement the following usage:
161  // plugin [--out=OUTDIR] [--parameter=PARAMETER] PROTO_FILES < DESCRIPTORS
162  // --out indicates the output directory (as passed to the --foo_out
163  // parameter); if omitted, the current directory should be used. --parameter
164  // gives the generator parameter, if any was provided (see below). The
165  // PROTO_FILES list the .proto files which were given on the compiler
166  // command-line; these are the files for which the plugin is expected to
167  // generate output code. Finally, DESCRIPTORS is an encoded FileDescriptorSet
168  // (as defined in descriptor.proto). This is piped to the plugin's stdin.
169  // The set will include descriptors for all the files listed in PROTO_FILES as
170  // well as all files that they import. The plugin MUST NOT attempt to read
171  // the PROTO_FILES directly -- it must use the FileDescriptorSet.
172  //
173  // The plugin should generate whatever files are necessary, as code generators
174  // normally do. It should write the names of all files it generates to
175  // stdout. The names should be relative to the output directory, NOT absolute
176  // names or relative to the current directory. If any errors occur, error
177  // messages should be written to stderr. If an error is fatal, the plugin
178  // should exit with a non-zero exit code.
179  //
180  // Plugins can have generator parameters similar to normal built-in
181  // generators. Extra generator parameters can be passed in via a matching
182  // "_opt" parameter. For example:
183  // protoc --plug_out=enable_bar:outdir --plug_opt=enable_baz
184  // This will pass "enable_bar,enable_baz" as the parameter to the plugin.
185  //
186  void AllowPlugins(const std::string& exe_name_prefix);
187 
188  // Run the Protocol Compiler with the given command-line parameters.
189  // Returns the error code which should be returned by main().
190  //
191  // It may not be safe to call Run() in a multi-threaded environment because
192  // it calls strerror(). I'm not sure why you'd want to do this anyway.
193  int Run(int argc, const char* const argv[]);
194 
195  // DEPRECATED. Calling this method has no effect. Protocol compiler now
196  // always try to find the .proto file relative to the current directory
197  // first and if the file is not found, it will then treat the input path
198  // as a virtual path.
199  void SetInputsAreProtoPathRelative(bool /* enable */) {}
200 
201  // Provides some text which will be printed when the --version flag is
202  // used. The version of libprotoc will also be printed on the next line
203  // after this text.
204  void SetVersionInfo(const std::string& text) { version_info_ = text; }
205 
206 
207  private:
208  // -----------------------------------------------------------------
209 
210  class ErrorPrinter;
211  class GeneratorContextImpl;
213  typedef std::unordered_map<std::string, std::unique_ptr<GeneratorContextImpl>>
215 
216  // Clear state from previous Run().
217  void Clear();
218 
219  // Remaps the proto file so that it is relative to one of the directories
220  // in proto_path_. Returns false if an error occurred.
221  bool MakeProtoProtoPathRelative(DiskSourceTree* source_tree,
222  std::string* proto,
223  DescriptorDatabase* fallback_database);
224 
225  // Remaps each file in input_files_ so that it is relative to one of the
226  // directories in proto_path_. Returns false if an error occurred.
227  bool MakeInputsBeProtoPathRelative(DiskSourceTree* source_tree,
228  DescriptorDatabase* fallback_database);
229 
230  // Fails if these files use proto3 optional and the code generator doesn't
231  // support it. This is a permanent check.
232  bool EnforceProto3OptionalSupport(
233  const std::string& codegen_name, uint64_t supported_features,
234  const std::vector<const FileDescriptor*>& parsed_files) const;
235 
236 
237  // Return status for ParseArguments() and InterpretArgument().
239  PARSE_ARGUMENT_DONE_AND_CONTINUE,
240  PARSE_ARGUMENT_DONE_AND_EXIT,
241  PARSE_ARGUMENT_FAIL
242  };
243 
244  // Parse all command-line arguments.
245  ParseArgumentStatus ParseArguments(int argc, const char* const argv[]);
246 
247  // Read an argument file and append the file's content to the list of
248  // arguments. Return false if the file cannot be read.
249  bool ExpandArgumentFile(const std::string& file,
250  std::vector<std::string>* arguments);
251 
252  // Parses a command-line argument into a name/value pair. Returns
253  // true if the next argument in the argv should be used as the value,
254  // false otherwise.
255  //
256  // Examples:
257  // "-Isrc/protos" ->
258  // name = "-I", value = "src/protos"
259  // "--cpp_out=src/foo.pb2.cc" ->
260  // name = "--cpp_out", value = "src/foo.pb2.cc"
261  // "foo.proto" ->
262  // name = "", value = "foo.proto"
263  bool ParseArgument(const char* arg, std::string* name, std::string* value);
264 
265  // Interprets arguments parsed with ParseArgument.
266  ParseArgumentStatus InterpretArgument(const std::string& name,
267  const std::string& value);
268 
269  // Print the --help text to stderr.
270  void PrintHelpText();
271 
272  // Loads proto_path_ into the provided source_tree.
273  bool InitializeDiskSourceTree(DiskSourceTree* source_tree,
274  DescriptorDatabase* fallback_database);
275 
276  // Verify that all the input files exist in the given database.
277  bool VerifyInputFilesInDescriptors(DescriptorDatabase* fallback_database);
278 
279  // Parses input_files_ into parsed_files
280  bool ParseInputFiles(DescriptorPool* descriptor_pool,
281  DiskSourceTree* source_tree,
282  std::vector<const FileDescriptor*>* parsed_files);
283 
284  // Generate the given output file from the given input.
285  struct OutputDirective; // see below
286  bool GenerateOutput(const std::vector<const FileDescriptor*>& parsed_files,
287  const OutputDirective& output_directive,
288  GeneratorContext* generator_context);
289  bool GeneratePluginOutput(
290  const std::vector<const FileDescriptor*>& parsed_files,
291  const std::string& plugin_name, const std::string& parameter,
292  GeneratorContext* generator_context, std::string* error);
293 
294  // Implements --encode and --decode.
295  bool EncodeOrDecode(const DescriptorPool* pool);
296 
297  // Implements the --descriptor_set_out option.
298  bool WriteDescriptorSet(
299  const std::vector<const FileDescriptor*>& parsed_files);
300 
301  // Implements the --dependency_out option
302  bool GenerateDependencyManifestFile(
303  const std::vector<const FileDescriptor*>& parsed_files,
304  const GeneratorContextMap& output_directories,
305  DiskSourceTree* source_tree);
306 
307  // Get all transitive dependencies of the given file (including the file
308  // itself), adding them to the given list of FileDescriptorProtos. The
309  // protos will be ordered such that every file is listed before any file that
310  // depends on it, so that you can call DescriptorPool::BuildFile() on them
311  // in order. Any files in *already_seen will not be added, and each file
312  // added will be inserted into *already_seen. If include_source_code_info is
313  // true then include the source code information in the FileDescriptorProtos.
314  // If include_json_name is true, populate the json_name field of
315  // FieldDescriptorProto for all fields.
316  static void GetTransitiveDependencies(
317  const FileDescriptor* file, bool include_json_name,
318  bool include_source_code_info,
319  std::set<const FileDescriptor*>* already_seen,
321 
322  // Implements the --print_free_field_numbers. This function prints free field
323  // numbers into stdout for the message and it's nested message types in
324  // post-order, i.e. nested types first. Printed range are left-right
325  // inclusive, i.e. [a, b].
326  //
327  // Groups:
328  // For historical reasons, groups are considered to share the same
329  // field number space with the parent message, thus it will not print free
330  // field numbers for groups. The field numbers used in the groups are
331  // excluded in the free field numbers of the parent message.
332  //
333  // Extension Ranges:
334  // Extension ranges are considered ocuppied field numbers and they will not be
335  // listed as free numbers in the output.
336  void PrintFreeFieldNumbers(const Descriptor* descriptor);
337 
338  // -----------------------------------------------------------------
339 
340  // The name of the executable as invoked (i.e. argv[0]).
341  std::string executable_name_;
342 
343  // Version info set with SetVersionInfo().
344  std::string version_info_;
345 
346  // Registered generators.
347  struct GeneratorInfo {
348  std::string flag_name;
349  std::string option_flag_name;
350  CodeGenerator* generator;
351  std::string help_text;
352  };
353  typedef std::map<std::string, GeneratorInfo> GeneratorMap;
354  GeneratorMap generators_by_flag_name_;
355  GeneratorMap generators_by_option_name_;
356  // A map from generator names to the parameters specified using the option
357  // flag. For example, if the user invokes the compiler with:
358  // protoc --foo_out=outputdir --foo_opt=enable_bar ...
359  // Then there will be an entry ("--foo_out", "enable_bar") in this map.
360  std::map<std::string, std::string> generator_parameters_;
361  // Similar to generator_parameters_, but stores the parameters for plugins.
362  std::map<std::string, std::string> plugin_parameters_;
363 
364  // See AllowPlugins(). If this is empty, plugins aren't allowed.
365  std::string plugin_prefix_;
366 
367  // Maps specific plugin names to files. When executing a plugin, this map
368  // is searched first to find the plugin executable. If not found here, the
369  // PATH (or other OS-specific search strategy) is searched.
370  std::map<std::string, std::string> plugins_;
371 
372  // Stuff parsed from command line.
373  enum Mode {
374  MODE_COMPILE, // Normal mode: parse .proto files and compile them.
375  MODE_ENCODE, // --encode: read text from stdin, write binary to stdout.
376  MODE_DECODE, // --decode: read binary from stdin, write text to stdout.
377  MODE_PRINT, // Print mode: print info of the given .proto files and exit.
378  };
379 
380  Mode mode_ = MODE_COMPILE;
381 
382  enum PrintMode {
383  PRINT_NONE, // Not in MODE_PRINT
384  PRINT_FREE_FIELDS, // --print_free_fields
385  };
386 
387  PrintMode print_mode_ = PRINT_NONE;
388 
389  enum ErrorFormat {
390  ERROR_FORMAT_GCC, // GCC error output format (default).
391  ERROR_FORMAT_MSVS // Visual Studio output (--error_format=msvs).
392  };
393 
394  ErrorFormat error_format_ = ERROR_FORMAT_GCC;
395 
396  // True if we should treat warnings as errors that fail the compilation.
397  bool fatal_warnings_ = false;
398 
399  std::vector<std::pair<std::string, std::string> >
400  proto_path_; // Search path for proto files.
401  std::vector<std::string> input_files_; // Names of the input proto files.
402 
403  // Names of proto files which are allowed to be imported. Used by build
404  // systems to enforce depend-on-what-you-import.
405  std::set<std::string> direct_dependencies_;
406  bool direct_dependencies_explicitly_set_ = false;
407 
408  // If there's a violation of depend-on-what-you-import, this string will be
409  // presented to the user. "%s" will be replaced with the violating import.
410  std::string direct_dependencies_violation_msg_;
411 
412  // output_directives_ lists all the files we are supposed to output and what
413  // generator to use for each.
414  struct OutputDirective {
415  std::string name; // E.g. "--foo_out"
416  CodeGenerator* generator; // NULL for plugins
417  std::string parameter;
418  std::string output_location;
419  };
420  std::vector<OutputDirective> output_directives_;
421 
422  // When using --encode or --decode, this names the type we are encoding or
423  // decoding. (Empty string indicates --decode_raw.)
424  std::string codec_type_;
425 
426  // If --descriptor_set_in was given, these are filenames containing
427  // parsed FileDescriptorSets to be used for loading protos. Otherwise, empty.
428  std::vector<std::string> descriptor_set_in_names_;
429 
430  // If --descriptor_set_out was given, this is the filename to which the
431  // FileDescriptorSet should be written. Otherwise, empty.
432  std::string descriptor_set_out_name_;
433 
434  // If --dependency_out was given, this is the path to the file where the
435  // dependency file will be written. Otherwise, empty.
436  std::string dependency_out_name_;
437 
438  // True if --include_imports was given, meaning that we should
439  // write all transitive dependencies to the DescriptorSet. Otherwise, only
440  // the .proto files listed on the command-line are added.
441  bool imports_in_descriptor_set_;
442 
443  // True if --include_source_info was given, meaning that we should not strip
444  // SourceCodeInfo from the DescriptorSet.
445  bool source_info_in_descriptor_set_ = false;
446 
447  // Was the --disallow_services flag used?
448  bool disallow_services_ = false;
449 
450  // When using --encode, this will be passed to SetSerializationDeterministic.
451  bool deterministic_output_ = false;
452 
454 };
455 
456 } // namespace compiler
457 } // namespace protobuf
458 } // namespace google
459 
460 #include <google/protobuf/port_undef.inc>
461 
462 #endif // GOOGLE_PROTOBUF_COMPILER_COMMAND_LINE_INTERFACE_H__
google::protobuf::RepeatedPtrField
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.h:62
google::protobuf::value
const Descriptor::ReservedRange value
Definition: bloaty/third_party/protobuf/src/google/protobuf/descriptor.h:1954
GOOGLE_DISALLOW_EVIL_CONSTRUCTORS
#define GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TypeName)
Definition: bloaty/third_party/protobuf/src/google/protobuf/stubs/macros.h:40
google::protobuf::compiler::CodeGenerator
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/code_generator.h:68
testing::internal::kPathSeparator
const char kPathSeparator
Definition: bloaty/third_party/googletest/googletest/src/gtest-filepath.cc:80
FileDescriptor
Definition: bloaty/third_party/protobuf/ruby/ext/google/protobuf_c/protobuf.h:128
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
error
grpc_error_handle error
Definition: retry_filter.cc:499
google::protobuf::compiler::CommandLineInterface::SetVersionInfo
void SetVersionInfo(const std::string &text)
Definition: protobuf/src/google/protobuf/compiler/command_line_interface.h:204
file
Definition: bloaty/third_party/zlib/examples/gzappend.c:170
google::protobuf
Definition: bloaty/third_party/protobuf/benchmarks/util/data_proto2_to_proto3_util.h:12
setup.name
name
Definition: setup.py:542
google::protobuf::compiler::DiskSourceTree
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/importer.h:240
google::protobuf::compiler::CommandLineInterface::SetInputsAreProtoPathRelative
void SetInputsAreProtoPathRelative(bool)
Definition: protobuf/src/google/protobuf/compiler/command_line_interface.h:199
grpc::protobuf::compiler::DiskSourceTree
GRPC_CUSTOM_DISKSOURCETREE DiskSourceTree
Definition: config_grpc_cli.h:62
grpc::protobuf::SimpleDescriptorDatabase
GRPC_CUSTOM_SIMPLEDESCRIPTORDATABASE SimpleDescriptorDatabase
Definition: include/grpcpp/impl/codegen/config_protobuf.h:89
Descriptor
Definition: bloaty/third_party/protobuf/ruby/ext/google/protobuf_c/protobuf.h:121
google::protobuf::compiler::CommandLineInterface::GeneratorContextMap
std::unordered_map< std::string, std::unique_ptr< GeneratorContextImpl > > GeneratorContextMap
Definition: protobuf/src/google/protobuf/compiler/command_line_interface.h:212
grpc::protobuf::compiler::GeneratorContext
GRPC_CUSTOM_GENERATORCONTEXT GeneratorContext
Definition: src/compiler/config.h:42
google::protobuf::compiler::CommandLineInterface
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.h:109
grpc::protobuf::compiler::CodeGenerator
GRPC_CUSTOM_CODEGENERATOR CodeGenerator
Definition: src/compiler/config.h:41
gen_server_registered_method_bad_client_test_body.text
def text
Definition: gen_server_registered_method_bad_client_test_body.py:50
gmock_output_test.output
output
Definition: bloaty/third_party/googletest/googlemock/test/gmock_output_test.py:175
uint64_t
unsigned __int64 uint64_t
Definition: stdint-msvc2008.h:90
google::protobuf::DescriptorPool
Definition: bloaty/third_party/protobuf/src/google/protobuf/descriptor.h:1539
arg
Definition: cmdline.cc:40
grpc::protobuf::DescriptorDatabase
GRPC_CUSTOM_DESCRIPTORDATABASE DescriptorDatabase
Definition: include/grpcpp/impl/codegen/config_protobuf.h:83
google::protobuf::compiler::CommandLineInterface::ParseArgumentStatus
ParseArgumentStatus
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.h:230
FileDescriptorProto
Definition: bloaty/third_party/protobuf/src/google/protobuf/descriptor.pb.h:501
FileDescriptorSet
Definition: bloaty/third_party/protobuf/src/google/protobuf/descriptor.pb.h:333
google::protobuf::DescriptorDatabase
Definition: bloaty/third_party/protobuf/src/google/protobuf/descriptor_database.h:71
google::protobuf::compiler::CommandLineInterface::ErrorFormat
ErrorFormat
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.h:383
google::protobuf.internal.python_message.Clear
Clear
Definition: bloaty/third_party/protobuf/python/google/protobuf/internal/python_message.py:1430
google::protobuf::compiler::CommandLineInterface::MemoryOutputStream
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.cc:403
google::protobuf::compiler::CommandLineInterface::Mode
Mode
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.h:367
google::protobuf::compiler::CommandLineInterface::GeneratorMap
std::map< std::string, GeneratorInfo > GeneratorMap
Definition: protobuf/src/google/protobuf/compiler/command_line_interface.h:353
google::protobuf::Descriptor
Definition: bloaty/third_party/protobuf/src/google/protobuf/descriptor.h:231
pool
InternalDescriptorPool * pool
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/protobuf.h:807
google::protobuf::FileDescriptor
Definition: bloaty/third_party/protobuf/src/google/protobuf/descriptor.h:1320
google::protobuf::compiler::CommandLineInterface::OutputDirective
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.h:405
googletest-break-on-failure-unittest.Run
def Run(command)
Definition: bloaty/third_party/googletest/googletest/test/googletest-break-on-failure-unittest.py:76
DescriptorPool
Definition: bloaty/third_party/protobuf/ruby/ext/google/protobuf_c/protobuf.h:110
google::protobuf::compiler::GeneratorContext
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/code_generator.h:119
google::protobuf::compiler::CommandLineInterface::PrintMode
PrintMode
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/command_line_interface.h:376
descriptor
static const char descriptor[1336]
Definition: certs.upbdefs.c:16
compiler
Definition: bloaty/third_party/protobuf/src/google/protobuf/compiler/plugin.pb.cc:21
google
Definition: bloaty/third_party/protobuf/benchmarks/util/data_proto2_to_proto3_util.h:11


grpc
Author(s):
autogenerated on Fri May 16 2025 02:57:59