Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: third_party/protobuf/src/google/protobuf/util/type_resolver_util.cc

Issue 2590803003: Revert "third_party/protobuf: Update to HEAD (83d681ee2c)" (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 using google::protobuf::Enum; 47 using google::protobuf::Enum;
48 using google::protobuf::EnumValue; 48 using google::protobuf::EnumValue;
49 using google::protobuf::Field; 49 using google::protobuf::Field;
50 using google::protobuf::Option; 50 using google::protobuf::Option;
51 using google::protobuf::Type; 51 using google::protobuf::Type;
52 52
53 using util::Status; 53 using util::Status;
54 using util::error::INVALID_ARGUMENT; 54 using util::error::INVALID_ARGUMENT;
55 using util::error::NOT_FOUND; 55 using util::error::NOT_FOUND;
56 56
57 bool SplitTypeUrl(const string& type_url, string* url_prefix,
58 string* message_name) {
59 size_t pos = type_url.find_last_of("/");
60 if (pos == string::npos) {
61 return false;
62 }
63 *url_prefix = type_url.substr(0, pos);
64 *message_name = type_url.substr(pos + 1);
65 return true;
66 }
67
57 class DescriptorPoolTypeResolver : public TypeResolver { 68 class DescriptorPoolTypeResolver : public TypeResolver {
58 public: 69 public:
59 DescriptorPoolTypeResolver(const string& url_prefix, 70 DescriptorPoolTypeResolver(const string& url_prefix,
60 const DescriptorPool* pool) 71 const DescriptorPool* pool)
61 : url_prefix_(url_prefix), pool_(pool) {} 72 : url_prefix_(url_prefix), pool_(pool) {}
62 73
63 Status ResolveMessageType(const string& type_url, Type* type) { 74 Status ResolveMessageType(const string& type_url, Type* type) {
64 string type_name; 75 string url_prefix, message_name;
65 Status status = ParseTypeUrl(type_url, &type_name); 76 if (!SplitTypeUrl(type_url, &url_prefix, &message_name) ||
66 if (!status.ok()) { 77 url_prefix != url_prefix_) {
67 return status; 78 return Status(INVALID_ARGUMENT,
79 StrCat("Invalid type URL, type URLs must be of the form '",
80 url_prefix_, "/<typename>', got: ", type_url));
68 } 81 }
69 82 if (url_prefix != url_prefix_) {
70 const Descriptor* descriptor = pool_->FindMessageTypeByName(type_name); 83 return Status(INVALID_ARGUMENT,
84 "Cannot resolve types from URL: " + url_prefix);
85 }
86 const Descriptor* descriptor = pool_->FindMessageTypeByName(message_name);
71 if (descriptor == NULL) { 87 if (descriptor == NULL) {
72 return Status(NOT_FOUND, "Invalid type URL, unknown type: " + type_name); 88 return Status(NOT_FOUND,
89 "Invalid type URL, unknown type: " + message_name);
73 } 90 }
74 ConvertDescriptor(descriptor, type); 91 ConvertDescriptor(descriptor, type);
75 return Status(); 92 return Status();
76 } 93 }
77 94
78 Status ResolveEnumType(const string& type_url, Enum* enum_type) { 95 Status ResolveEnumType(const string& type_url, Enum* enum_type) {
79 string type_name; 96 string url_prefix, type_name;
80 Status status = ParseTypeUrl(type_url, &type_name); 97 if (!SplitTypeUrl(type_url, &url_prefix, &type_name) ||
81 if (!status.ok()) { 98 url_prefix != url_prefix_) {
82 return status; 99 return Status(INVALID_ARGUMENT,
100 StrCat("Invalid type URL, type URLs must be of the form '",
101 url_prefix_, "/<typename>', got: ", type_url));
83 } 102 }
84 103 if (url_prefix != url_prefix_) {
104 return Status(INVALID_ARGUMENT,
105 "Cannot resolve types from URL: " + url_prefix);
106 }
85 const EnumDescriptor* descriptor = pool_->FindEnumTypeByName(type_name); 107 const EnumDescriptor* descriptor = pool_->FindEnumTypeByName(type_name);
86 if (descriptor == NULL) { 108 if (descriptor == NULL) {
87 return Status(NOT_FOUND, "Invalid type URL, unknown type: " + type_name); 109 return Status(NOT_FOUND, "Invalid type URL, unknown type: " + type_name);
88 } 110 }
89 ConvertEnumDescriptor(descriptor, enum_type); 111 ConvertEnumDescriptor(descriptor, enum_type);
90 return Status(); 112 return Status();
91 } 113 }
92 114
93 private: 115 private:
94 void ConvertDescriptor(const Descriptor* descriptor, Type* type) { 116 void ConvertDescriptor(const Descriptor* descriptor, Type* type) {
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 } 196 }
175 197
176 string GetTypeUrl(const Descriptor* descriptor) { 198 string GetTypeUrl(const Descriptor* descriptor) {
177 return url_prefix_ + "/" + descriptor->full_name(); 199 return url_prefix_ + "/" + descriptor->full_name();
178 } 200 }
179 201
180 string GetTypeUrl(const EnumDescriptor* descriptor) { 202 string GetTypeUrl(const EnumDescriptor* descriptor) {
181 return url_prefix_ + "/" + descriptor->full_name(); 203 return url_prefix_ + "/" + descriptor->full_name();
182 } 204 }
183 205
184 Status ParseTypeUrl(const string& type_url, string* type_name) {
185 if (type_url.substr(0, url_prefix_.size() + 1) != url_prefix_ + "/") {
186 return Status(INVALID_ARGUMENT,
187 StrCat("Invalid type URL, type URLs must be of the form '",
188 url_prefix_, "/<typename>', got: ", type_url));
189 }
190 *type_name = type_url.substr(url_prefix_.size() + 1);
191 return Status();
192 }
193
194 string DefaultValueAsString(const FieldDescriptor* descriptor) { 206 string DefaultValueAsString(const FieldDescriptor* descriptor) {
195 switch (descriptor->cpp_type()) { 207 switch (descriptor->cpp_type()) {
196 case FieldDescriptor::CPPTYPE_INT32: 208 case FieldDescriptor::CPPTYPE_INT32:
197 return SimpleItoa(descriptor->default_value_int32()); 209 return SimpleItoa(descriptor->default_value_int32());
198 break; 210 break;
199 case FieldDescriptor::CPPTYPE_INT64: 211 case FieldDescriptor::CPPTYPE_INT64:
200 return SimpleItoa(descriptor->default_value_int64()); 212 return SimpleItoa(descriptor->default_value_int64());
201 break; 213 break;
202 case FieldDescriptor::CPPTYPE_UINT32: 214 case FieldDescriptor::CPPTYPE_UINT32:
203 return SimpleItoa(descriptor->default_value_uint32()); 215 return SimpleItoa(descriptor->default_value_uint32());
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 } // namespace 250 } // namespace
239 251
240 TypeResolver* NewTypeResolverForDescriptorPool(const string& url_prefix, 252 TypeResolver* NewTypeResolverForDescriptorPool(const string& url_prefix,
241 const DescriptorPool* pool) { 253 const DescriptorPool* pool) {
242 return new DescriptorPoolTypeResolver(url_prefix, pool); 254 return new DescriptorPoolTypeResolver(url_prefix, pool);
243 } 255 }
244 256
245 } // namespace util 257 } // namespace util
246 } // namespace protobuf 258 } // namespace protobuf
247 } // namespace google 259 } // namespace google
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698