| Index: third_party/protobuf/src/google/protobuf/descriptor.h
|
| ===================================================================
|
| --- third_party/protobuf/src/google/protobuf/descriptor.h (revision 216642)
|
| +++ third_party/protobuf/src/google/protobuf/descriptor.h (working copy)
|
| @@ -89,6 +89,7 @@
|
| class MethodOptions;
|
| class FileOptions;
|
| class UninterpretedOption;
|
| +class SourceCodeInfo;
|
|
|
| // Defined in message.h
|
| class Message;
|
| @@ -100,6 +101,20 @@
|
| // Defined in unknown_field_set.h.
|
| class UnknownField;
|
|
|
| +// NB, all indices are zero-based.
|
| +struct SourceLocation {
|
| + int start_line;
|
| + int end_line;
|
| + int start_column;
|
| + int end_column;
|
| +
|
| + // Doc comments found at the source location.
|
| + // TODO(kenton): Maybe this struct should have been named SourceInfo or
|
| + // something instead. Oh well.
|
| + string leading_comments;
|
| + string trailing_comments;
|
| +};
|
| +
|
| // Describes a type of protocol message, or a particular group within a
|
| // message. To obtain the Descriptor for a given message object, call
|
| // Message::GetDescriptor(). Generated message classes also have a
|
| @@ -236,6 +251,13 @@
|
| // this message type's scope.
|
| const FieldDescriptor* FindExtensionByCamelcaseName(const string& name) const;
|
|
|
| + // Source Location ---------------------------------------------------
|
| +
|
| + // Updates |*out_location| to the source location of the complete
|
| + // extent of this message declaration. Returns false and leaves
|
| + // |*out_location| unchanged iff location information was not available.
|
| + bool GetSourceLocation(SourceLocation* out_location) const;
|
| +
|
| private:
|
| typedef MessageOptions OptionsType;
|
|
|
| @@ -243,6 +265,10 @@
|
| // correct depth
|
| void DebugString(int depth, string *contents) const;
|
|
|
| + // Walks up the descriptor tree to generate the source location path
|
| + // to this descriptor from the file root.
|
| + void GetLocationPath(vector<int>* output) const;
|
| +
|
| const string* name_;
|
| const string* full_name_;
|
| const FileDescriptor* file_;
|
| @@ -388,15 +414,19 @@
|
| // when parsing formats which prefer to use camel-case naming style.
|
| const string& camelcase_name() const;
|
|
|
| - Type type() const; // Declared type of this field.
|
| - CppType cpp_type() const; // C++ type of this field.
|
| - Label label() const; // optional/required/repeated
|
| + Type type() const; // Declared type of this field.
|
| + const char* type_name() const; // Name of the declared type.
|
| + CppType cpp_type() const; // C++ type of this field.
|
| + const char* cpp_type_name() const; // Name of the C++ type.
|
| + Label label() const; // optional/required/repeated
|
|
|
| bool is_required() const; // shorthand for label() == LABEL_REQUIRED
|
| bool is_optional() const; // shorthand for label() == LABEL_OPTIONAL
|
| bool is_repeated() const; // shorthand for label() == LABEL_REPEATED
|
| bool is_packable() const; // shorthand for is_repeated() &&
|
| // IsTypePackable(type())
|
| + bool is_packed() const; // shorthand for is_packable() &&
|
| + // options().packed()
|
|
|
| // Index of this field within the message's field array, or the file or
|
| // extension scope's extensions array.
|
| @@ -479,6 +509,13 @@
|
| // Return true iff [packed = true] is valid for fields of this type.
|
| static inline bool IsTypePackable(Type field_type);
|
|
|
| + // Source Location ---------------------------------------------------
|
| +
|
| + // Updates |*out_location| to the source location of the complete
|
| + // extent of this field declaration. Returns false and leaves
|
| + // |*out_location| unchanged iff location information was not available.
|
| + bool GetSourceLocation(SourceLocation* out_location) const;
|
| +
|
| private:
|
| typedef FieldOptions OptionsType;
|
|
|
| @@ -490,6 +527,10 @@
|
| // types of CPPTYPE_STRING whill be surrounded by quotes and CEscaped.
|
| string DefaultValueAsString(bool quote_string_type) const;
|
|
|
| + // Walks up the descriptor tree to generate the source location path
|
| + // to this descriptor from the file root.
|
| + void GetLocationPath(vector<int>* output) const;
|
| +
|
| const string* name_;
|
| const string* full_name_;
|
| const string* lowercase_name_;
|
| @@ -527,6 +568,8 @@
|
|
|
| static const char * const kTypeToName[MAX_TYPE + 1];
|
|
|
| + static const char * const kCppTypeToName[MAX_CPPTYPE + 1];
|
| +
|
| static const char * const kLabelToName[MAX_LABEL + 1];
|
|
|
| // Must be constructed using DescriptorPool.
|
| @@ -583,12 +626,23 @@
|
| // See Descriptor::DebugString().
|
| string DebugString() const;
|
|
|
| + // Source Location ---------------------------------------------------
|
| +
|
| + // Updates |*out_location| to the source location of the complete
|
| + // extent of this enum declaration. Returns false and leaves
|
| + // |*out_location| unchanged iff location information was not available.
|
| + bool GetSourceLocation(SourceLocation* out_location) const;
|
| +
|
| private:
|
| typedef EnumOptions OptionsType;
|
|
|
| // See Descriptor::DebugString().
|
| void DebugString(int depth, string *contents) const;
|
|
|
| + // Walks up the descriptor tree to generate the source location path
|
| + // to this descriptor from the file root.
|
| + void GetLocationPath(vector<int>* output) const;
|
| +
|
| const string* name_;
|
| const string* full_name_;
|
| const FileDescriptor* file_;
|
| @@ -650,12 +704,23 @@
|
| // See Descriptor::DebugString().
|
| string DebugString() const;
|
|
|
| + // Source Location ---------------------------------------------------
|
| +
|
| + // Updates |*out_location| to the source location of the complete
|
| + // extent of this enum value declaration. Returns false and leaves
|
| + // |*out_location| unchanged iff location information was not available.
|
| + bool GetSourceLocation(SourceLocation* out_location) const;
|
| +
|
| private:
|
| typedef EnumValueOptions OptionsType;
|
|
|
| // See Descriptor::DebugString().
|
| void DebugString(int depth, string *contents) const;
|
|
|
| + // Walks up the descriptor tree to generate the source location path
|
| + // to this descriptor from the file root.
|
| + void GetLocationPath(vector<int>* output) const;
|
| +
|
| const string* name_;
|
| const string* full_name_;
|
| int number_;
|
| @@ -703,19 +768,29 @@
|
|
|
| // Look up a MethodDescriptor by name.
|
| const MethodDescriptor* FindMethodByName(const string& name) const;
|
| -
|
| // See Descriptor::CopyTo().
|
| void CopyTo(ServiceDescriptorProto* proto) const;
|
|
|
| // See Descriptor::DebugString().
|
| string DebugString() const;
|
|
|
| + // Source Location ---------------------------------------------------
|
| +
|
| + // Updates |*out_location| to the source location of the complete
|
| + // extent of this service declaration. Returns false and leaves
|
| + // |*out_location| unchanged iff location information was not available.
|
| + bool GetSourceLocation(SourceLocation* out_location) const;
|
| +
|
| private:
|
| typedef ServiceOptions OptionsType;
|
|
|
| // See Descriptor::DebugString().
|
| void DebugString(string *contents) const;
|
|
|
| + // Walks up the descriptor tree to generate the source location path
|
| + // to this descriptor from the file root.
|
| + void GetLocationPath(vector<int>* output) const;
|
| +
|
| const string* name_;
|
| const string* full_name_;
|
| const FileDescriptor* file_;
|
| @@ -768,12 +843,23 @@
|
| // See Descriptor::DebugString().
|
| string DebugString() const;
|
|
|
| + // Source Location ---------------------------------------------------
|
| +
|
| + // Updates |*out_location| to the source location of the complete
|
| + // extent of this method declaration. Returns false and leaves
|
| + // |*out_location| unchanged iff location information was not available.
|
| + bool GetSourceLocation(SourceLocation* out_location) const;
|
| +
|
| private:
|
| typedef MethodOptions OptionsType;
|
|
|
| // See Descriptor::DebugString().
|
| void DebugString(int depth, string *contents) const;
|
|
|
| + // Walks up the descriptor tree to generate the source location path
|
| + // to this descriptor from the file root.
|
| + void GetLocationPath(vector<int>* output) const;
|
| +
|
| const string* name_;
|
| const string* full_name_;
|
| const ServiceDescriptor* service_;
|
| @@ -791,6 +877,7 @@
|
| GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MethodDescriptor);
|
| };
|
|
|
| +
|
| // Describes a whole .proto file. To get the FileDescriptor for a compiled-in
|
| // file, get the descriptor for something defined in that file and call
|
| // descriptor->file(). Use DescriptorPool to construct your own descriptors.
|
| @@ -813,6 +900,22 @@
|
| // These are returned in the order they were defined in the .proto file.
|
| const FileDescriptor* dependency(int index) const;
|
|
|
| + // The number of files public imported by this one.
|
| + // The public dependency list is a subset of the dependency list.
|
| + int public_dependency_count() const;
|
| + // Gets a public imported file by index, where 0 <= index <
|
| + // public_dependency_count().
|
| + // These are returned in the order they were defined in the .proto file.
|
| + const FileDescriptor* public_dependency(int index) const;
|
| +
|
| + // The number of files that are imported for weak fields.
|
| + // The weak dependency list is a subset of the dependency list.
|
| + int weak_dependency_count() const;
|
| + // Gets a weak imported file by index, where 0 <= index <
|
| + // weak_dependency_count().
|
| + // These are returned in the order they were defined in the .proto file.
|
| + const FileDescriptor* weak_dependency(int index) const;
|
| +
|
| // Number of top-level message types defined in this file. (This does not
|
| // include nested types.)
|
| int message_type_count() const;
|
| @@ -866,12 +969,28 @@
|
| const FieldDescriptor* FindExtensionByCamelcaseName(const string& name) const;
|
|
|
| // See Descriptor::CopyTo().
|
| + // Notes:
|
| + // - This method does NOT copy source code information since it is relatively
|
| + // large and rarely needed. See CopySourceCodeInfoTo() below.
|
| void CopyTo(FileDescriptorProto* proto) const;
|
| + // Write the source code information of this FileDescriptor into the given
|
| + // FileDescriptorProto. See CopyTo() above.
|
| + void CopySourceCodeInfoTo(FileDescriptorProto* proto) const;
|
|
|
| // See Descriptor::DebugString().
|
| string DebugString() const;
|
|
|
| private:
|
| + // Source Location ---------------------------------------------------
|
| +
|
| + // Updates |*out_location| to the source location of the complete
|
| + // extent of the declaration or declaration-part denoted by |path|.
|
| + // Returns false and leaves |*out_location| unchanged iff location
|
| + // information was not available. (See SourceCodeInfo for
|
| + // description of path encoding.)
|
| + bool GetSourceLocation(const vector<int>& path,
|
| + SourceLocation* out_location) const;
|
| +
|
| typedef FileOptions OptionsType;
|
|
|
| const string* name_;
|
| @@ -879,6 +998,10 @@
|
| const DescriptorPool* pool_;
|
| int dependency_count_;
|
| const FileDescriptor** dependencies_;
|
| + int public_dependency_count_;
|
| + int* public_dependencies_;
|
| + int weak_dependency_count_;
|
| + int* weak_dependencies_;
|
| int message_type_count_;
|
| Descriptor* message_types_;
|
| int enum_type_count_;
|
| @@ -890,6 +1013,7 @@
|
| const FileOptions* options_;
|
|
|
| const FileDescriptorTables* tables_;
|
| + const SourceCodeInfo* source_code_info_;
|
| // IMPORTANT: If you add a new field, make sure to search for all instances
|
| // of Allocate<FileDescriptor>() and AllocateArray<FileDescriptor>() in
|
| // descriptor.cc and update them to initialize the field.
|
| @@ -899,6 +1023,8 @@
|
| friend class Descriptor;
|
| friend class FieldDescriptor;
|
| friend class EnumDescriptor;
|
| + friend class EnumValueDescriptor;
|
| + friend class MethodDescriptor;
|
| friend class ServiceDescriptor;
|
| GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileDescriptor);
|
| };
|
| @@ -1106,7 +1232,7 @@
|
| // For internal use only: Gets a non-const pointer to the generated pool.
|
| // This is called at static-initialization time only, so thread-safety is
|
| // not a concern. If both an underlay and a fallback database are present,
|
| - // the fallback database takes precedence.
|
| + // the underlay takes precedence.
|
| static DescriptorPool* internal_generated_pool();
|
|
|
| // For internal use only: Changes the behavior of BuildFile() such that it
|
| @@ -1132,6 +1258,11 @@
|
| friend class FileDescriptor;
|
| friend class DescriptorBuilder;
|
|
|
| + // Return true if the given name is a sub-symbol of any non-package
|
| + // descriptor that already exists in the descriptor pool. (The full
|
| + // definition of such types is already known.)
|
| + bool IsSubSymbolOfBuiltType(const string& name) const;
|
| +
|
| // Tries to find something in the fallback database and link in the
|
| // corresponding proto file. Returns true if successful, in which case
|
| // the caller should search for the thing again. These are declared
|
| @@ -1262,11 +1393,12 @@
|
| PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, input_type, const Descriptor*)
|
| PROTOBUF_DEFINE_ACCESSOR(MethodDescriptor, output_type, const Descriptor*)
|
| PROTOBUF_DEFINE_OPTIONS_ACCESSOR(MethodDescriptor, MethodOptions);
|
| -
|
| PROTOBUF_DEFINE_STRING_ACCESSOR(FileDescriptor, name)
|
| PROTOBUF_DEFINE_STRING_ACCESSOR(FileDescriptor, package)
|
| PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, pool, const DescriptorPool*)
|
| PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, dependency_count, int)
|
| +PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, public_dependency_count, int)
|
| +PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, weak_dependency_count, int)
|
| PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, message_type_count, int)
|
| PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, enum_type_count, int)
|
| PROTOBUF_DEFINE_ACCESSOR(FileDescriptor, service_count, int)
|
| @@ -1342,10 +1474,18 @@
|
| return this - service_->methods_;
|
| }
|
|
|
| +inline const char* FieldDescriptor::type_name() const {
|
| + return kTypeToName[type_];
|
| +}
|
| +
|
| inline FieldDescriptor::CppType FieldDescriptor::cpp_type() const {
|
| return kTypeToCppTypeMap[type_];
|
| }
|
|
|
| +inline const char* FieldDescriptor::cpp_type_name() const {
|
| + return kCppTypeToName[kTypeToCppTypeMap[type_]];
|
| +}
|
| +
|
| inline FieldDescriptor::CppType FieldDescriptor::TypeToCppType(Type type) {
|
| return kTypeToCppTypeMap[type];
|
| }
|
| @@ -1361,6 +1501,16 @@
|
| return dependencies_[index];
|
| }
|
|
|
| +inline const FileDescriptor* FileDescriptor::public_dependency(
|
| + int index) const {
|
| + return dependencies_[public_dependencies_[index]];
|
| +}
|
| +
|
| +inline const FileDescriptor* FileDescriptor::weak_dependency(
|
| + int index) const {
|
| + return dependencies_[weak_dependencies_[index]];
|
| +}
|
| +
|
| } // namespace protobuf
|
|
|
| } // namespace google
|
|
|