87
87
ExtensionGenerator::~ExtensionGenerator() {}
89
// Initializes the vars referenced in the generated code templates.
90
void InitTemplateVars(const FieldDescriptor* descriptor,
92
map<string, string>* vars_pointer) {
93
map<string, string> &vars = *vars_pointer;
94
vars["scope"] = scope;
95
vars["name"] = UnderscoresToCamelCase(descriptor);
96
vars["containing_type"] = ClassName(descriptor->containing_type());
97
vars["number"] = SimpleItoa(descriptor->number());
98
vars["constant_name"] = FieldConstantName(descriptor);
99
vars["index"] = SimpleItoa(descriptor->index());
101
descriptor->is_repeated() ? "" : DefaultValue(descriptor);
102
vars["type_constant"] = TypeName(GetType(descriptor));
103
vars["packed"] = descriptor->options().packed() ? "true" : "false";
104
vars["enum_map"] = "null";
105
vars["prototype"] = "null";
107
JavaType java_type = GetJavaType(descriptor);
108
string singular_type;
110
case JAVATYPE_MESSAGE:
111
singular_type = ClassName(descriptor->message_type());
112
vars["prototype"] = singular_type + ".getDefaultInstance()";
115
singular_type = ClassName(descriptor->enum_type());
116
vars["enum_map"] = singular_type + ".internalGetValueMap()";
119
singular_type = BoxedPrimitiveTypeName(java_type);
122
vars["type"] = descriptor->is_repeated() ?
123
"java.util.List<" + singular_type + ">" : singular_type;
124
vars["singular_type"] = singular_type;
89
127
void ExtensionGenerator::Generate(io::Printer* printer) {
90
128
map<string, string> vars;
91
vars["name"] = UnderscoresToCamelCase(descriptor_);
92
vars["containing_type"] = ClassName(descriptor_->containing_type());
93
vars["number"] = SimpleItoa(descriptor_->number());
94
vars["constant_name"] = FieldConstantName(descriptor_);
95
vars["lite"] = HasDescriptorMethods(descriptor_->file()) ? "" : "Lite";
97
JavaType java_type = GetJavaType(descriptor_);
100
case JAVATYPE_MESSAGE:
101
vars["type"] = ClassName(descriptor_->message_type());
104
vars["type"] = ClassName(descriptor_->enum_type());
107
vars["type"] = BoxedPrimitiveTypeName(java_type);
129
InitTemplateVars(descriptor_, scope_, &vars);
111
130
printer->Print(vars,
112
"public static final int $constant_name$ = $number$;\n");
113
if (descriptor_->is_repeated()) {
115
"public static final\n"
116
" com.google.protobuf.GeneratedMessage$lite$.GeneratedExtension<\n"
117
" $containing_type$,\n"
118
" java.util.List<$type$>> $name$ =\n"
119
" com.google.protobuf.GeneratedMessage$lite$\n"
120
" .newGeneratedExtension();\n");
123
"public static final\n"
124
" com.google.protobuf.GeneratedMessage$lite$.GeneratedExtension<\n"
125
" $containing_type$,\n"
126
" $type$> $name$ =\n"
127
" com.google.protobuf.GeneratedMessage$lite$\n"
128
" .newGeneratedExtension();\n");
132
void ExtensionGenerator::GenerateInitializationCode(io::Printer* printer) {
133
map<string, string> vars;
134
vars["name"] = UnderscoresToCamelCase(descriptor_);
135
vars["scope"] = scope_;
136
vars["index"] = SimpleItoa(descriptor_->index());
137
vars["extendee"] = ClassName(descriptor_->containing_type());
138
vars["default"] = descriptor_->is_repeated() ? "" : DefaultValue(descriptor_);
139
vars["number"] = SimpleItoa(descriptor_->number());
140
vars["type_constant"] = TypeName(GetType(descriptor_));
141
vars["packed"] = descriptor_->options().packed() ? "true" : "false";
142
vars["enum_map"] = "null";
143
vars["prototype"] = "null";
145
JavaType java_type = GetJavaType(descriptor_);
146
string singular_type;
148
case JAVATYPE_MESSAGE:
149
vars["type"] = ClassName(descriptor_->message_type());
150
vars["prototype"] = ClassName(descriptor_->message_type()) +
151
".getDefaultInstance()";
154
vars["type"] = ClassName(descriptor_->enum_type());
155
vars["enum_map"] = ClassName(descriptor_->enum_type()) +
156
".internalGetValueMap()";
159
vars["type"] = BoxedPrimitiveTypeName(java_type);
131
"public static final int $constant_name$ = $number$;\n");
163
133
if (HasDescriptorMethods(descriptor_->file())) {
165
"$scope$.$name$.internalInit(\n"
166
" $scope$.getDescriptor().getExtensions().get($index$),\n"
167
" $type$.class);\n");
134
// Non-lite extensions
135
if (descriptor_->extension_scope() == NULL) {
139
"public static final\n"
140
" com.google.protobuf.GeneratedMessage.GeneratedExtension<\n"
141
" $containing_type$,\n"
142
" $type$> $name$ = com.google.protobuf.GeneratedMessage\n"
143
" .newFileScopedGeneratedExtension(\n"
144
" $singular_type$.class,\n"
150
"public static final\n"
151
" com.google.protobuf.GeneratedMessage.GeneratedExtension<\n"
152
" $containing_type$,\n"
153
" $type$> $name$ = com.google.protobuf.GeneratedMessage\n"
154
" .newMessageScopedGeneratedExtension(\n"
155
" $scope$.getDefaultInstance(),\n"
157
" $singular_type$.class,\n"
169
162
if (descriptor_->is_repeated()) {
171
"$scope$.$name$.internalInitRepeated(\n"
172
" $extendee$.getDefaultInstance(),\n"
176
" com.google.protobuf.WireFormat.FieldType.$type_constant$,\n"
165
"public static final\n"
166
" com.google.protobuf.GeneratedMessageLite.GeneratedExtension<\n"
167
" $containing_type$,\n"
168
" $type$> $name$ = com.google.protobuf.GeneratedMessageLite\n"
169
" .newRepeatedGeneratedExtension(\n"
170
" $containing_type$.getDefaultInstance(),\n"
174
" com.google.protobuf.WireFormat.FieldType.$type_constant$,\n"
180
"$scope$.$name$.internalInitSingular(\n"
181
" $extendee$.getDefaultInstance(),\n"
186
" com.google.protobuf.WireFormat.FieldType.$type_constant$);\n");
179
"public static final\n"
180
" com.google.protobuf.GeneratedMessageLite.GeneratedExtension<\n"
181
" $containing_type$,\n"
182
" $type$> $name$ = com.google.protobuf.GeneratedMessageLite\n"
183
" .newSingularGeneratedExtension(\n"
184
" $containing_type$.getDefaultInstance(),\n"
189
" com.google.protobuf.WireFormat.FieldType.$type_constant$);\n");
194
void ExtensionGenerator::GenerateNonNestedInitializationCode(
195
io::Printer* printer) {
196
if (descriptor_->extension_scope() == NULL &&
197
HasDescriptorMethods(descriptor_->file())) {
198
// Only applies to non-nested, non-lite extensions.
200
"$name$.internalInit(descriptor.getExtensions().get($index$));\n",
201
"name", UnderscoresToCamelCase(descriptor_),
202
"index", SimpleItoa(descriptor_->index()));
191
206
void ExtensionGenerator::GenerateRegistrationCode(io::Printer* printer) {
193
208
"registry.add($scope$.$name$);\n",