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

Side by Side Diff: tools/json_schema_compiler/h_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 unified diff | Download patch
« no previous file with comments | « tools/json_schema_compiler/dart_generator.py ('k') | tools/json_schema_compiler/idl_schema.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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, Type 6 from model import PropertyType, Type
7 import cpp_util 7 import cpp_util
8 import schema_util 8 import schema_util
9 9
10 class HGenerator(object): 10 class HGenerator(object):
11 def __init__(self, type_generator, cpp_namespace):
12 self._type_generator = type_generator
13 self._cpp_namespace = cpp_namespace
14
15 def Generate(self, namespace):
16 return _Generator(namespace,
17 self._type_generator,
18 self._cpp_namespace).Generate()
19
20 class _Generator(object):
11 """A .h generator for a namespace. 21 """A .h generator for a namespace.
12 """ 22 """
13 def __init__(self, namespace, cpp_type_generator): 23 def __init__(self, namespace, cpp_type_generator, cpp_namespace):
24 self._namespace = namespace
14 self._type_helper = cpp_type_generator 25 self._type_helper = cpp_type_generator
15 self._namespace = namespace 26 self._cpp_namespace = cpp_namespace
16 self._target_namespace = ( 27 self._target_namespace = (
17 self._type_helper.GetCppNamespaceName(self._namespace)) 28 self._type_helper.GetCppNamespaceName(self._namespace))
18 29
19 def Generate(self): 30 def Generate(self):
20 """Generates a Code object with the .h for a single namespace. 31 """Generates a Code object with the .h for a single namespace.
21 """ 32 """
22 c = Code() 33 c = Code()
23 (c.Append(cpp_util.CHROMIUM_LICENSE) 34 (c.Append(cpp_util.CHROMIUM_LICENSE)
24 .Append() 35 .Append()
25 .Append(cpp_util.GENERATED_FILE_MESSAGE % self._namespace.source_file) 36 .Append(cpp_util.GENERATED_FILE_MESSAGE % self._namespace.source_file)
(...skipping 11 matching lines...) Expand all
37 .Append() 48 .Append()
38 .Append('#include "base/basictypes.h"') 49 .Append('#include "base/basictypes.h"')
39 .Append('#include "base/logging.h"') 50 .Append('#include "base/logging.h"')
40 .Append('#include "base/memory/linked_ptr.h"') 51 .Append('#include "base/memory/linked_ptr.h"')
41 .Append('#include "base/memory/scoped_ptr.h"') 52 .Append('#include "base/memory/scoped_ptr.h"')
42 .Append('#include "base/values.h"') 53 .Append('#include "base/values.h"')
43 .Cblock(self._type_helper.GenerateIncludes()) 54 .Cblock(self._type_helper.GenerateIncludes())
44 .Append() 55 .Append()
45 ) 56 )
46 57
47 c.Concat(self._type_helper.GetRootNamespaceStart()) 58 c.Concat(cpp_util.OpenNamespace(self._cpp_namespace))
48 # TODO(calamity): These forward declarations should be #includes to allow 59 # TODO(calamity): These forward declarations should be #includes to allow
49 # $ref types from other files to be used as required params. This requires 60 # $ref types from other files to be used as required params. This requires
50 # some detangling of windows and tabs which will currently lead to circular 61 # some detangling of windows and tabs which will currently lead to circular
51 # #includes. 62 # #includes.
52 forward_declarations = ( 63 forward_declarations = (
53 self._type_helper.GenerateForwardDeclarations()) 64 self._type_helper.GenerateForwardDeclarations())
54 if not forward_declarations.IsEmpty(): 65 if not forward_declarations.IsEmpty():
55 (c.Append() 66 (c.Append()
56 .Cblock(forward_declarations) 67 .Cblock(forward_declarations)
57 ) 68 )
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 c.Cblock(self._GenerateFunction(function)) 100 c.Cblock(self._GenerateFunction(function))
90 if self._namespace.events: 101 if self._namespace.events:
91 (c.Append('//') 102 (c.Append('//')
92 .Append('// Events') 103 .Append('// Events')
93 .Append('//') 104 .Append('//')
94 .Append() 105 .Append()
95 ) 106 )
96 for event in self._namespace.events.values(): 107 for event in self._namespace.events.values():
97 c.Cblock(self._GenerateEvent(event)) 108 c.Cblock(self._GenerateEvent(event))
98 (c.Concat(self._type_helper.GetNamespaceEnd()) 109 (c.Concat(self._type_helper.GetNamespaceEnd())
99 .Cblock(self._type_helper.GetRootNamespaceEnd()) 110 .Concat(cpp_util.CloseNamespace(self._cpp_namespace))
100 .Append('#endif // %s' % ifndef_name) 111 .Append('#endif // %s' % ifndef_name)
101 .Append() 112 .Append()
102 ) 113 )
103 return c 114 return c
104 115
105 def _FieldDependencyOrder(self): 116 def _FieldDependencyOrder(self):
106 """Generates the list of types in the current namespace in an order in which 117 """Generates the list of types in the current namespace in an order in which
107 depended-upon types appear before types which depend on them. 118 depended-upon types appear before types which depend on them.
108 """ 119 """
109 dependency_order = [] 120 dependency_order = []
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 if type_.additional_properties.property_type == PropertyType.ANY: 246 if type_.additional_properties.property_type == PropertyType.ANY:
236 c.Append('base::DictionaryValue additional_properties;') 247 c.Append('base::DictionaryValue additional_properties;')
237 else: 248 else:
238 (c.Cblock(self._GenerateType(type_.additional_properties)) 249 (c.Cblock(self._GenerateType(type_.additional_properties))
239 .Append('std::map<std::string, %s> additional_properties;' % 250 .Append('std::map<std::string, %s> additional_properties;' %
240 cpp_util.PadForGenerics( 251 cpp_util.PadForGenerics(
241 self._type_helper.GetCppType(type_.additional_properties, 252 self._type_helper.GetCppType(type_.additional_properties,
242 is_in_container=True))) 253 is_in_container=True)))
243 ) 254 )
244 (c.Eblock() 255 (c.Eblock()
256 .Append()
245 .Sblock(' private:') 257 .Sblock(' private:')
246 .Append('DISALLOW_COPY_AND_ASSIGN(%(classname)s);') 258 .Append('DISALLOW_COPY_AND_ASSIGN(%(classname)s);')
247 .Eblock('};') 259 .Eblock('};')
248 ) 260 )
249 elif type_.property_type == PropertyType.CHOICES: 261 elif type_.property_type == PropertyType.CHOICES:
250 if type_.description: 262 if type_.description:
251 c.Comment(type_.description) 263 c.Comment(type_.description)
252 # Choices are modelled with optional fields for each choice. Exactly one 264 # Choices are modelled with optional fields for each choice. Exactly one
253 # field of the choice is guaranteed to be set by the compiler. 265 # field of the choice is guaranteed to be set by the compiler.
254 (c.Sblock('struct %(classname)s {') 266 (c.Sblock('struct %(classname)s {')
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 return Code() 325 return Code()
314 326
315 c = Code() 327 c = Code()
316 (c.Sblock('struct Params {') 328 (c.Sblock('struct Params {')
317 .Append('static scoped_ptr<Params> Create(const base::ListValue& args);') 329 .Append('static scoped_ptr<Params> Create(const base::ListValue& args);')
318 .Append('~Params();') 330 .Append('~Params();')
319 .Append() 331 .Append()
320 .Cblock(self._GenerateTypes(p.type_ for p in function.params)) 332 .Cblock(self._GenerateTypes(p.type_ for p in function.params))
321 .Cblock(self._GenerateFields(function.params)) 333 .Cblock(self._GenerateFields(function.params))
322 .Eblock() 334 .Eblock()
335 .Append()
323 .Sblock(' private:') 336 .Sblock(' private:')
324 .Append('Params();') 337 .Append('Params();')
325 .Append() 338 .Append()
326 .Append('DISALLOW_COPY_AND_ASSIGN(Params);') 339 .Append('DISALLOW_COPY_AND_ASSIGN(Params);')
327 .Eblock('};') 340 .Eblock('};')
328 ) 341 )
329 return c 342 return c
330 343
331 def _GenerateTypes(self, types, is_toplevel=False, generate_typedefs=False): 344 def _GenerateTypes(self, types, is_toplevel=False, generate_typedefs=False):
332 """Generate the structures required by a property such as OBJECT classes 345 """Generate the structures required by a property such as OBJECT classes
(...skipping 26 matching lines...) Expand all
359 def _GenerateFunctionResults(self, callback): 372 def _GenerateFunctionResults(self, callback):
360 """Generates namespace for passing a function's result back. 373 """Generates namespace for passing a function's result back.
361 """ 374 """
362 c = Code() 375 c = Code()
363 (c.Append('namespace Results {') 376 (c.Append('namespace Results {')
364 .Append() 377 .Append()
365 .Concat(self._GenerateCreateCallbackArguments(callback)) 378 .Concat(self._GenerateCreateCallbackArguments(callback))
366 .Append('} // namespace Results') 379 .Append('} // namespace Results')
367 ) 380 )
368 return c 381 return c
OLDNEW
« no previous file with comments | « tools/json_schema_compiler/dart_generator.py ('k') | tools/json_schema_compiler/idl_schema.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698