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

Unified Diff: tools/json_schema_compiler/cpp_type_generator.py

Issue 12041098: Initial commit of the Dart Chrome Extension APIs generators (Closed) Base URL: http://git.chromium.org/chromium/src.git@file_path_bugfix
Patch Set: Kalman fixes 2 (nocompile ignored in bundle mode) Created 7 years, 10 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
« no previous file with comments | « tools/json_schema_compiler/cpp_generator.py ('k') | tools/json_schema_compiler/cpp_type_generator_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 f15bae86e468a4444367f18ee18b9ed26cde7643..c9c52fbfe713083570b1f360fbdde244cd77b070 100644
--- a/tools/json_schema_compiler/cpp_type_generator.py
+++ b/tools/json_schema_compiler/cpp_type_generator.py
@@ -25,67 +25,43 @@ class CppTypeGenerator(object):
"""Manages the types of properties and provides utilities for getting the
C++ type out of a model.Property
"""
- def __init__(self, root_namespace, namespace=None, cpp_namespace=None):
+ def __init__(self, model, default_namespace=None):
"""Creates a cpp_type_generator. The given root_namespace should be of the
format extensions::api::sub. The generator will generate code suitable for
- use in the given namespace.
+ use in the given model's namespace.
"""
self._type_namespaces = {}
- self._root_namespace = root_namespace.split('::')
- self._cpp_namespaces = {}
- if namespace and cpp_namespace:
- self._namespace = namespace
- self.AddNamespace(namespace, cpp_namespace)
- else:
- self._namespace = None
-
- def AddNamespace(self, namespace, cpp_namespace):
- """Maps a model.Namespace to its C++ namespace name. All mappings are
- beneath the root namespace.
- """
- self._cpp_namespaces[namespace] = cpp_namespace
- for type_name in namespace.types:
- # Allow $refs to refer to just 'Type' within namespaces. Otherwise they
- # must be qualified with 'namespace.Type'.
- type_aliases = ['%s.%s' % (namespace.name, type_name)]
- if namespace is self._namespace:
- type_aliases.append(type_name)
- for alias in type_aliases:
- self._type_namespaces[alias] = namespace
+ self._default_namespace = default_namespace
+
+ for referenced_namespace in model.namespaces.values():
+ if self._default_namespace is None:
+ self._default_namespace = referenced_namespace
+ for type_name in referenced_namespace.types:
+ # Allow $refs to refer to just 'Type' within referenced_namespaces.
+ # Otherwise they must be qualified with 'namespace.Type'.
+ type_aliases = ['%s.%s' % (referenced_namespace.name, type_name)]
+ if referenced_namespace is self._default_namespace:
+ type_aliases.append(type_name)
+ for alias in type_aliases:
+ self._type_namespaces[alias] = referenced_namespace
def GetCppNamespaceName(self, namespace):
"""Gets the mapped C++ namespace name for the given namespace relative to
the root namespace.
"""
- return self._cpp_namespaces[namespace]
-
- def GetRootNamespaceStart(self):
- """Get opening root namespace declarations.
- """
- c = Code()
- for namespace in self._root_namespace:
- c.Append('namespace %s {' % namespace)
- return c
-
- def GetRootNamespaceEnd(self):
- """Get closing root namespace declarations.
- """
- c = Code()
- for namespace in reversed(self._root_namespace):
- c.Append('} // %s' % namespace)
- return c
+ return namespace.unix_name
def GetNamespaceStart(self):
- """Get opening self._namespace namespace declaration.
+ """Get opening self._default_namespace namespace declaration.
"""
return Code().Append('namespace %s {' %
- self.GetCppNamespaceName(self._namespace))
+ self.GetCppNamespaceName(self._default_namespace))
def GetNamespaceEnd(self):
- """Get closing self._namespace namespace declaration.
+ """Get closing self._default_namespace namespace declaration.
"""
return Code().Append('} // %s' %
- self.GetCppNamespaceName(self._namespace))
+ self.GetCppNamespaceName(self._default_namespace))
def GetEnumNoneValue(self, type_):
"""Gets the enum value in the given model.Property indicating no value has
@@ -118,7 +94,7 @@ class CppTypeGenerator(object):
ref_type = self._FindType(type_.ref_type)
if ref_type is None:
raise KeyError('Cannot find referenced type: %s' % type_.ref_type)
- if self._namespace is ref_type.namespace:
+ if self._default_namespace is ref_type.namespace:
cpp_type = ref_type.name
else:
cpp_type = '%s::%s' % (ref_type.namespace.name, ref_type.name)
@@ -170,10 +146,7 @@ class CppTypeGenerator(object):
PropertyType.CHOICES))
def GenerateForwardDeclarations(self):
- """Returns the forward declarations for self._namespace.
-
- Use after GetRootNamespaceStart. Assumes all namespaces are relative to
- self._root_namespace.
+ """Returns the forward declarations for self._default_namespace.
"""
c = Code()
@@ -191,7 +164,7 @@ class CppTypeGenerator(object):
return c
def GenerateIncludes(self, include_soft=False):
- """Returns the #include lines for self._namespace.
+ """Returns the #include lines for self._default_namespace.
"""
c = Code()
for namespace, dependencies in self._NamespaceTypeDependencies().items():
@@ -203,7 +176,7 @@ class CppTypeGenerator(object):
def _FindType(self, full_name):
"""Finds the model.Type with name |qualified_name|. If it's not from
- |self._namespace| then it needs to be qualified.
+ |self._default_namespace| then it needs to be qualified.
"""
namespace = self._type_namespaces.get(full_name, None)
if namespace is None:
@@ -223,11 +196,11 @@ class CppTypeGenerator(object):
def _NamespaceTypeDependencies(self):
"""Returns a dict ordered by namespace name containing a mapping of
- model.Namespace to every _TypeDependency for |self._namespace|, sorted
- by the type's name.
+ model.Namespace to every _TypeDependency for |self._default_namespace|,
+ sorted by the type's name.
"""
dependencies = set()
- for function in self._namespace.functions.values():
+ for function in self._default_namespace.functions.values():
for param in function.params:
dependencies |= self._TypeDependencies(param.type_,
hard=not param.optional)
@@ -235,11 +208,11 @@ class CppTypeGenerator(object):
for param in function.callback.params:
dependencies |= self._TypeDependencies(param.type_,
hard=not param.optional)
- for type_ in self._namespace.types.values():
+ for type_ in self._default_namespace.types.values():
for prop in type_.properties.values():
dependencies |= self._TypeDependencies(prop.type_,
hard=not prop.optional)
- for event in self._namespace.events.values():
+ for event in self._default_namespace.events.values():
for param in event.params:
dependencies |= self._TypeDependencies(param.type_,
hard=not param.optional)
@@ -248,7 +221,7 @@ class CppTypeGenerator(object):
dependency_namespaces = OrderedDict()
for dependency in sorted(dependencies, key=_TypeDependency.GetSortKey):
namespace = dependency.type_.namespace
- if namespace is self._namespace:
+ if namespace is self._default_namespace:
continue
if namespace not in dependency_namespaces:
dependency_namespaces[namespace] = []
« no previous file with comments | « tools/json_schema_compiler/cpp_generator.py ('k') | tools/json_schema_compiler/cpp_type_generator_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698