24 #include "dynamic_protobuf_manager.h"
26 #include "exception.h"
28 boost::shared_ptr<dccl::DynamicProtobufManager> dccl::DynamicProtobufManager::inst_;
32 simple_database().Add(proto);
34 const google::protobuf::FileDescriptor* return_desc = user_descriptor_pool().FindFileByName(proto.name());
38 void dccl::DynamicProtobufManager::enable_disk_source_database()
43 disk_source_tree_.reset(
new google::protobuf::compiler::DiskSourceTree);
44 source_database_.reset(
new google::protobuf::compiler::SourceTreeDescriptorDatabase(disk_source_tree_.get()));
45 error_collector_.reset(
new DLogMultiFileErrorCollector);
47 source_database_->RecordErrorsTo(error_collector_.get());
48 disk_source_tree_->MapPath(
"/",
"/");
49 disk_source_tree_->MapPath(
"",
"");
50 add_database(source_database_);
59 const google::protobuf::FileDescriptor*
62 if(!get_instance()->source_database_)
63 throw(
dccl::Exception(
"Must called enable_compilation() before loading proto files directly"));
65 return user_descriptor_pool().FindFileByName(protofile_absolute_path);
70 void dccl::DynamicProtobufManager::DLogMultiFileErrorCollector::AddError(
const std::string & filename,
int line,
int column,
71 const std::string & message)
74 ss <<
"File: " << filename
75 <<
" has error (line: " << line <<
", column: "
76 << column <<
"):" << message;