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 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 Mark all commands and events in experimental domains as experimental | 366 Mark all commands and events in experimental domains as experimental |
367 and make sure experimental commands have at least empty parameters | 367 and make sure experimental commands have at least empty parameters |
368 and return values. | 368 and return values. |
369 """ | 369 """ |
370 for domain in json_api['domains']: | 370 for domain in json_api['domains']: |
371 if domain.get('experimental', False): | 371 if domain.get('experimental', False): |
372 for command in domain.get('commands', []): | 372 for command in domain.get('commands', []): |
373 command['experimental'] = True | 373 command['experimental'] = True |
374 for event in domain.get('events', []): | 374 for event in domain.get('events', []): |
375 event['experimental'] = True | 375 event['experimental'] = True |
| 376 |
| 377 |
| 378 def EnsureCommandsHaveParametersAndReturnTypes(json_api): |
| 379 """ |
| 380 Make sure all commands have at least empty parameters and return values. This |
| 381 guarantees API compatibility if a previously experimental command is made |
| 382 stable. |
| 383 """ |
| 384 for domain in json_api['domains']: |
376 for command in domain.get('commands', []): | 385 for command in domain.get('commands', []): |
377 if not command.get('experimental', False): | |
378 continue | |
379 if not 'parameters' in command: | 386 if not 'parameters' in command: |
380 command['parameters'] = [] | 387 command['parameters'] = [] |
381 if not 'returns' in command: | 388 if not 'returns' in command: |
382 command['returns'] = [] | 389 command['returns'] = [] |
383 for event in domain.get('events', []): | 390 for event in domain.get('events', []): |
384 if not event.get('experimental', False): | |
385 continue | |
386 if not 'parameters' in event: | 391 if not 'parameters' in event: |
387 event['parameters'] = [] | 392 event['parameters'] = [] |
388 | 393 |
389 | 394 |
390 def Generate(jinja_env, output_dirname, json_api, class_name, file_types): | 395 def Generate(jinja_env, output_dirname, json_api, class_name, file_types): |
391 template_context = { | 396 template_context = { |
392 'api': json_api, | 397 'api': json_api, |
393 'join_arrays': JoinArrays, | 398 'join_arrays': JoinArrays, |
394 'resolve_type': ResolveType, | 399 'resolve_type': ResolveType, |
395 'type_definition': TypeDefinition, | 400 'type_definition': TypeDefinition, |
(...skipping 19 matching lines...) Expand all Loading... |
415 domain_name = CamelCaseToHackerStyle(domain['domain']) | 420 domain_name = CamelCaseToHackerStyle(domain['domain']) |
416 output_file = '%s/%s.%s' % (output_dirname, domain_name, file_type) | 421 output_file = '%s/%s.%s' % (output_dirname, domain_name, file_type) |
417 with open(output_file, 'w') as f: | 422 with open(output_file, 'w') as f: |
418 f.write(template.render(template_context)) | 423 f.write(template.render(template_context)) |
419 | 424 |
420 | 425 |
421 if __name__ == '__main__': | 426 if __name__ == '__main__': |
422 json_api, output_dirname = ParseArguments(sys.argv[1:]) | 427 json_api, output_dirname = ParseArguments(sys.argv[1:]) |
423 jinja_env = InitializeJinjaEnv(output_dirname) | 428 jinja_env = InitializeJinjaEnv(output_dirname) |
424 PatchExperimentalCommandsAndEvents(json_api) | 429 PatchExperimentalCommandsAndEvents(json_api) |
| 430 EnsureCommandsHaveParametersAndReturnTypes(json_api) |
425 SynthesizeCommandTypes(json_api) | 431 SynthesizeCommandTypes(json_api) |
426 SynthesizeEventTypes(json_api) | 432 SynthesizeEventTypes(json_api) |
427 PatchFullQualifiedRefs(json_api) | 433 PatchFullQualifiedRefs(json_api) |
428 CreateTypeDefinitions(json_api) | 434 CreateTypeDefinitions(json_api) |
429 Generate(jinja_env, output_dirname, json_api, 'types', ['cc', 'h']) | 435 Generate(jinja_env, output_dirname, json_api, 'types', ['cc', 'h']) |
430 Generate(jinja_env, output_dirname, json_api, 'type_conversions', ['h']) | 436 Generate(jinja_env, output_dirname, json_api, 'type_conversions', ['h']) |
431 GenerateDomains(jinja_env, output_dirname, json_api, 'domain', ['cc', 'h']) | 437 GenerateDomains(jinja_env, output_dirname, json_api, 'domain', ['cc', 'h']) |
OLD | NEW |