Commit 61dac6d5 authored by Yilun Chong's avatar Yilun Chong

Fix

parent 193af9f4
...@@ -23,6 +23,7 @@ class DataStripper { ...@@ -23,6 +23,7 @@ class DataStripper {
const FieldDescriptor* field = set_fields[i]; const FieldDescriptor* field = set_fields[i];
if (ShouldBeClear(field)) { if (ShouldBeClear(field)) {
reflection->ClearField(message, field); reflection->ClearField(message, field);
continue;
} }
if (field->type() == FieldDescriptor::TYPE_MESSAGE) { if (field->type() == FieldDescriptor::TYPE_MESSAGE) {
if (field->is_repeated()) { if (field->is_repeated()) {
......
...@@ -23,42 +23,25 @@ namespace compiler { ...@@ -23,42 +23,25 @@ namespace compiler {
namespace { namespace {
string StripProto(string filename) { string StripProto(string filename) {
if (filename.substr(filename.size() - 11) == ".protodevel") { return filename.substr(0, filename.rfind(".proto"));
// .protodevel
return filename.substr(0, filename.size() - 11);
} else {
// .proto
return filename.substr(0, filename.size() - 6);
}
} }
DescriptorPool new_pool_; DescriptorPool* GetPool() {
static DescriptorPool *pool = new DescriptorPool();
return pool;
}
} // namespace } // namespace
class Proto2ToProto3Generator : public CodeGenerator { class Proto2ToProto3Generator final : public CodeGenerator {
public: public:
virtual bool GenerateAll(const std::vector<const FileDescriptor*>& files, bool GenerateAll(const std::vector<const FileDescriptor*>& files,
const string& parameter, const string& parameter,
GeneratorContext* context, GeneratorContext* context,
string* error) const { string* error) const {
for (int i = 0; i < files.size(); i++) { for (int i = 0; i < files.size(); i++) {
for (auto file : files) { for (auto file : files) {
bool can_generate = if (CanGenerate(file)) {
(new_pool_.FindFileByName(file->name()) == nullptr);
for (int j = 0; j < file->dependency_count(); j++) {
can_generate &= (new_pool_.FindFileByName(
file->dependency(j)->name()) != nullptr);
}
for (int j = 0; j < file->public_dependency_count(); j++) {
can_generate &= (new_pool_.FindFileByName(
file->public_dependency(j)->name()) != nullptr);
}
for (int j = 0; j < file->weak_dependency_count(); j++) {
can_generate &= (new_pool_.FindFileByName(
file->weak_dependency(j)->name()) != nullptr);
}
if (can_generate) {
Generate(file, parameter, context, error); Generate(file, parameter, context, error);
break; break;
} }
...@@ -68,7 +51,7 @@ class Proto2ToProto3Generator : public CodeGenerator { ...@@ -68,7 +51,7 @@ class Proto2ToProto3Generator : public CodeGenerator {
return true; return true;
} }
virtual bool Generate(const FileDescriptor* file, bool Generate(const FileDescriptor* file,
const string& parameter, const string& parameter,
GeneratorContext* context, GeneratorContext* context,
string* error) const { string* error) const {
...@@ -90,10 +73,34 @@ class Proto2ToProto3Generator : public CodeGenerator { ...@@ -90,10 +73,34 @@ class Proto2ToProto3Generator : public CodeGenerator {
std::unique_ptr<google::protobuf::io::ZeroCopyOutputStream> output( std::unique_ptr<google::protobuf::io::ZeroCopyOutputStream> output(
context->Open(basename + ".proto")); context->Open(basename + ".proto"));
string content = new_pool_.BuildFile(new_file)->DebugString(); string content = GetPool()->BuildFile(new_file)->DebugString();
Printer printer(output.get(), '$'); Printer printer(output.get(), '$');
printer.WriteRaw(content.c_str(), content.size()); printer.WriteRaw(content.c_str(), content.size());
return true;
}
private:
bool CanGenerate(const FileDescriptor* file) const {
if (GetPool()->FindFileByName(file->name()) != nullptr) {
return false;
}
for (int j = 0; j < file->dependency_count(); j++) {
if (GetPool()->FindFileByName(file->dependency(j)->name()) == nullptr) {
return false;
}
}
for (int j = 0; j < file->public_dependency_count(); j++) {
if (GetPool()->FindFileByName(
file->public_dependency(j)->name()) == nullptr) {
return false;
}
}
for (int j = 0; j < file->weak_dependency_count(); j++) {
if (GetPool()->FindFileByName(
file->weak_dependency(j)->name()) == nullptr) {
return false;
}
}
return true; return true;
} }
}; };
......
...@@ -164,8 +164,7 @@ class FieldScrubber { ...@@ -164,8 +164,7 @@ class FieldScrubber {
} }
private: private:
static bool ShouldClearLabel(const FieldDescriptorProto *field) { static bool ShouldClearLabel(const FieldDescriptorProto *field) {
return field->label() == FieldDescriptorProto::LABEL_OPTIONAL || return field->label() == FieldDescriptorProto::LABEL_REQUIRED;
field->label() == FieldDescriptorProto::LABEL_REQUIRED;
} }
static void ScrubMessage(DescriptorProto *message_type) { static void ScrubMessage(DescriptorProto *message_type) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment