Go to the documentation of this file.
33 #include <google/protobuf/compiler/objectivec/objectivec_field.h>
34 #include <google/protobuf/compiler/objectivec/objectivec_helpers.h>
35 #include <google/protobuf/compiler/objectivec/objectivec_enum_field.h>
36 #include <google/protobuf/compiler/objectivec/objectivec_map_field.h>
37 #include <google/protobuf/compiler/objectivec/objectivec_message_field.h>
38 #include <google/protobuf/compiler/objectivec/objectivec_primitive_field.h>
39 #include <google/protobuf/io/printer.h>
40 #include <google/protobuf/wire_format.h>
41 #include <google/protobuf/stubs/strutil.h>
46 namespace objectivec {
51 std::map<std::string, std::string>* variables) {
55 raw_field_name =
descriptor->message_type()->name();
62 const bool needs_custom_name = (raw_field_name != un_camel_case_name);
65 if (
descriptor->GetSourceLocation(&location)) {
68 (*variables)[
"comments"] =
"\n";
71 (*variables)[
"classname"] = classname;
72 (*variables)[
"name"] = camel_case_name;
74 (*variables)[
"capitalized_name"] = capitalized_name;
75 (*variables)[
"raw_field_name"] = raw_field_name;
76 (*variables)[
"field_number_name"] =
77 classname +
"_FieldNumber_" + capitalized_name;
81 std::vector<std::string> field_flags;
82 if (
descriptor->is_repeated()) field_flags.push_back(
"GPBFieldRepeated");
83 if (
descriptor->is_required()) field_flags.push_back(
"GPBFieldRequired");
84 if (
descriptor->is_optional()) field_flags.push_back(
"GPBFieldOptional");
85 if (
descriptor->is_packed()) field_flags.push_back(
"GPBFieldPacked");
89 field_flags.push_back(
"GPBFieldHasDefaultValue");
90 if (needs_custom_name) field_flags.push_back(
"GPBFieldTextFormatNameCustom");
92 field_flags.push_back(
"GPBFieldHasEnumDescriptor");
100 field_flags.push_back(
"GPBFieldClearHasIvarOnZero");
108 (*variables)[
"dataTypeSpecific_name"] =
"clazz";
109 (*variables)[
"dataTypeSpecific_value"] =
"Nil";
111 (*variables)[
"storage_offset_value"] =
112 "(uint32_t)offsetof(" + classname +
"__storage_, " + camel_case_name +
")";
113 (*variables)[
"storage_offset_comment"] =
"";
116 (*variables)[
"storage_attribute"] =
"";
124 if (
field->is_repeated()) {
127 if (
field->is_map()) {
159 result->FinishInitialization();
174 "$field_number_name$ = $field_number$,\n");
188 std::set<std::string>* fwd_decls)
const {
193 std::set<std::string>* fwd_decls)
const {
198 io::Printer* printer,
bool include_default)
const {
200 if (include_default) {
204 " .defaultValue.$default_name$ = $default$,\n"
205 " .core.name = \"$name$\",\n"
206 " .core.dataTypeSpecific.$dataTypeSpecific_name$ = $dataTypeSpecific_value$,\n"
207 " .core.number = $field_number_name$,\n"
208 " .core.hasIndex = $has_index$,\n"
209 " .core.offset = $storage_offset_value$,$storage_offset_comment$\n"
210 " .core.flags = $fieldflags$,\n"
211 " .core.dataType = GPBDataType$field_type$,\n"
217 " .name = \"$name$\",\n"
218 " .dataTypeSpecific.$dataTypeSpecific_name$ = $dataTypeSpecific_value$,\n"
219 " .number = $field_number_name$,\n"
220 " .hasIndex = $has_index$,\n"
221 " .offset = $storage_offset_value$,$storage_offset_comment$\n"
222 " .flags = $fieldflags$,\n"
223 " .dataType = GPBDataType$field_type$,\n"
243 std::cerr <<
"Error: should have overridden SetExtraRuntimeHasBitsBase()." << std::endl;
251 int index = oneof->index() + index_base;
279 printer->Print(
variables_,
"$storage_type$ $name$;\n");
287 "@property(nonatomic, readwrite) $property_type$ $name$$deprecated_attribute$;\n"
292 "@property(nonatomic, readwrite) BOOL has$capitalized_name$$deprecated_attribute$;\n");
299 printer->Print(
variables_,
"@dynamic has$capitalized_name$, $name$;\n");
301 printer->Print(
variables_,
"@dynamic $name$;\n");
316 variables_[
"property_storage_attribute"] =
"strong";
318 variables_[
"storage_attribute"] =
" NS_RETURNS_NOT_RETAINED";
326 printer->Print(
variables_,
"$storage_type$ *$name$;\n");
339 "@property(nonatomic, readwrite, $property_storage_attribute$, null_resettable) $property_type$ *$name$$storage_attribute$$deprecated_attribute$;\n");
343 "/** Test to see if @c $name$ has been set. */\n"
344 "@property(nonatomic, readwrite) BOOL has$capitalized_name$$deprecated_attribute$;\n");
350 "- ($property_type$ *)$name$ GPB_METHOD_FAMILY_NONE$deprecated_attribute$;\n");
352 printer->Print(
"\n");
373 printer->Print(
variables_,
"$array_storage_type$ *$name$;\n");
378 printer->Print(
variables_,
"@dynamic $name$, $name$_Count;\n");
394 "@property(nonatomic, readwrite, strong, null_resettable) $array_property_type$ *$name$$storage_attribute$$deprecated_attribute$;\n"
395 "/** The number of items in @c $name$ without causing the array to be created. */\n"
396 "@property(nonatomic, readonly) NSUInteger $name$_Count$deprecated_attribute$;\n");
401 "- ($array_property_type$ *)$name$ GPB_METHOD_FAMILY_NONE$deprecated_attribute$;\n");
403 printer->Print(
"\n");
414 extension_generators_(
descriptor->extension_count()) {
417 field_generators_[
i].reset(
420 for (
int i = 0;
i <
descriptor->extension_count();
i++) {
421 extension_generators_[
i].reset(
450 total_bits += extra_bits;
bool IsReferenceType(const FieldDescriptor *field)
bool DoesAnyFieldHaveNonZeroDefault(void) const
void Print(const std::map< std::string, std::string > &variables, const char *text)
virtual int ExtraRuntimeHasBitsNeeded(void) const
FieldGeneratorMap(const Descriptor *descriptor, const Options &options)
std::map< std::string, std::string > variables_
std::vector< std::unique_ptr< FieldGenerator > > extension_generators_
SingleFieldGenerator(const SingleFieldGenerator &)=delete
virtual void SetExtraRuntimeHasBitsBase(int index_base)
string DefaultValue(const FieldDescriptor *field)
const FieldDescriptor * descriptor_
void SetCommonFieldVariables(const FieldDescriptor *descriptor, std::map< std::string, std::string > *variables, const Options &options)
virtual void GenerateCFunctionDeclarations(io::Printer *printer) const
string ClassName(const Descriptor *descriptor)
#define GOOGLE_CHECK_EQ(A, B)
virtual bool WantsHasProperty(void) const =0
GRPC_CUSTOM_PRINTER Printer
virtual ~SingleFieldGenerator()
string UnCamelCaseFieldName(const string &name, const FieldDescriptor *field)
int CalculateHasBits(void)
FieldGenerator(const FieldGenerator &)=delete
string variable(const char *key) const
virtual void GeneratePropertyDeclaration(io::Printer *printer) const
string StrCat(const AlphaNum &a, const AlphaNum &b)
void GenerateFieldNumberConstant(io::Printer *printer) const
virtual void FinishInitialization(void)
bool HasNonZeroDefaultValue(const FieldDescriptor *field)
const FieldDescriptor * field(int index) const
bool has_presence() const
virtual void GeneratePropertyImplementation(io::Printer *printer) const
bool IsInitName(const string &name)
string GetOptionalDeprecatedAttribute(const TDescriptor *descriptor, const FileDescriptor *file=NULL, bool preSpace=true, bool postNewline=false)
const Descriptor * descriptor_
string BuildFlagsString(const FlagType flag_type, const std::vector< string > &strings)
const FieldGenerator & get_extension(int index) const
static FieldGenerator * Make(const FieldDescriptor *field, const Options &options)
void SetOneofIndexBase(int index_base)
string FieldName(const FieldDescriptor *field)
void SetOneofIndexBase(int index_base)
virtual void GenerateFieldStorageDeclaration(io::Printer *printer) const
string GetCapitalizedType(const FieldDescriptor *field)
virtual void GeneratePropertyDeclaration(io::Printer *printer) const
RepeatedFieldGenerator(const RepeatedFieldGenerator &)=delete
virtual void DetermineObjectiveCClassDefinitions(std::set< std::string > *fwd_decls) const
virtual ~RepeatedFieldGenerator()
string FieldNameCapitalized(const FieldDescriptor *field)
virtual bool WantsHasProperty(void) const
const FieldDescriptor * field
virtual void GeneratePropertyDeclaration(io::Printer *printer) const
virtual bool RuntimeUsesHasBit(void) const
virtual bool RuntimeUsesHasBit(void) const
virtual void GenerateFieldStorageDeclaration(io::Printer *printer) const
void GenerateFieldDescription(io::Printer *printer, bool include_default) const
const FieldGenerator & get(const FieldDescriptor *field) const
virtual void GenerateCFunctionImplementations(io::Printer *printer) const
const OneofDescriptor * real_containing_oneof() const
virtual void DetermineForwardDeclarations(std::set< string > *fwd_decls) const
std::vector< std::unique_ptr< FieldGenerator > > field_generators_
bool IsRetainedName(const string &name)
std::map< string, string > variables_
ObjCObjFieldGenerator(const ObjCObjFieldGenerator &)=delete
GRPC_CUSTOM_SOURCELOCATION SourceLocation
virtual void GenerateFieldStorageDeclaration(io::Printer *printer) const
virtual ~FieldGenerator()
virtual ~ObjCObjFieldGenerator()
ObjectiveCType GetObjectiveCType(FieldDescriptor::Type field_type)
static const char descriptor[1336]
void SetRuntimeHasBit(int has_index)
string GPBGenericValueFieldName(const FieldDescriptor *field)
virtual void FinishInitialization(void)
string BuildCommentsString(const SourceLocation &location, bool prefer_single_line)
virtual void GeneratePropertyImplementation(io::Printer *printer) const
grpc
Author(s):
autogenerated on Fri May 16 2025 02:59:34