This source file includes following definitions.
- GenerateParsingCodeFromPacked
- extension_generators_
- MakeGenerator
- get
- get_extension
#include <google/protobuf/compiler/java/java_field.h>
#include <google/protobuf/compiler/java/java_helpers.h>
#include <google/protobuf/compiler/java/java_primitive_field.h>
#include <google/protobuf/compiler/java/java_enum_field.h>
#include <google/protobuf/compiler/java/java_message_field.h>
#include <google/protobuf/compiler/java/java_string_field.h>
#include <google/protobuf/stubs/common.h>
namespace google {
namespace protobuf {
namespace compiler {
namespace java {
FieldGenerator::~FieldGenerator() {}
void FieldGenerator::GenerateParsingCodeFromPacked(io::Printer* printer) const {
GOOGLE_LOG(FATAL) << "GenerateParsingCodeFromPacked() "
<< "called on field generator that does not support packing.";
}
FieldGeneratorMap::FieldGeneratorMap(const Descriptor* descriptor)
: descriptor_(descriptor),
field_generators_(
new scoped_ptr<FieldGenerator>[descriptor->field_count()]),
extension_generators_(
new scoped_ptr<FieldGenerator>[descriptor->extension_count()]) {
int messageBitIndex = 0;
int builderBitIndex = 0;
for (int i = 0; i < descriptor->field_count(); i++) {
FieldGenerator* generator = MakeGenerator(descriptor->field(i),
messageBitIndex, builderBitIndex);
field_generators_[i].reset(generator);
messageBitIndex += generator->GetNumBitsForMessage();
builderBitIndex += generator->GetNumBitsForBuilder();
}
for (int i = 0; i < descriptor->extension_count(); i++) {
FieldGenerator* generator = MakeGenerator(descriptor->extension(i),
messageBitIndex, builderBitIndex);
extension_generators_[i].reset(generator);
messageBitIndex += generator->GetNumBitsForMessage();
builderBitIndex += generator->GetNumBitsForBuilder();
}
}
FieldGenerator* FieldGeneratorMap::MakeGenerator(
const FieldDescriptor* field, int messageBitIndex, int builderBitIndex) {
if (field->is_repeated()) {
switch (GetJavaType(field)) {
case JAVATYPE_MESSAGE:
return new RepeatedMessageFieldGenerator(
field, messageBitIndex, builderBitIndex);
case JAVATYPE_ENUM:
return new RepeatedEnumFieldGenerator(
field, messageBitIndex, builderBitIndex);
case JAVATYPE_STRING:
return new RepeatedStringFieldGenerator(
field, messageBitIndex, builderBitIndex);
default:
return new RepeatedPrimitiveFieldGenerator(
field, messageBitIndex, builderBitIndex);
}
} else {
switch (GetJavaType(field)) {
case JAVATYPE_MESSAGE:
return new MessageFieldGenerator(
field, messageBitIndex, builderBitIndex);
case JAVATYPE_ENUM:
return new EnumFieldGenerator(
field, messageBitIndex, builderBitIndex);
case JAVATYPE_STRING:
return new StringFieldGenerator(
field, messageBitIndex, builderBitIndex);
default:
return new PrimitiveFieldGenerator(
field, messageBitIndex, builderBitIndex);
}
}
}
FieldGeneratorMap::~FieldGeneratorMap() {}
const FieldGenerator& FieldGeneratorMap::get(
const FieldDescriptor* field) const {
GOOGLE_CHECK_EQ(field->containing_type(), descriptor_);
return *field_generators_[field->index()];
}
const FieldGenerator& FieldGeneratorMap::get_extension(int index) const {
return *extension_generators_[index];
}
}
}
}
}