| 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 collections | 6 import collections |
| 7 import os.path | 7 import os.path |
| 8 import re | 8 import re |
| 9 import sys | 9 import sys |
| 10 try: | 10 try: |
| (...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 for command in domain.get('commands', []): | 437 for command in domain.get('commands', []): |
| 438 if not 'parameters' in command: | 438 if not 'parameters' in command: |
| 439 command['parameters'] = [] | 439 command['parameters'] = [] |
| 440 if not 'returns' in command: | 440 if not 'returns' in command: |
| 441 command['returns'] = [] | 441 command['returns'] = [] |
| 442 for event in domain.get('events', []): | 442 for event in domain.get('events', []): |
| 443 if not 'parameters' in event: | 443 if not 'parameters' in event: |
| 444 event['parameters'] = [] | 444 event['parameters'] = [] |
| 445 | 445 |
| 446 | 446 |
| 447 def Generate(jinja_env, output_dirname, json_api, | |
| 448 class_name, file_types, file_name=None): | |
| 449 if file_name is None: | |
| 450 file_name = class_name | |
| 451 EnsureDirectoryExists(output_dirname) | |
| 452 template_context = { | |
| 453 'api': json_api, | |
| 454 'join_arrays': JoinArrays, | |
| 455 'resolve_type': ResolveType, | |
| 456 'type_definition': TypeDefinition, | |
| 457 } | |
| 458 for file_type in file_types: | |
| 459 template = jinja_env.get_template('/%s_%s.template' % ( | |
| 460 class_name, file_type)) | |
| 461 output_file = '%s/%s.%s' % (output_dirname, file_name, file_type) | |
| 462 with open(output_file, 'w') as f: | |
| 463 f.write(template.render(template_context)) | |
| 464 | |
| 465 | |
| 466 def GeneratePerDomain(jinja_env, output_dirname, json_api, class_name, | 447 def GeneratePerDomain(jinja_env, output_dirname, json_api, class_name, |
| 467 file_types, domain_name_to_file_name_func): | 448 file_types, domain_name_to_file_name_func): |
| 468 EnsureDirectoryExists(output_dirname) | 449 EnsureDirectoryExists(output_dirname) |
| 469 for file_type in file_types: | 450 for file_type in file_types: |
| 470 template = jinja_env.get_template('/%s_%s.template' % ( | 451 template = jinja_env.get_template('/%s_%s.template' % ( |
| 471 class_name, file_type)) | 452 class_name, file_type)) |
| 472 for domain in json_api['domains']: | 453 for domain in json_api['domains']: |
| 473 template_context = { | 454 template_context = { |
| 474 'domain': domain, | 455 'domain': domain, |
| 475 'resolve_type': ResolveType, | 456 'resolve_type': ResolveType, |
| 476 } | 457 } |
| 477 domain_name = CamelCaseToHackerStyle(domain['domain']) | 458 domain_name = CamelCaseToHackerStyle(domain['domain']) |
| 478 output_file = '%s/%s.%s' % (output_dirname, | 459 output_file = '%s/%s.%s' % (output_dirname, |
| 479 domain_name_to_file_name_func(domain_name), | 460 domain_name_to_file_name_func(domain_name), |
| 480 file_type) | 461 file_type) |
| 481 with open(output_file, 'w') as f: | 462 with open(output_file, 'w') as f: |
| 482 f.write(template.render(template_context)) | 463 f.write(template.render(template_context)) |
| 483 | 464 |
| 484 | 465 |
| 485 def GenerateDomains(jinja_env, output_dirname, json_api): | 466 def GenerateDomains(jinja_env, output_dirname, json_api): |
| 486 GeneratePerDomain( | 467 GeneratePerDomain( |
| 487 jinja_env, os.path.join(output_dirname, 'devtools', 'domains'), json_api, | 468 jinja_env, os.path.join(output_dirname, 'devtools', 'domains'), json_api, |
| 488 'domain', ['cc', 'h'], | 469 'domain', ['cc', 'h'], |
| 489 lambda domain_name: domain_name) | 470 lambda domain_name: domain_name) |
| 490 | 471 |
| 491 # TODO(altimin): Remove this in 2017. | |
| 492 # Generate DOMAIN.h in the old directory for backwards compatibility. | |
| 493 GeneratePerDomain( | |
| 494 jinja_env, os.path.join(output_dirname, 'domains'), json_api, | |
| 495 'deprecated_domain', ['h'], lambda domain_name: domain_name) | |
| 496 | |
| 497 | 472 |
| 498 def GenerateTypes(jinja_env, output_dirname, json_api): | 473 def GenerateTypes(jinja_env, output_dirname, json_api): |
| 499 # Generate forward declarations for types. | 474 # Generate forward declarations for types. |
| 500 GeneratePerDomain( | 475 GeneratePerDomain( |
| 501 jinja_env, os.path.join(output_dirname, 'devtools', 'internal'), | 476 jinja_env, os.path.join(output_dirname, 'devtools', 'internal'), |
| 502 json_api, 'domain_types_forward_declarations', ['h'], | 477 json_api, 'domain_types_forward_declarations', ['h'], |
| 503 lambda domain_name: 'types_forward_declarations_%s' % (domain_name, )) | 478 lambda domain_name: 'types_forward_declarations_%s' % (domain_name, )) |
| 504 # Generate types on per-domain basis. | 479 # Generate types on per-domain basis. |
| 505 GeneratePerDomain( | 480 GeneratePerDomain( |
| 506 jinja_env, os.path.join(output_dirname, 'devtools', 'domains'), | 481 jinja_env, os.path.join(output_dirname, 'devtools', 'domains'), |
| 507 json_api, 'domain_types', ['h', 'cc'], | 482 json_api, 'domain_types', ['h', 'cc'], |
| 508 lambda domain_name: 'types_%s' % (domain_name, )) | 483 lambda domain_name: 'types_%s' % (domain_name, )) |
| 509 | 484 |
| 510 # TODO(altimin): Remove this in 2017. | |
| 511 # Generate types.h for backwards compatibility. | |
| 512 Generate(jinja_env, os.path.join(output_dirname, 'domains'), json_api, | |
| 513 'deprecated_types', ['h'], 'types') | |
| 514 | |
| 515 | 485 |
| 516 def GenerateTypeConversions(jinja_env, output_dirname, json_api): | 486 def GenerateTypeConversions(jinja_env, output_dirname, json_api): |
| 517 # Generate type conversions on per-domain basis. | 487 # Generate type conversions on per-domain basis. |
| 518 GeneratePerDomain( | 488 GeneratePerDomain( |
| 519 jinja_env, os.path.join(output_dirname, 'devtools', 'internal'), | 489 jinja_env, os.path.join(output_dirname, 'devtools', 'internal'), |
| 520 json_api, 'domain_type_conversions', ['h'], | 490 json_api, 'domain_type_conversions', ['h'], |
| 521 lambda domain_name: 'type_conversions_%s' % (domain_name, )) | 491 lambda domain_name: 'type_conversions_%s' % (domain_name, )) |
| 522 | 492 |
| 523 # TODO(altimin): Remove this in 2017. | |
| 524 # Generate type_conversions.h for backwards compatibility. | |
| 525 Generate(jinja_env, os.path.join(output_dirname, 'domains'), json_api, | |
| 526 'deprecated_type_conversions', ['h'], 'type_conversions') | |
| 527 | |
| 528 | 493 |
| 529 if __name__ == '__main__': | 494 if __name__ == '__main__': |
| 530 json_api, output_dirname = ParseArguments(sys.argv[1:]) | 495 json_api, output_dirname = ParseArguments(sys.argv[1:]) |
| 531 jinja_env = InitializeJinjaEnv(output_dirname) | 496 jinja_env = InitializeJinjaEnv(output_dirname) |
| 532 InitializeDomainDependencies(json_api) | 497 InitializeDomainDependencies(json_api) |
| 533 PatchExperimentalCommandsAndEvents(json_api) | 498 PatchExperimentalCommandsAndEvents(json_api) |
| 534 EnsureCommandsHaveParametersAndReturnTypes(json_api) | 499 EnsureCommandsHaveParametersAndReturnTypes(json_api) |
| 535 SynthesizeCommandTypes(json_api) | 500 SynthesizeCommandTypes(json_api) |
| 536 SynthesizeEventTypes(json_api) | 501 SynthesizeEventTypes(json_api) |
| 537 PatchFullQualifiedRefs(json_api) | 502 PatchFullQualifiedRefs(json_api) |
| 538 CreateTypeDefinitions(json_api) | 503 CreateTypeDefinitions(json_api) |
| 539 GenerateDomains(jinja_env, output_dirname, json_api) | 504 GenerateDomains(jinja_env, output_dirname, json_api) |
| 540 GenerateTypes(jinja_env, output_dirname, json_api) | 505 GenerateTypes(jinja_env, output_dirname, json_api) |
| 541 GenerateTypeConversions(jinja_env, output_dirname, json_api) | 506 GenerateTypeConversions(jinja_env, output_dirname, json_api) |
| OLD | NEW |