| OLD | NEW |
| (Empty) |
| 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 #ifndef GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_HELPERS_H__ | |
| 32 #define GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_HELPERS_H__ | |
| 33 | |
| 34 #include <string> | |
| 35 #include <vector> | |
| 36 | |
| 37 #include <google/protobuf/descriptor.h> | |
| 38 #include <google/protobuf/descriptor.pb.h> | |
| 39 | |
| 40 namespace google { | |
| 41 namespace protobuf { | |
| 42 namespace compiler { | |
| 43 namespace objectivec { | |
| 44 | |
| 45 // Strips ".proto" or ".protodevel" from the end of a filename. | |
| 46 string StripProto(const string& filename); | |
| 47 | |
| 48 // Returns true if the name requires a ns_returns_not_retained attribute applied | |
| 49 // to it. | |
| 50 bool IsRetainedName(const string& name); | |
| 51 | |
| 52 // Returns true if the name starts with "init" and will need to have special | |
| 53 // handling under ARC. | |
| 54 bool IsInitName(const string& name); | |
| 55 | |
| 56 // Gets the name of the file we're going to generate (sans the .pb.h | |
| 57 // extension). This does not include the path to that file. | |
| 58 string FileName(const FileDescriptor* file); | |
| 59 | |
| 60 // Gets the path of the file we're going to generate (sans the .pb.h | |
| 61 // extension). The path will be dependent on the objectivec package | |
| 62 // declared in the proto package. | |
| 63 string FilePath(const FileDescriptor* file); | |
| 64 | |
| 65 // Checks the prefix for a given file and outputs any warnings/errors needed. | |
| 66 void ValidateObjCClassPrefix(const FileDescriptor* file); | |
| 67 | |
| 68 // Gets the name of the root class we'll generate in the file. This class | |
| 69 // is not meant for external consumption, but instead contains helpers that | |
| 70 // the rest of the the classes need | |
| 71 string FileClassName(const FileDescriptor* file); | |
| 72 | |
| 73 // These return the fully-qualified class name corresponding to the given | |
| 74 // descriptor. | |
| 75 string ClassName(const Descriptor* descriptor); | |
| 76 string EnumName(const EnumDescriptor* descriptor); | |
| 77 | |
| 78 // Returns the fully-qualified name of the enum value corresponding to the | |
| 79 // the descriptor. | |
| 80 string EnumValueName(const EnumValueDescriptor* descriptor); | |
| 81 | |
| 82 // Returns the name of the enum value corresponding to the descriptor. | |
| 83 string EnumValueShortName(const EnumValueDescriptor* descriptor); | |
| 84 | |
| 85 // Reverse what an enum does. | |
| 86 string UnCamelCaseEnumShortName(const string& name); | |
| 87 | |
| 88 // Returns the name to use for the extension (used as the method off the file's | |
| 89 // Root class). | |
| 90 string ExtensionMethodName(const FieldDescriptor* descriptor); | |
| 91 | |
| 92 // Returns the transformed field name. | |
| 93 string FieldName(const FieldDescriptor* field); | |
| 94 string FieldNameCapitalized(const FieldDescriptor* field); | |
| 95 | |
| 96 // Returns the transformed oneof name. | |
| 97 string OneofEnumName(const OneofDescriptor* descriptor); | |
| 98 string OneofName(const OneofDescriptor* descriptor); | |
| 99 string OneofNameCapitalized(const OneofDescriptor* descriptor); | |
| 100 | |
| 101 inline bool HasFieldPresence(const FileDescriptor* file) { | |
| 102 return file->syntax() != FileDescriptor::SYNTAX_PROTO3; | |
| 103 } | |
| 104 | |
| 105 inline bool HasPreservingUnknownEnumSemantics(const FileDescriptor* file) { | |
| 106 return file->syntax() == FileDescriptor::SYNTAX_PROTO3; | |
| 107 } | |
| 108 | |
| 109 inline bool IsMapEntryMessage(const Descriptor* descriptor) { | |
| 110 return descriptor->options().map_entry(); | |
| 111 } | |
| 112 | |
| 113 // Reverse of the above. | |
| 114 string UnCamelCaseFieldName(const string& name, const FieldDescriptor* field); | |
| 115 | |
| 116 enum ObjectiveCType { | |
| 117 OBJECTIVECTYPE_INT32, | |
| 118 OBJECTIVECTYPE_UINT32, | |
| 119 OBJECTIVECTYPE_INT64, | |
| 120 OBJECTIVECTYPE_UINT64, | |
| 121 OBJECTIVECTYPE_FLOAT, | |
| 122 OBJECTIVECTYPE_DOUBLE, | |
| 123 OBJECTIVECTYPE_BOOLEAN, | |
| 124 OBJECTIVECTYPE_STRING, | |
| 125 OBJECTIVECTYPE_DATA, | |
| 126 OBJECTIVECTYPE_ENUM, | |
| 127 OBJECTIVECTYPE_MESSAGE | |
| 128 }; | |
| 129 | |
| 130 string GetCapitalizedType(const FieldDescriptor* field); | |
| 131 | |
| 132 ObjectiveCType GetObjectiveCType(FieldDescriptor::Type field_type); | |
| 133 | |
| 134 inline ObjectiveCType GetObjectiveCType(const FieldDescriptor* field) { | |
| 135 return GetObjectiveCType(field->type()); | |
| 136 } | |
| 137 | |
| 138 bool IsPrimitiveType(const FieldDescriptor* field); | |
| 139 bool IsReferenceType(const FieldDescriptor* field); | |
| 140 | |
| 141 string GPBGenericValueFieldName(const FieldDescriptor* field); | |
| 142 string DefaultValue(const FieldDescriptor* field); | |
| 143 | |
| 144 string BuildFlagsString(const vector<string>& strings); | |
| 145 | |
| 146 string BuildCommentsString(const SourceLocation& location); | |
| 147 | |
| 148 // Generate decode data needed for ObjC's GPBDecodeTextFormatName() to transform | |
| 149 // the input into the the expected output. | |
| 150 class LIBPROTOC_EXPORT TextFormatDecodeData { | |
| 151 public: | |
| 152 TextFormatDecodeData() {} | |
| 153 | |
| 154 void AddString(int32 key, const string& input_for_decode, | |
| 155 const string& desired_output); | |
| 156 size_t num_entries() const { return entries_.size(); } | |
| 157 string Data() const; | |
| 158 | |
| 159 static string DecodeDataForString(const string& input_for_decode, | |
| 160 const string& desired_output); | |
| 161 | |
| 162 private: | |
| 163 GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(TextFormatDecodeData); | |
| 164 | |
| 165 typedef std::pair<int32, string> DataEntry; | |
| 166 vector<DataEntry> entries_; | |
| 167 }; | |
| 168 | |
| 169 } // namespace objectivec | |
| 170 } // namespace compiler | |
| 171 } // namespace protobuf | |
| 172 } // namespace google | |
| 173 #endif // GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_HELPERS_H__ | |
| OLD | NEW |