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

Unified Diff: tools/json_schema_compiler/cpp_type_generator.py

Issue 10825029: Added JSON schema compiler support for serialized types (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 5 months 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 side-by-side diff with in-line comments
Download patch
Index: tools/json_schema_compiler/cpp_type_generator.py
diff --git a/tools/json_schema_compiler/cpp_type_generator.py b/tools/json_schema_compiler/cpp_type_generator.py
index 0ccda1afe497bbd41ab088f94d1f599c86d31280..74d5ed552904c75e79530b669729d63ab78168b1 100644
--- a/tools/json_schema_compiler/cpp_type_generator.py
+++ b/tools/json_schema_compiler/cpp_type_generator.py
@@ -115,7 +115,8 @@ class CppTypeGenerator(object):
"""
return cpp_util.Classname(prop.name) + 'Type'
- def GetType(self, prop, pad_for_generics=False, wrap_optional=False):
+ def GetType(self, prop, pad_for_generics=False, wrap_optional=False,
+ convert_type=False):
not at google - send to devlin 2012/07/27 04:14:28 Could you put this in 2 separate methods, GetType
mitchellwrosen 2012/07/30 20:52:45 Done.
"""Translates a model.Property into its C++ type.
If REF types from different namespaces are referenced, will resolve
@@ -125,9 +126,13 @@ class CppTypeGenerator(object):
Use wrap_optional to wrap the type in a scoped_ptr<T> if the Property is
optional.
+
+ Use convert_type when converting from a prop.type_ to prop.compiled_type.
"""
cpp_type = None
- if prop.type_ == PropertyType.REF:
+ type_ = prop.type_ if not convert_type else prop.compiled_type
+
+ if type_ == PropertyType.REF:
dependency_namespace = self._ResolveTypeNamespace(prop.ref_type)
if not dependency_namespace:
raise KeyError('Cannot find referenced type: %s' % prop.ref_type)
@@ -136,28 +141,30 @@ class CppTypeGenerator(object):
schema_util.StripSchemaNamespace(prop.ref_type))
else:
cpp_type = schema_util.StripSchemaNamespace(prop.ref_type)
- elif prop.type_ == PropertyType.BOOLEAN:
+ elif type_ == PropertyType.BOOLEAN:
cpp_type = 'bool'
- elif prop.type_ == PropertyType.INTEGER:
+ elif type_ == PropertyType.INTEGER:
cpp_type = 'int'
- elif prop.type_ == PropertyType.DOUBLE:
+ elif type_ == PropertyType.INT64:
+ cpp_type = 'int64'
+ elif type_ == PropertyType.DOUBLE:
cpp_type = 'double'
- elif prop.type_ == PropertyType.STRING:
+ elif type_ == PropertyType.STRING:
cpp_type = 'std::string'
- elif prop.type_ == PropertyType.ENUM:
+ elif type_ == PropertyType.ENUM:
cpp_type = cpp_util.Classname(prop.name)
- elif prop.type_ == PropertyType.ADDITIONAL_PROPERTIES:
+ elif type_ == PropertyType.ADDITIONAL_PROPERTIES:
cpp_type = 'base::DictionaryValue'
- elif prop.type_ == PropertyType.ANY:
+ elif type_ == PropertyType.ANY:
cpp_type = any_helper.ANY_CLASS
- elif prop.type_ == PropertyType.OBJECT:
+ elif type_ == PropertyType.OBJECT:
cpp_type = cpp_util.Classname(prop.name)
- elif prop.type_ == PropertyType.FUNCTION:
+ elif type_ == PropertyType.FUNCTION:
# Functions come into the json schema compiler as empty objects. We can
# record these as empty DictionaryValue's so that we know if the function
# was passed in or not.
cpp_type = 'base::DictionaryValue'
- elif prop.type_ == PropertyType.ARRAY:
+ elif type_ == PropertyType.ARRAY:
item_type = prop.item_type
if item_type.type_ == PropertyType.REF:
item_type = self.GetReferencedProperty(item_type)
@@ -168,14 +175,14 @@ class CppTypeGenerator(object):
cpp_type = 'std::vector<%s> '
cpp_type = cpp_type % self.GetType(
prop.item_type, pad_for_generics=True)
- elif prop.type_ == PropertyType.BINARY:
+ elif type_ == PropertyType.BINARY:
cpp_type = 'std::string'
else:
- raise NotImplementedError(prop.type_)
+ raise NotImplementedError(type_)
# Enums aren't wrapped because C++ won't allow it. Optional enums have a
# NONE value generated instead.
- if wrap_optional and prop.optional and prop.type_ != PropertyType.ENUM:
+ if wrap_optional and prop.optional and type_ != PropertyType.ENUM:
cpp_type = 'scoped_ptr<%s> ' % cpp_type
if pad_for_generics:
return cpp_type
@@ -222,6 +229,7 @@ class CppTypeGenerator(object):
self._cpp_namespaces[dependency])
for dependency in self._NamespaceTypeDependencies().keys()]):
c.Append('#include "%s"' % header)
+ c.Append('#include "base/string_number_conversions.h"')
return c
def _ResolveTypeNamespace(self, ref_type):

Powered by Google App Engine
This is Rietveld 408576698