OLD | NEW |
1 #!/usr/bin/python | 1 #!/usr/bin/python |
2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 2 # Copyright (c) 2011, 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 import copy | 6 import copy |
7 import database | 7 import database |
8 import logging | 8 import logging |
9 import monitored | 9 import monitored |
10 import multiprocessing | 10 import multiprocessing |
(...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
810 # Report all dictionaries and their usage. | 810 # Report all dictionaries and their usage. |
811 self._output_examination() | 811 self._output_examination() |
812 # Report all interface marked with NoInterfaceObject and their usage. | 812 # Report all interface marked with NoInterfaceObject and their usage. |
813 self._output_examination(check_dictionaries=False) | 813 self._output_examination(check_dictionaries=False) |
814 | 814 |
815 print '\nKey:' | 815 print '\nKey:' |
816 print ' (READ-ONLY) - read-only attribute has relationship' | 816 print ' (READ-ONLY) - read-only attribute has relationship' |
817 print ' (GET/SET) - attribute has relationship' | 817 print ' (GET/SET) - attribute has relationship' |
818 print ' RETURN - operation\'s returned value has relationship' | 818 print ' RETURN - operation\'s returned value has relationship' |
819 print ' (ARGUMENT) - operation\'s argument(s) has relationship' | 819 print ' (ARGUMENT) - operation\'s argument(s) has relationship' |
| 820 print '' |
| 821 print ' (New) - After dictionary name if constructor(s) exist' |
| 822 print ' (Ops,Props,New) after a NoInterfaceObject name is defined as:' |
| 823 print ' Ops - number of operations for a NoInterfaceObject' |
| 824 print ' Props - number of properties for a NoInterfaceObject' |
| 825 print ' New - T(#) number constructors for a NoInterfaceObject' |
| 826 print ' F no constructors for a NoInterfaceObject' |
| 827 print ' e.g., an interface 5 operations, 3 properties and 2' |
| 828 print ' constructors would display (5,3,T(2))' |
820 | 829 |
821 print '\n\nExamination Complete\n' | 830 print '\n\nExamination Complete\n' |
822 | 831 |
823 def _output_examination(self, check_dictionaries=True): | 832 def _output_examination(self, check_dictionaries=True): |
824 # Output diagnostics. First columns is Dictionary or NoInterfaceObject e.g., | 833 # Output diagnostics. First columns is Dictionary or NoInterfaceObject e.g., |
825 # | Dictionary | Used In Interface | Usage Operation/Attribute | | 834 # | Dictionary | Used In Interface | Usage Operation/Attribute | |
826 print '\n\n' | 835 print '\n\n' |
827 title_bar = ['Dictionary', 'Used In Interface', 'Usage Operation/Attribute']
if check_dictionaries \ | 836 title_bar = ['Dictionary', 'Used In Interface', 'Usage Operation/Attribute']
if check_dictionaries \ |
828 else ['NoInterfaceObject', 'Used In Interface', 'Usage Operation
/Attribute'] | 837 else ['NoInterfaceObject (Ops,Props,New)', 'Used In Interface',
'Usage Operation/Attribute'] |
829 self._tabulate_title(title_bar) | 838 self._tabulate_title(title_bar) |
830 diags = self._diag_dictionaries if check_dictionaries else self._diag_no_int
erfaces | 839 diags = self._diag_dictionaries if check_dictionaries else self._diag_no_int
erfaces |
831 for diag in diags: | 840 for diag in diags: |
832 self._tabluate([diag['dictionary' if check_dictionaries else 'no_interface
_object'].id, '', '']) | 841 if not(check_dictionaries): |
| 842 interface = diag['no_interface_object'] |
| 843 ops_count = len(interface.operations) |
| 844 properties_count = len(interface.attributes) |
| 845 any_constructors = 'Constructor' in interface.ext_attrs |
| 846 constructors = 'T(%s)' % len(interface.ext_attrs['Constructor']) if any_
constructors else 'F' |
| 847 interface_detail = '%s (%s,%s,%s)' % \ |
| 848 (diag['no_interface_object'].id, |
| 849 ops_count, |
| 850 properties_count, |
| 851 constructors) |
| 852 self._tabulate([interface_detail, '', '']) |
| 853 else: |
| 854 dictionary = diag['dictionary'] |
| 855 any_constructors = 'Constructor' in dictionary.ext_attrs |
| 856 self._tabulate(['%s%s' % (dictionary.id, ' (New)' if any_constructors el
se ''), '', '']) |
833 for usage in diag['usages']: | 857 for usage in diag['usages']: |
834 detail = '' | 858 detail = '' |
835 if 'attribute' in usage: | 859 if 'attribute' in usage: |
836 attribute_type = 'READ-ONLY' if not usage['argument'] else 'GET/SET' | 860 attribute_type = 'READ-ONLY' if not usage['argument'] else 'GET/SET' |
837 detail = '(%s) %s' % (attribute_type, usage['attribute']) | 861 detail = '(%s) %s' % (attribute_type, usage['attribute']) |
838 elif 'operation' in usage: | 862 elif 'operation' in usage: |
839 detail = '%s %s%s' % ('RETURN' if usage['result'] else '', | 863 detail = '%s %s%s' % ('RETURN' if usage['result'] else '', |
840 usage['operation'], | 864 usage['operation'], |
841 '(ARGUMENT)' if usage['argument'] else
'') | 865 '(ARGUMENT)' if usage['argument'] else
'') |
842 self._tabluate([None, usage['interface'], detail]) | 866 self._tabulate([None, usage['interface'], detail]) |
843 self._tabulate_break() | 867 self._tabulate_break() |
844 | 868 |
845 # operation_or_attribute either IDLOperation or IDLAttribute if None then | 869 # operation_or_attribute either IDLOperation or IDLAttribute if None then |
846 # its a constructor (IDLExtAttrFunctionValue). | 870 # its a constructor (IDLExtAttrFunctionValue). |
847 def _mark_usage(self, interface, operation_or_attribute = None, check_dictiona
ries=True): | 871 def _mark_usage(self, interface, operation_or_attribute = None, check_dictiona
ries=True): |
848 for diag in self._diag_dictionaries if check_dictionaries else self._diag_no
_interfaces: | 872 for diag in self._diag_dictionaries if check_dictionaries else self._diag_no
_interfaces: |
849 for usage in diag['usages']: | 873 for usage in diag['usages']: |
850 if not usage['interface']: | 874 if not usage['interface']: |
851 usage['interface'] = interface.id | 875 usage['interface'] = interface.id |
852 if isinstance(operation_or_attribute, IDLOperation): | 876 if isinstance(operation_or_attribute, IDLOperation): |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
960 self._no_interfaces_used_types = []; | 984 self._no_interfaces_used_types = []; |
961 map(self._no_interface_used, node.all(IDLType)) | 985 map(self._no_interface_used, node.all(IDLType)) |
962 self._remember_usage(node, check_dictionaries=False) | 986 self._remember_usage(node, check_dictionaries=False) |
963 | 987 |
964 # Maximum width of each column. | 988 # Maximum width of each column. |
965 def _TABULATE_WIDTH(self): | 989 def _TABULATE_WIDTH(self): |
966 return 45 | 990 return 45 |
967 | 991 |
968 def _tabulate_title(self, row_title): | 992 def _tabulate_title(self, row_title): |
969 title_separator = "=" * self._TABULATE_WIDTH() | 993 title_separator = "=" * self._TABULATE_WIDTH() |
970 self._tabluate([title_separator, title_separator, title_separator]) | 994 self._tabulate([title_separator, title_separator, title_separator]) |
971 self._tabluate(row_title) | 995 self._tabulate(row_title) |
972 self._tabluate([title_separator, title_separator, title_separator]) | 996 self._tabulate([title_separator, title_separator, title_separator]) |
973 | 997 |
974 def _tabulate_break(self): | 998 def _tabulate_break(self): |
975 break_separator = "-" * self._TABULATE_WIDTH() | 999 break_separator = "-" * self._TABULATE_WIDTH() |
976 self._tabluate([break_separator, break_separator, break_separator]) | 1000 self._tabulate([break_separator, break_separator, break_separator]) |
977 | 1001 |
978 def _tabluate(self, columns): | 1002 def _tabulate(self, columns): |
979 """Tabulate a list of columns for a row. Each item in columns is a column | 1003 """Tabulate a list of columns for a row. Each item in columns is a column |
980 value each column will be padded up to _TABULATE_WIDTH. Each | 1004 value each column will be padded up to _TABULATE_WIDTH. Each |
981 column starts/ends with a vertical bar '|' the format a row: | 1005 column starts/ends with a vertical bar '|' the format a row: |
982 | 1006 |
983 | columns[0] | columns[1] | columns[2] | ... | | 1007 | columns[0] | columns[1] | columns[2] | ... | |
984 """ | 1008 """ |
985 if len(columns) > 0: | 1009 if len(columns) > 0: |
986 for column in columns: | 1010 for column in columns: |
987 value = '' if not column else column | 1011 value = '' if not column else column |
988 sys.stdout.write('|{0:^{1}}'.format(value, self._TABULATE_WIDTH())) | 1012 sys.stdout.write('|{0:^{1}}'.format(value, self._TABULATE_WIDTH())) |
989 else: | 1013 else: |
990 sys.stdout.write('|{0:^{1}}'.format('', self._TABULATE_WIDTH())) | 1014 sys.stdout.write('|{0:^{1}}'.format('', self._TABULATE_WIDTH())) |
991 | 1015 |
992 sys.stdout.write('|\n') | 1016 sys.stdout.write('|\n') |
OLD | NEW |