OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 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 """Generates dart source files from a mojom.Module.""" | 5 """Generates dart source files from a mojom.Module.""" |
6 | 6 |
7 import os | 7 import os |
8 import re | 8 import re |
9 import shutil | 9 import shutil |
10 import sys | 10 import sys |
11 | 11 |
| 12 import mojom.fileutil as fileutil |
12 import mojom.generate.constant_resolver as resolver | 13 import mojom.generate.constant_resolver as resolver |
13 import mojom.generate.generator as generator | 14 import mojom.generate.generator as generator |
14 import mojom.generate.module as mojom | 15 import mojom.generate.module as mojom |
15 import mojom.generate.pack as pack | 16 import mojom.generate.pack as pack |
16 from mojom.generate.template_expander import UseJinja | 17 from mojom.generate.template_expander import UseJinja |
17 | 18 |
18 GENERATOR_PREFIX = 'dart' | 19 GENERATOR_PREFIX = 'dart' |
19 | 20 |
20 _kind_to_dart_default_value = { | 21 _kind_to_dart_default_value = { |
21 mojom.BOOL: "false", | 22 mojom.BOOL: "false", |
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 } | 415 } |
415 | 416 |
416 @UseJinja("dart_templates/module.lib.tmpl", filters=dart_filters) | 417 @UseJinja("dart_templates/module.lib.tmpl", filters=dart_filters) |
417 def GenerateLibModule(self, args): | 418 def GenerateLibModule(self, args): |
418 return self.GetParameters(args) | 419 return self.GetParameters(args) |
419 | 420 |
420 | 421 |
421 def GenerateFiles(self, args): | 422 def GenerateFiles(self, args): |
422 elements = self.module.namespace.split('.') | 423 elements = self.module.namespace.split('.') |
423 elements.append("%s.dart" % self.module.name) | 424 elements.append("%s.dart" % self.module.name) |
424 path = os.path.join("dart-pkg", "mojom/lib", *elements) | 425 |
425 self.Write(self.GenerateLibModule(args), path) | 426 lib_module = self.GenerateLibModule(args) |
426 path = os.path.join("dart-gen", "mojom/lib", *elements) | 427 pkg_path = os.path.join("dart-pkg", "mojom/lib", *elements) |
427 self.Write(self.GenerateLibModule(args), path) | 428 self.Write(lib_module, pkg_path) |
| 429 |
| 430 gen_path = os.path.join("dart-gen", "mojom/lib", *elements) |
| 431 full_gen_path = os.path.join(self.output_dir, gen_path) |
| 432 self.Write(lib_module, gen_path) |
| 433 |
428 link = self.MatchMojomFilePath("%s.dart" % self.module.name) | 434 link = self.MatchMojomFilePath("%s.dart" % self.module.name) |
429 if os.path.exists(os.path.join(self.output_dir, link)): | 435 full_link_path = os.path.join(self.output_dir, link) |
430 os.unlink(os.path.join(self.output_dir, link)) | 436 if os.path.exists(full_link_path): |
| 437 os.unlink(full_link_path) |
| 438 fileutil.EnsureDirectoryExists(os.path.dirname(full_link_path)) |
431 try: | 439 try: |
432 if sys.platform == "win32": | 440 if sys.platform == "win32": |
433 shutil.copy(os.path.join(self.output_dir, path), | 441 shutil.copy(full_gen_path, full_link_path) |
434 os.path.join(self.output_dir, link)) | |
435 else: | 442 else: |
436 os.symlink(os.path.join(self.output_dir, path), | 443 os.symlink(full_gen_path, full_link_path) |
437 os.path.join(self.output_dir, link)) | |
438 except OSError as e: | 444 except OSError as e: |
439 # Errno 17 is file already exists. If the link fails because file already | 445 # Errno 17 is file already exists. If the link fails because file already |
440 # exists assume another instance of this script tried to create the same | 446 # exists assume another instance of this script tried to create the same |
441 # file and continue on. | 447 # file and continue on. |
442 if e.errno != 17: | 448 if e.errno != 17: |
443 raise e | 449 raise e |
444 | 450 |
445 def GetImports(self, args): | 451 def GetImports(self, args): |
446 used_names = set() | 452 used_names = set() |
447 for each_import in self.module.imports: | 453 for each_import in self.module.imports: |
(...skipping 22 matching lines...) Expand all Loading... |
470 interface_to_import[name] = each_import["unique_name"] + "." + name | 476 interface_to_import[name] = each_import["unique_name"] + "." + name |
471 return interface_to_import | 477 return interface_to_import |
472 | 478 |
473 def ImportedFrom(self): | 479 def ImportedFrom(self): |
474 interface_to_import = {} | 480 interface_to_import = {} |
475 for each_import in self.module.imports: | 481 for each_import in self.module.imports: |
476 for each_interface in each_import["module"].interfaces: | 482 for each_interface in each_import["module"].interfaces: |
477 name = each_interface.name | 483 name = each_interface.name |
478 interface_to_import[name] = each_import["unique_name"] + "." | 484 interface_to_import[name] = each_import["unique_name"] + "." |
479 return interface_to_import | 485 return interface_to_import |
OLD | NEW |