Index: third_party/protobuf/python/google/protobuf/descriptor.py |
diff --git a/third_party/protobuf/python/google/protobuf/descriptor.py b/third_party/protobuf/python/google/protobuf/descriptor.py |
index aa4ab96953064751d8c242d9045095963aaa21fa..cf609bee88c0430fbc00dddc3d179e9bd80641be 100755 |
--- a/third_party/protobuf/python/google/protobuf/descriptor.py |
+++ b/third_party/protobuf/python/google/protobuf/descriptor.py |
@@ -28,16 +28,6 @@ |
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
-# TODO(robinson): We probably need to provide deep-copy methods for |
-# descriptor types. When a FieldDescriptor is passed into |
-# Descriptor.__init__(), we should make a deep copy and then set |
-# containing_type on it. Alternatively, we could just get |
-# rid of containing_type (iit's not needed for reflection.py, at least). |
-# |
-# TODO(robinson): Print method? |
-# |
-# TODO(robinson): Useful __repr__? |
- |
"""Descriptors essentially contain exactly the information found in a .proto |
file, in types that make this information accessible in Python. |
""" |
@@ -45,6 +35,13 @@ file, in types that make this information accessible in Python. |
__author__ = 'robinson@google.com (Will Robinson)' |
+from google.protobuf.internal import api_implementation |
+ |
+ |
+if api_implementation.Type() == 'cpp': |
+ from google.protobuf.internal import cpp_message |
+ |
+ |
class Error(Exception): |
"""Base error for this module.""" |
@@ -396,6 +393,13 @@ class FieldDescriptor(DescriptorBase): |
self.enum_type = enum_type |
self.is_extension = is_extension |
self.extension_scope = extension_scope |
+ if api_implementation.Type() == 'cpp': |
+ if is_extension: |
+ self._cdescriptor = cpp_message.GetExtensionDescriptor(full_name) |
+ else: |
+ self._cdescriptor = cpp_message.GetFieldDescriptor(full_name) |
+ else: |
+ self._cdescriptor = None |
class EnumDescriptor(_NestedDescriptorBase): |
@@ -567,9 +571,13 @@ class FileDescriptor(DescriptorBase): |
"""Constructor.""" |
super(FileDescriptor, self).__init__(options, 'FileOptions') |
+ self.message_types_by_name = {} |
self.name = name |
self.package = package |
self.serialized_pb = serialized_pb |
+ if (api_implementation.Type() == 'cpp' and |
+ self.serialized_pb is not None): |
+ cpp_message.BuildFile(self.serialized_pb) |
def CopyToProto(self, proto): |
"""Copies this to a descriptor_pb2.FileDescriptorProto. |