| Index: third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
|
| diff --git a/third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.h b/third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
|
| index 3f56d94b31717adfce157942b7a627853e694ce7..a217944622e82eba7b4e60a6553bff72911ad3e2 100644
|
| --- a/third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
|
| +++ b/third_party/protobuf/src/google/protobuf/compiler/objectivec/objectivec_helpers.h
|
| @@ -28,6 +28,8 @@
|
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
| +// Helper functions for generating ObjectiveC code.
|
| +
|
| #ifndef GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_HELPERS_H__
|
| #define GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_HELPERS_H__
|
|
|
| @@ -46,6 +48,8 @@ namespace objectivec {
|
| struct Options {
|
| Options();
|
| string expected_prefixes_path;
|
| + string generate_for_named_framework;
|
| + string named_framework_to_proto_path_mappings_path;
|
| };
|
|
|
| // Escape C++ trigraphs by escaping question marks to "\?".
|
| @@ -54,6 +58,9 @@ string EscapeTrigraphs(const string& to_escape);
|
| // Strips ".proto" or ".protodevel" from the end of a filename.
|
| string StripProto(const string& filename);
|
|
|
| +// Remove white space from either end of a StringPiece.
|
| +void StringPieceTrimWhitespace(StringPiece* input);
|
| +
|
| // Returns true if the name requires a ns_returns_not_retained attribute applied
|
| // to it.
|
| bool IsRetainedName(const string& name);
|
| @@ -62,15 +69,17 @@ bool IsRetainedName(const string& name);
|
| // handling under ARC.
|
| bool IsInitName(const string& name);
|
|
|
| -// Gets the name of the file we're going to generate (sans the .pb.h
|
| -// extension). This does not include the path to that file.
|
| -string FileName(const FileDescriptor* file);
|
| +// Gets the objc_class_prefix.
|
| +string FileClassPrefix(const FileDescriptor* file);
|
|
|
| // Gets the path of the file we're going to generate (sans the .pb.h
|
| // extension). The path will be dependent on the objectivec package
|
| // declared in the proto package.
|
| string FilePath(const FileDescriptor* file);
|
|
|
| +// Just like FilePath(), but without the directory part.
|
| +string FilePathBasename(const FileDescriptor* file);
|
| +
|
| // Gets the name of the root class we'll generate in the file. This class
|
| // is not meant for external consumption, but instead contains helpers that
|
| // the rest of the classes need
|
| @@ -79,6 +88,7 @@ string FileClassName(const FileDescriptor* file);
|
| // These return the fully-qualified class name corresponding to the given
|
| // descriptor.
|
| string ClassName(const Descriptor* descriptor);
|
| +string ClassName(const Descriptor* descriptor, string* out_suffix_added);
|
| string EnumName(const EnumDescriptor* descriptor);
|
|
|
| // Returns the fully-qualified name of the enum value corresponding to the
|
| @@ -133,9 +143,25 @@ enum ObjectiveCType {
|
| OBJECTIVECTYPE_MESSAGE
|
| };
|
|
|
| +enum FlagType {
|
| + FLAGTYPE_DESCRIPTOR_INITIALIZATION,
|
| + FLAGTYPE_EXTENSION,
|
| + FLAGTYPE_FIELD
|
| +};
|
| +
|
| template<class TDescriptor>
|
| -string GetOptionalDeprecatedAttribute(const TDescriptor* descriptor, bool preSpace = true, bool postNewline = false) {
|
| - if (descriptor->options().deprecated()) {
|
| +string GetOptionalDeprecatedAttribute(
|
| + const TDescriptor* descriptor,
|
| + const FileDescriptor* file = NULL,
|
| + bool preSpace = true, bool postNewline = false) {
|
| + bool isDeprecated = descriptor->options().deprecated();
|
| + // The file is only passed when checking Messages & Enums, so those types
|
| + // get tagged. At the moment, it doesn't seem to make sense to tag every
|
| + // field or enum value with when the file is deprecated.
|
| + if (!isDeprecated && file) {
|
| + isDeprecated = file->options().deprecated();
|
| + }
|
| + if (isDeprecated) {
|
| string result = "DEPRECATED_ATTRIBUTE";
|
| if (preSpace) {
|
| result.insert(0, " ");
|
| @@ -164,23 +190,36 @@ string GPBGenericValueFieldName(const FieldDescriptor* field);
|
| string DefaultValue(const FieldDescriptor* field);
|
| bool HasNonZeroDefaultValue(const FieldDescriptor* field);
|
|
|
| -string BuildFlagsString(const vector<string>& strings);
|
| +string BuildFlagsString(const FlagType type, const vector<string>& strings);
|
|
|
| -// Builds a HeaderDoc style comment out of the comments in the .proto file.
|
| -string BuildCommentsString(const SourceLocation& location);
|
| +// Builds HeaderDoc/appledoc style comments out of the comments in the .proto
|
| +// file.
|
| +string BuildCommentsString(const SourceLocation& location,
|
| + bool prefer_single_line);
|
|
|
| -// Checks the prefix for a given file and outputs any warnings needed, if
|
| -// there are flat out errors, then out_error is filled in and the result is
|
| -// false.
|
| -bool ValidateObjCClassPrefix(const FileDescriptor* file,
|
| - const Options& generation_options,
|
| - string* out_error);
|
| +// The name the commonly used by the library when built as a framework.
|
| +// This lines up to the name used in the CocoaPod.
|
| +extern const char* const ProtobufLibraryFrameworkName;
|
| +// Returns the CPP symbol name to use as the gate for framework style imports
|
| +// for the given framework name to use.
|
| +string ProtobufFrameworkImportSymbol(const string& framework_name);
|
| +
|
| +// Checks if the file is one of the proto's bundled with the library.
|
| +bool IsProtobufLibraryBundledProtoFile(const FileDescriptor* file);
|
| +
|
| +// Checks the prefix for the given files and outputs any warnings as needed. If
|
| +// there are flat out errors, then out_error is filled in with the first error
|
| +// and the result is false.
|
| +bool ValidateObjCClassPrefixes(const vector<const FileDescriptor*>& files,
|
| + const Options& generation_options,
|
| + string* out_error);
|
|
|
| // Generate decode data needed for ObjC's GPBDecodeTextFormatName() to transform
|
| // the input into the expected output.
|
| class LIBPROTOC_EXPORT TextFormatDecodeData {
|
| public:
|
| - TextFormatDecodeData() {}
|
| + TextFormatDecodeData();
|
| + ~TextFormatDecodeData();
|
|
|
| void AddString(int32 key, const string& input_for_decode,
|
| const string& desired_output);
|
| @@ -197,6 +236,54 @@ class LIBPROTOC_EXPORT TextFormatDecodeData {
|
| vector<DataEntry> entries_;
|
| };
|
|
|
| +// Helper for parsing simple files.
|
| +class LIBPROTOC_EXPORT LineConsumer {
|
| + public:
|
| + LineConsumer();
|
| + virtual ~LineConsumer();
|
| + virtual bool ConsumeLine(const StringPiece& line, string* out_error) = 0;
|
| +};
|
| +
|
| +bool ParseSimpleFile(
|
| + const string& path, LineConsumer* line_consumer, string* out_error);
|
| +
|
| +
|
| +// Helper class for parsing framework import mappings and generating
|
| +// import statements.
|
| +class LIBPROTOC_EXPORT ImportWriter {
|
| + public:
|
| + ImportWriter(const string& generate_for_named_framework,
|
| + const string& named_framework_to_proto_path_mappings_path);
|
| + ~ImportWriter();
|
| +
|
| + void AddFile(const FileDescriptor* file, const string& header_extension);
|
| + void Print(io::Printer *printer) const;
|
| +
|
| + private:
|
| + class ProtoFrameworkCollector : public LineConsumer {
|
| + public:
|
| + ProtoFrameworkCollector(map<string, string>* inout_proto_file_to_framework_name)
|
| + : map_(inout_proto_file_to_framework_name) {}
|
| +
|
| + virtual bool ConsumeLine(const StringPiece& line, string* out_error);
|
| +
|
| + private:
|
| + map<string, string>* map_;
|
| + };
|
| +
|
| + void ParseFrameworkMappings();
|
| +
|
| + const string generate_for_named_framework_;
|
| + const string named_framework_to_proto_path_mappings_path_;
|
| + map<string, string> proto_file_to_framework_name_;
|
| + bool need_to_parse_mapping_file_;
|
| +
|
| + vector<string> protobuf_framework_imports_;
|
| + vector<string> protobuf_non_framework_imports_;
|
| + vector<string> other_framework_imports_;
|
| + vector<string> other_imports_;
|
| +};
|
| +
|
| } // namespace objectivec
|
| } // namespace compiler
|
| } // namespace protobuf
|
|
|