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 |