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