| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 3 # for details. All rights reserved. Use of this source code is governed by a | 3 # for details. All rights reserved. Use of this source code is governed by a |
| 4 # BSD-style license that can be found in the LICENSE file. | 4 # BSD-style license that can be found in the LICENSE file. |
| 5 | 5 |
| 6 """This module provides shared functionality for the system to generate | 6 """This module provides shared functionality for the system to generate |
| 7 Dart:html APIs from the IDL database.""" | 7 Dart:html APIs from the IDL database.""" |
| 8 | 8 |
| 9 import emitter | 9 import emitter |
| 10 import os | 10 import os |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 info = AnalyzeOperation(self._interface, handlers) | 234 info = AnalyzeOperation(self._interface, handlers) |
| 235 code = self._library_emitter.FileEmitter(self._interface.id) | 235 code = self._library_emitter.FileEmitter(self._interface.id) |
| 236 code.Emit(self._template_loader.Load('callback.darttemplate')) | 236 code.Emit(self._template_loader.Load('callback.darttemplate')) |
| 237 code.Emit('typedef $TYPE $NAME($PARAMS);\n', | 237 code.Emit('typedef $TYPE $NAME($PARAMS);\n', |
| 238 NAME=self._interface.id, | 238 NAME=self._interface.id, |
| 239 TYPE=self._DartType(info.type_name), | 239 TYPE=self._DartType(info.type_name), |
| 240 PARAMS=info.ParametersImplementationDeclaration(self._DartType)) | 240 PARAMS=info.ParametersImplementationDeclaration(self._DartType)) |
| 241 self._backend.GenerateCallback(info) | 241 self._backend.GenerateCallback(info) |
| 242 | 242 |
| 243 def GenerateInterface(self): | 243 def GenerateInterface(self): |
| 244 interface_type_info = self._type_registry.TypeInfo(self._interface.id) |
| 244 if (not self._interface.id in _merged_html_interfaces and | 245 if (not self._interface.id in _merged_html_interfaces and |
| 245 # Don't re-generate types that have been converted to native dart types. | 246 interface_type_info.has_generated_interface()): |
| 246 self._html_interface_name not in nativified_classes): | |
| 247 interface_emitter = self._library_emitter.FileEmitter( | 247 interface_emitter = self._library_emitter.FileEmitter( |
| 248 self._html_interface_name) | 248 self._html_interface_name) |
| 249 else: | 249 else: |
| 250 interface_emitter = emitter.Emitter() | 250 interface_emitter = emitter.Emitter() |
| 251 | 251 |
| 252 template_file = 'interface_%s.darttemplate' % self._html_interface_name | 252 template_file = 'interface_%s.darttemplate' % self._html_interface_name |
| 253 interface_template = (self._template_loader.TryLoad(template_file) or | 253 interface_template = (self._template_loader.TryLoad(template_file) or |
| 254 self._template_loader.Load('interface.darttemplate')) | 254 self._template_loader.Load('interface.darttemplate')) |
| 255 | 255 |
| 256 typename = self._html_interface_name | 256 typename = self._html_interface_name |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 interface_template + '$!TOP_LEVEL', | 324 interface_template + '$!TOP_LEVEL', |
| 325 ID=typename, | 325 ID=typename, |
| 326 EXTENDS=implements_str) | 326 EXTENDS=implements_str) |
| 327 | 327 |
| 328 self._type_comment_emitter.Emit("/// @domName $DOMNAME", | 328 self._type_comment_emitter.Emit("/// @domName $DOMNAME", |
| 329 DOMNAME=self._interface.doc_js_name) | 329 DOMNAME=self._interface.doc_js_name) |
| 330 | 330 |
| 331 if self._backend.HasImplementation(): | 331 if self._backend.HasImplementation(): |
| 332 if not self._interface.id in _merged_html_interfaces: | 332 if not self._interface.id in _merged_html_interfaces: |
| 333 name = self._html_interface_name | 333 name = self._html_interface_name |
| 334 if self._html_interface_name in nativified_classes: | |
| 335 name = nativified_classes[self._html_interface_name] | |
| 336 basename = '%sImpl' % name | 334 basename = '%sImpl' % name |
| 337 else: | 335 else: |
| 338 basename = '%sImpl_Merged' % self._html_interface_name | 336 basename = '%sImpl_Merged' % self._html_interface_name |
| 339 implementation_emitter = self._library_emitter.FileEmitter(basename) | 337 implementation_emitter = self._library_emitter.FileEmitter(basename) |
| 340 else: | 338 else: |
| 341 implementation_emitter = emitter.Emitter() | 339 implementation_emitter = emitter.Emitter() |
| 342 | 340 |
| 343 base_class = self._backend.BaseClassName() | 341 base_class = self._backend.BaseClassName() |
| 344 interface_type_info = self._type_registry.TypeInfo(self._interface.id) | 342 interface_type_info = self._type_registry.TypeInfo(self._interface.id) |
| 345 implemented_interfaces = [interface_type_info.interface_name()] +\ | 343 implemented_interfaces = [interface_type_info.interface_name()] +\ |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 606 return not (IsPureInterface(self._interface.id) or | 604 return not (IsPureInterface(self._interface.id) or |
| 607 self._interface.id in _merged_html_interfaces) | 605 self._interface.id in _merged_html_interfaces) |
| 608 | 606 |
| 609 def ImplementationClassName(self): | 607 def ImplementationClassName(self): |
| 610 return self._ImplClassName(self._html_interface_name) | 608 return self._ImplClassName(self._html_interface_name) |
| 611 | 609 |
| 612 def ImplementsMergedMembers(self): | 610 def ImplementsMergedMembers(self): |
| 613 return True | 611 return True |
| 614 | 612 |
| 615 def _ImplClassName(self, type_name): | 613 def _ImplClassName(self, type_name): |
| 616 name = type_name | 614 return '_%sImpl' % type_name |
| 617 if type_name in nativified_classes: | |
| 618 name = nativified_classes[type_name] | |
| 619 return '_%sImpl' % name | |
| 620 | 615 |
| 621 def GenerateCallback(self, info): | 616 def GenerateCallback(self, info): |
| 622 pass | 617 pass |
| 623 | 618 |
| 624 def BaseClassName(self): | 619 def BaseClassName(self): |
| 625 if not self._interface.parents: | 620 if not self._interface.parents: |
| 626 return None | 621 return None |
| 627 supertype = self._interface.parents[0].type.id | 622 supertype = self._interface.parents[0].type.id |
| 628 if IsDartCollectionType(supertype): | 623 if IsDartCollectionType(supertype): |
| 629 # List methods are injected in AddIndexer. | 624 # List methods are injected in AddIndexer. |
| 630 return None | 625 return None |
| 631 if IsPureInterface(supertype): | 626 if IsPureInterface(supertype): |
| 632 return None | 627 return None |
| 633 elif supertype == 'NodeList': | |
| 634 # Special case as NodeList gets converted to List<Node>. | |
| 635 return '_NodeListImpl' | |
| 636 return self._type_registry.TypeInfo(supertype).implementation_name() | 628 return self._type_registry.TypeInfo(supertype).implementation_name() |
| 637 | 629 |
| 638 def AdditionalImplementedInterfaces(self): | 630 def AdditionalImplementedInterfaces(self): |
| 639 # TODO: Include all implemented interfaces, including other Lists. | 631 # TODO: Include all implemented interfaces, including other Lists. |
| 640 implements = [] | 632 implements = [] |
| 641 element_type = MaybeTypedArrayElementType(self._interface) | 633 element_type = MaybeTypedArrayElementType(self._interface) |
| 642 if element_type: | 634 if element_type: |
| 643 implements.append('List<%s>' % self._DartType(element_type)) | 635 implements.append('List<%s>' % self._DartType(element_type)) |
| 644 if self._HasJavaScriptIndexingBehaviour(): | 636 if self._HasJavaScriptIndexingBehaviour(): |
| 645 implements.append('JavaScriptIndexingBehavior') | 637 implements.append('JavaScriptIndexingBehavior') |
| (...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1131 | 1123 |
| 1132 library_emitter = self._multiemitter.FileEmitter(library_file_path) | 1124 library_emitter = self._multiemitter.FileEmitter(library_file_path) |
| 1133 library_file_dir = os.path.dirname(library_file_path) | 1125 library_file_dir = os.path.dirname(library_file_path) |
| 1134 auxiliary_dir = os.path.relpath(auxiliary_dir, library_file_dir) | 1126 auxiliary_dir = os.path.relpath(auxiliary_dir, library_file_dir) |
| 1135 imports_emitter = library_emitter.Emit( | 1127 imports_emitter = library_emitter.Emit( |
| 1136 self._template, AUXILIARY_DIR=massage_path(auxiliary_dir)) | 1128 self._template, AUXILIARY_DIR=massage_path(auxiliary_dir)) |
| 1137 for path in sorted(self._path_to_emitter.keys()): | 1129 for path in sorted(self._path_to_emitter.keys()): |
| 1138 relpath = os.path.relpath(path, library_file_dir) | 1130 relpath = os.path.relpath(path, library_file_dir) |
| 1139 imports_emitter.Emit( | 1131 imports_emitter.Emit( |
| 1140 "#source('$PATH');\n", PATH=massage_path(relpath)) | 1132 "#source('$PATH');\n", PATH=massage_path(relpath)) |
| OLD | NEW |