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

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

Issue 77063004: JSON schema compiler: remove SOURCE_BASE_PATH hack from bundle generator. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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
« no previous file with comments | « tools/json_schema_compiler/compiler.py ('k') | no next file » | 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 import code 5 import code
6 import cpp_util 6 import cpp_util
7 from model import Platforms 7 from model import Platforms
8 from schema_util import CapitalizeFirstLetter 8 from schema_util import CapitalizeFirstLetter
9 from schema_util import JsFunctionNameToClassName 9 from schema_util import JsFunctionNameToClassName
10 10
11 import json 11 import json
12 import os 12 import os
13 import re 13 import re
14 14
15 # TODO(miket/asargent) - parameterize this.
16 SOURCE_BASE_PATH = 'chrome/common/extensions/api'
17 15
18 def _RemoveDescriptions(node): 16 def _RemoveDescriptions(node):
19 """Returns a copy of |schema| with "description" fields removed. 17 """Returns a copy of |schema| with "description" fields removed.
20 """ 18 """
21 if isinstance(node, dict): 19 if isinstance(node, dict):
22 result = {} 20 result = {}
23 for key, value in node.items(): 21 for key, value in node.items():
24 # Some schemas actually have properties called "description", so only 22 # Some schemas actually have properties called "description", so only
25 # remove descriptions that have string values. 23 # remove descriptions that have string values.
26 if key == 'description' and isinstance(value, basestring): 24 if key == 'description' and isinstance(value, basestring):
27 continue 25 continue
28 result[key] = _RemoveDescriptions(value) 26 result[key] = _RemoveDescriptions(value)
29 return result 27 return result
30 if isinstance(node, list): 28 if isinstance(node, list):
31 return [_RemoveDescriptions(v) for v in node] 29 return [_RemoveDescriptions(v) for v in node]
32 return node 30 return node
33 31
34 32
35 class CppBundleGenerator(object): 33 class CppBundleGenerator(object):
36 """This class contains methods to generate code based on multiple schemas. 34 """This class contains methods to generate code based on multiple schemas.
37 """ 35 """
38 36
39 def __init__(self, root, model, api_defs, cpp_type_generator, cpp_namespace): 37 def __init__(self,
38 root,
39 model,
40 api_defs,
41 cpp_type_generator,
42 cpp_namespace,
43 source_file_dir):
40 self._root = root 44 self._root = root
41 self._model = model 45 self._model = model
42 self._api_defs = api_defs 46 self._api_defs = api_defs
43 self._cpp_type_generator = cpp_type_generator 47 self._cpp_type_generator = cpp_type_generator
44 self._cpp_namespace = cpp_namespace 48 self._cpp_namespace = cpp_namespace
49 self._source_file_dir = source_file_dir
45 50
46 self.api_cc_generator = _APICCGenerator(self) 51 self.api_cc_generator = _APICCGenerator(self)
47 self.api_h_generator = _APIHGenerator(self) 52 self.api_h_generator = _APIHGenerator(self)
48 self.schemas_cc_generator = _SchemasCCGenerator(self) 53 self.schemas_cc_generator = _SchemasCCGenerator(self)
49 self.schemas_h_generator = _SchemasHGenerator(self) 54 self.schemas_h_generator = _SchemasHGenerator(self)
50 55
51 def _GenerateHeader(self, file_base, body_code): 56 def _GenerateHeader(self, file_base, body_code):
52 """Generates a code.Code object for a header file 57 """Generates a code.Code object for a header file
53 58
54 Parameters: 59 Parameters:
55 - |file_base| - the base of the filename, e.g. 'foo' (for 'foo.h') 60 - |file_base| - the base of the filename, e.g. 'foo' (for 'foo.h')
56 - |body_code| - the code to put in between the multiple inclusion guards""" 61 - |body_code| - the code to put in between the multiple inclusion guards"""
57 c = code.Code() 62 c = code.Code()
58 c.Append(cpp_util.CHROMIUM_LICENSE) 63 c.Append(cpp_util.CHROMIUM_LICENSE)
59 c.Append() 64 c.Append()
60 c.Append(cpp_util.GENERATED_BUNDLE_FILE_MESSAGE % SOURCE_BASE_PATH) 65 c.Append(cpp_util.GENERATED_BUNDLE_FILE_MESSAGE % self._source_file_dir)
61 ifndef_name = cpp_util.GenerateIfndefName(SOURCE_BASE_PATH, file_base) 66 ifndef_name = cpp_util.GenerateIfndefName(self._source_file_dir, file_base)
62 c.Append() 67 c.Append()
63 c.Append('#ifndef %s' % ifndef_name) 68 c.Append('#ifndef %s' % ifndef_name)
64 c.Append('#define %s' % ifndef_name) 69 c.Append('#define %s' % ifndef_name)
65 c.Append() 70 c.Append()
66 c.Concat(body_code) 71 c.Concat(body_code)
67 c.Append() 72 c.Append()
68 c.Append('#endif // %s' % ifndef_name) 73 c.Append('#endif // %s' % ifndef_name)
69 c.Append() 74 c.Append()
70 return c 75 return c
71 76
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 class _APICCGenerator(object): 163 class _APICCGenerator(object):
159 """Generates a code.Code object for the generated API .cc file""" 164 """Generates a code.Code object for the generated API .cc file"""
160 165
161 def __init__(self, cpp_bundle): 166 def __init__(self, cpp_bundle):
162 self._bundle = cpp_bundle 167 self._bundle = cpp_bundle
163 168
164 def Generate(self, namespace): 169 def Generate(self, namespace):
165 c = code.Code() 170 c = code.Code()
166 c.Append(cpp_util.CHROMIUM_LICENSE) 171 c.Append(cpp_util.CHROMIUM_LICENSE)
167 c.Append() 172 c.Append()
168 c.Append('#include "%s"' % (os.path.join(SOURCE_BASE_PATH, 173 c.Append('#include "%s"' % (os.path.join(self._bundle._source_file_dir,
169 'generated_api.h'))) 174 'generated_api.h')))
170 c.Append() 175 c.Append()
171 for namespace in self._bundle._model.namespaces.values(): 176 for namespace in self._bundle._model.namespaces.values():
172 namespace_name = namespace.unix_name.replace("experimental_", "") 177 namespace_name = namespace.unix_name.replace("experimental_", "")
173 implementation_header = namespace.compiler_options.get( 178 implementation_header = namespace.compiler_options.get(
174 "implemented_in", 179 "implemented_in",
175 "chrome/browser/extensions/api/%s/%s_api.h" % (namespace_name, 180 "chrome/browser/extensions/api/%s/%s_api.h" % (namespace_name,
176 namespace_name)) 181 namespace_name))
177 if not os.path.exists( 182 if not os.path.exists(
178 os.path.join(self._bundle._root, 183 os.path.join(self._bundle._root,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 class _SchemasCCGenerator(object): 246 class _SchemasCCGenerator(object):
242 """Generates a code.Code object for the generated schemas .cc file""" 247 """Generates a code.Code object for the generated schemas .cc file"""
243 248
244 def __init__(self, cpp_bundle): 249 def __init__(self, cpp_bundle):
245 self._bundle = cpp_bundle 250 self._bundle = cpp_bundle
246 251
247 def Generate(self, namespace): 252 def Generate(self, namespace):
248 c = code.Code() 253 c = code.Code()
249 c.Append(cpp_util.CHROMIUM_LICENSE) 254 c.Append(cpp_util.CHROMIUM_LICENSE)
250 c.Append() 255 c.Append()
251 c.Append('#include "%s"' % (os.path.join(SOURCE_BASE_PATH, 256 c.Append('#include "%s"' % (os.path.join(self._bundle._source_file_dir,
252 'generated_schemas.h'))) 257 'generated_schemas.h')))
253 c.Append() 258 c.Append()
254 c.Append('#include "base/lazy_instance.h"') 259 c.Append('#include "base/lazy_instance.h"')
255 c.Append() 260 c.Append()
256 c.Append('namespace {') 261 c.Append('namespace {')
257 for api in self._bundle._api_defs: 262 for api in self._bundle._api_defs:
258 namespace = self._bundle._model.namespaces[api.get('namespace')] 263 namespace = self._bundle._model.namespaces[api.get('namespace')]
259 # JSON parsing code expects lists of schemas, so dump a singleton list. 264 # JSON parsing code expects lists of schemas, so dump a singleton list.
260 json_content = json.dumps([_RemoveDescriptions(api)], 265 json_content = json.dumps([_RemoveDescriptions(api)],
261 separators=(',', ':')) 266 separators=(',', ':'))
(...skipping 26 matching lines...) Expand all
288 c.Eblock('}') 293 c.Eblock('}')
289 c.Append() 294 c.Append()
290 c.Append('// static') 295 c.Append('// static')
291 c.Sblock('bool GeneratedSchemas::IsGenerated(std::string name) {') 296 c.Sblock('bool GeneratedSchemas::IsGenerated(std::string name) {')
292 c.Append('return g_lazy_instance.Get().schemas.count(name) > 0;') 297 c.Append('return g_lazy_instance.Get().schemas.count(name) > 0;')
293 c.Eblock('}') 298 c.Eblock('}')
294 c.Append() 299 c.Append()
295 c.Concat(cpp_util.CloseNamespace(self._bundle._cpp_namespace)) 300 c.Concat(cpp_util.CloseNamespace(self._bundle._cpp_namespace))
296 c.Append() 301 c.Append()
297 return c 302 return c
OLDNEW
« no previous file with comments | « tools/json_schema_compiler/compiler.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698