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

Side by Side Diff: tools/json_schema_compiler/cc_generator.py

Issue 10367002: Make all extension api types fully qualified. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix webrequest tests Created 8 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from code import Code 5 from code import Code
6 from model import PropertyType 6 from model import PropertyType
7 import any_helper 7 import any_helper
8 import cpp_util 8 import cpp_util
9 import model 9 import model
10 import schema_util
10 import sys 11 import sys
11 import util_cc_helper 12 import util_cc_helper
12 13
13 class CCGenerator(object): 14 class CCGenerator(object):
14 """A .cc generator for a namespace. 15 """A .cc generator for a namespace.
15 """ 16 """
16 def __init__(self, namespace, cpp_type_generator): 17 def __init__(self, namespace, cpp_type_generator):
17 self._cpp_type_generator = cpp_type_generator 18 self._cpp_type_generator = cpp_type_generator
18 self._namespace = namespace 19 self._namespace = namespace
19 self._target_namespace = ( 20 self._target_namespace = (
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 nodoc=True) 65 nodoc=True)
65 if property_code: 66 if property_code:
66 c.Concat(property_code).Append() 67 c.Concat(property_code).Append()
67 if self._namespace.types: 68 if self._namespace.types:
68 (c.Append('//') 69 (c.Append('//')
69 .Append('// Types') 70 .Append('// Types')
70 .Append('//') 71 .Append('//')
71 .Append() 72 .Append()
72 ) 73 )
73 for type_ in self._namespace.types.values(): 74 for type_ in self._namespace.types.values():
74 (c.Concat(self._GenerateType(type_.name, type_)) 75 (c.Concat(self._GenerateType(
75 .Append() 76 schema_util.StripSchemaNamespace(type_.name), type_)).Append()
76 ) 77 )
77 if self._namespace.functions: 78 if self._namespace.functions:
78 (c.Append('//') 79 (c.Append('//')
79 .Append('// Functions') 80 .Append('// Functions')
80 .Append('//') 81 .Append('//')
81 .Append() 82 .Append()
82 ) 83 )
83 for function in self._namespace.functions.values(): 84 for function in self._namespace.functions.values():
84 (c.Concat(self._GenerateFunction( 85 (c.Concat(self._GenerateFunction(
85 cpp_util.Classname(function.name), function)) 86 cpp_util.Classname(function.name), function))
86 .Append() 87 .Append()
87 ) 88 )
88 (c.Concat(self._cpp_type_generator.GetNamespaceEnd()) 89 (c.Concat(self._cpp_type_generator.GetNamespaceEnd())
89 .Concat(self._cpp_type_generator.GetRootNamespaceEnd()) 90 .Concat(self._cpp_type_generator.GetRootNamespaceEnd())
90 .Append() 91 .Append()
91 ) 92 )
92 # TODO(calamity): Events 93 # TODO(calamity): Events
93 return c 94 return c
94 95
95 def _GenerateType(self, cpp_namespace, type_): 96 def _GenerateType(self, cpp_namespace, type_):
96 """Generates the function definitions for a type. 97 """Generates the function definitions for a type.
97 """ 98 """
98 classname = cpp_util.Classname(type_.name) 99 classname = cpp_util.Classname(schema_util.StripSchemaNamespace(type_.name))
99 c = Code() 100 c = Code()
100 101
101 if type_.functions: 102 if type_.functions:
102 # Types with functions are not instantiable in C++ because they are 103 # Types with functions are not instantiable in C++ because they are
103 # handled in pure Javascript and hence have no properties or 104 # handled in pure Javascript and hence have no properties or
104 # additionalProperties. 105 # additionalProperties.
105 if type_.properties: 106 if type_.properties:
106 raise NotImplementedError('\n'.join(model.GetModelHierarchy(type_)) + 107 raise NotImplementedError('\n'.join(model.GetModelHierarchy(type_)) +
107 '\nCannot generate both functions and properties on a type') 108 '\nCannot generate both functions and properties on a type')
108 for function in type_.functions.values(): 109 for function in type_.functions.values():
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 else: 168 else:
168 s = '' 169 s = ''
169 s = s + ' {}' 170 s = s + ' {}'
170 return Code().Append(s) 171 return Code().Append(s)
171 172
172 def _GenerateTypePopulate(self, cpp_namespace, type_): 173 def _GenerateTypePopulate(self, cpp_namespace, type_):
173 """Generates the function for populating a type given a pointer to it. 174 """Generates the function for populating a type given a pointer to it.
174 175
175 E.g for type "Foo", generates Foo::Populate() 176 E.g for type "Foo", generates Foo::Populate()
176 """ 177 """
177 classname = cpp_util.Classname(type_.name) 178 classname = cpp_util.Classname(schema_util.StripSchemaNamespace(type_.name))
178 c = Code() 179 c = Code()
179 (c.Append('// static') 180 (c.Append('// static')
180 .Sblock('bool %(namespace)s::Populate' 181 .Sblock('bool %(namespace)s::Populate'
181 '(const Value& value, %(name)s* out) {') 182 '(const Value& value, %(name)s* out) {')
182 .Append('if (!value.IsType(Value::TYPE_DICTIONARY))') 183 .Append('if (!value.IsType(Value::TYPE_DICTIONARY))')
183 .Append(' return false;') 184 .Append(' return false;')
184 ) 185 )
185 if type_.properties: 186 if type_.properties:
186 (c.Append('const DictionaryValue* dict = ' 187 (c.Append('const DictionaryValue* dict = '
187 'static_cast<const DictionaryValue*>(&value);') 188 'static_cast<const DictionaryValue*>(&value);')
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 """ 660 """
660 return (self._cpp_type_generator.GetReferencedProperty(prop).type_ == 661 return (self._cpp_type_generator.GetReferencedProperty(prop).type_ ==
661 PropertyType.ARRAY) 662 PropertyType.ARRAY)
662 663
663 def _IsFundamentalOrFundamentalRef(self, prop): 664 def _IsFundamentalOrFundamentalRef(self, prop):
664 """Determines if this property is a Fundamental type or is a ref to a 665 """Determines if this property is a Fundamental type or is a ref to a
665 Fundamental type. 666 Fundamental type.
666 """ 667 """
667 return (self._cpp_type_generator.GetReferencedProperty(prop).type_. 668 return (self._cpp_type_generator.GetReferencedProperty(prop).type_.
668 is_fundamental) 669 is_fundamental)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698