OLD | NEW |
1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 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 argparse | 5 import argparse |
6 import os.path | 6 import os.path |
7 import sys | 7 import sys |
8 import re | 8 import re |
9 try: | 9 try: |
10 import json | 10 import json |
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
346 event_type = { | 346 event_type = { |
347 'id': ToTitleCase(event['name']) + 'Params', | 347 'id': ToTitleCase(event['name']) + 'Params', |
348 'type': 'object', | 348 'type': 'object', |
349 'description': 'Parameters for the %s event.' % ToTitleCase( | 349 'description': 'Parameters for the %s event.' % ToTitleCase( |
350 event['name']), | 350 event['name']), |
351 'properties': event.get('parameters', []) | 351 'properties': event.get('parameters', []) |
352 } | 352 } |
353 domain['types'].append(event_type) | 353 domain['types'].append(event_type) |
354 | 354 |
355 | 355 |
| 356 def PatchHiddenCommandsAndEvents(json_api): |
| 357 """ |
| 358 Mark all commands and events in hidden domains as hidden and make sure hidden |
| 359 commands have at least empty parameters and return values. |
| 360 """ |
| 361 for domain in json_api['domains']: |
| 362 if domain.get('hidden', False): |
| 363 for command in domain.get('commands', []): |
| 364 command['hidden'] = True |
| 365 for event in domain.get('events', []): |
| 366 event['hidden'] = True |
| 367 for command in domain.get('commands', []): |
| 368 if not command.get('hidden', False): |
| 369 continue |
| 370 if not 'parameters' in command: |
| 371 command['parameters'] = [] |
| 372 if not 'returns' in command: |
| 373 command['returns'] = [] |
| 374 for event in domain.get('events', []): |
| 375 if not event.get('hidden', False): |
| 376 continue |
| 377 if not 'parameters' in event: |
| 378 event['parameters'] = [] |
| 379 |
| 380 |
356 def Generate(jinja_env, output_dirname, json_api, class_name, file_types): | 381 def Generate(jinja_env, output_dirname, json_api, class_name, file_types): |
357 template_context = { | 382 template_context = { |
358 'api': json_api, | 383 'api': json_api, |
359 'join_arrays': JoinArrays, | 384 'join_arrays': JoinArrays, |
360 'resolve_type': ResolveType, | 385 'resolve_type': ResolveType, |
361 'type_definition': TypeDefinition, | 386 'type_definition': TypeDefinition, |
362 } | 387 } |
363 for file_type in file_types: | 388 for file_type in file_types: |
364 template = jinja_env.get_template('/%s_%s.template' % ( | 389 template = jinja_env.get_template('/%s_%s.template' % ( |
365 class_name, file_type)) | 390 class_name, file_type)) |
(...skipping 14 matching lines...) Expand all Loading... |
380 } | 405 } |
381 domain_name = CamelCaseToHackerStyle(domain['domain']) | 406 domain_name = CamelCaseToHackerStyle(domain['domain']) |
382 output_file = '%s/%s.%s' % (output_dirname, domain_name, file_type) | 407 output_file = '%s/%s.%s' % (output_dirname, domain_name, file_type) |
383 with open(output_file, 'w') as f: | 408 with open(output_file, 'w') as f: |
384 f.write(template.render(template_context)) | 409 f.write(template.render(template_context)) |
385 | 410 |
386 | 411 |
387 if __name__ == '__main__': | 412 if __name__ == '__main__': |
388 json_api, output_dirname = ParseArguments(sys.argv[1:]) | 413 json_api, output_dirname = ParseArguments(sys.argv[1:]) |
389 jinja_env = InitializeJinjaEnv(output_dirname) | 414 jinja_env = InitializeJinjaEnv(output_dirname) |
| 415 PatchHiddenCommandsAndEvents(json_api) |
390 SynthesizeCommandTypes(json_api) | 416 SynthesizeCommandTypes(json_api) |
391 SynthesizeEventTypes(json_api) | 417 SynthesizeEventTypes(json_api) |
392 PatchFullQualifiedRefs(json_api) | 418 PatchFullQualifiedRefs(json_api) |
393 CreateTypeDefinitions(json_api) | 419 CreateTypeDefinitions(json_api) |
394 Generate(jinja_env, output_dirname, json_api, 'types', ['cc', 'h']) | 420 Generate(jinja_env, output_dirname, json_api, 'types', ['cc', 'h']) |
395 Generate(jinja_env, output_dirname, json_api, 'type_conversions', ['h']) | 421 Generate(jinja_env, output_dirname, json_api, 'type_conversions', ['h']) |
396 GenerateDomains(jinja_env, output_dirname, json_api, 'domain', ['cc', 'h']) | 422 GenerateDomains(jinja_env, output_dirname, json_api, 'domain', ['cc', 'h']) |
OLD | NEW |