5"""This module provides shared functionality to provide Dart metadata for
15from htmlrenamer
import renamed_html_members, html_interface_renames
17_logger = logging.getLogger(
'dartmetadata')
29 'dartmetadata._dart2js_annotations',
31 'AnimationEffectTiming.duration': [
32 "@Returns('num|String|Null')",
35 "@Creates('TypedData')",
36 "@Returns('TypedData|Null')",
38 'CanvasRenderingContext2D.createImageData': [
39 "@Creates('ImageData|=Object')",
41 'CanvasRenderingContext2D.getImageData': [
42 "@Creates('ImageData|=Object')",
44 'CanvasRenderingContext2D.webkitGetImageDataHD': [
45 "@Creates('ImageData|=Object')",
47 'CanvasRenderingContext2D.fillStyle': [
48 "@Creates('String|CanvasGradient|CanvasPattern')",
49 "@Returns('String|CanvasGradient|CanvasPattern')",
51 'CanvasRenderingContext2D.strokeStyle': [
52 "@Creates('String|CanvasGradient|CanvasPattern')",
53 "@Returns('String|CanvasGradient|CanvasPattern')",
55 'CryptoKey.algorithm': [
58 'CustomEvent._detail': [
66 "@Creates('Window|=Object|Null')",
67 "@Returns('Window|=Object|Null')",
69 'Document.getElementsByClassName': [
70 "@Creates('NodeList|HtmlCollection')",
71 "@Returns('NodeList|HtmlCollection')",
73 'Document.getElementsByName': [
74 "@Creates('NodeList|HtmlCollection')",
75 "@Returns('NodeList|HtmlCollection')",
77 'Document.getElementsByTagName': [
78 "@Creates('NodeList|HtmlCollection')",
79 "@Returns('NodeList|HtmlCollection')",
83 'Document.querySelectorAll': [
84 "@Creates('NodeList')",
85 "@Returns('NodeList')",
87 'DocumentFragment.querySelectorAll': [
88 "@Creates('NodeList')",
89 "@Returns('NodeList')",
91 'Element.querySelectorAll': [
92 "@Creates('NodeList')",
93 "@Returns('NodeList')",
95 'Element.getBoundingClientRect': [
96 "@Creates('_DomRect')",
97 "@Returns('_DomRect|Null')",
99 'Element.getClientRects': [
100 "@Creates('DomRectList')",
101 "@Returns('DomRectList|Null')",
107 "@Creates('Window|=Object')",
108 "@Returns('Window|=Object')",
110 'Window.openDatabase': [
111 "@Creates('SqlDatabase')",
113 'Window.showModalDialog': [
116 'Element.webkitGetRegionFlowRanges': [
117 "@Creates('JSExtendableArray')",
118 "@Returns('JSExtendableArray')",
120 'Element.getElementsByClassName': [
121 "@Creates('NodeList|HtmlCollection')",
122 "@Returns('NodeList|HtmlCollection')",
124 'Element.getElementsByName': [
125 "@Creates('NodeList|HtmlCollection')",
126 "@Returns('NodeList|HtmlCollection')",
128 'Element.getElementsByTagName': [
129 "@Creates('NodeList|HtmlCollection')",
130 "@Returns('NodeList|HtmlCollection')",
132 "ErrorEvent.error": [
138 'Event.currentTarget': [
140 "@Returns('EventTarget|=Object|Null')",
146 "@Returns('EventTarget|=Object')",
152 'ExtendableMessageEvent.data': [
153 "@annotation_Creates_SerializedScriptValue",
154 "@annotation_Returns_SerializedScriptValue",
159 'ExtendableMessageEvent.source': [
160 "@Creates('Client|ServiceWorker|MessagePort')",
161 "@Returns('Client|ServiceWorker|MessagePort|Null')",
163 'File.lastModifiedDate': [
166 'FocusEvent.relatedTarget': [
170 "@Creates('JSExtendableArray|GamepadButton')",
171 "@Returns('JSExtendableArray')",
175 'Geolocation.getCurrentPosition': [
176 "@Creates('Geoposition')",
177 "@Creates('PositionError')",
179 'Geolocation.watchPosition': [
180 "@Creates('Geoposition')",
181 "@Creates('PositionError')",
183 'HTMLCanvasElement.getContext': [
184 "@Creates('CanvasRenderingContext2D|RenderingContext|RenderingContext2')",
185 "@Returns('CanvasRenderingContext2D|RenderingContext|RenderingContext2|Null')",
187 'HTMLInputElement.valueAsDate': [
195 'IDBRequest.result': [
"@Creates('Null')"],
199 'IDBRequest.source': [
"@Creates('Null')"],
200 'IDBFactory.open': [
"@Creates('Database')"],
201 'IDBFactory.webkitGetDatabaseNames': [
"@Creates('DomStringList')"],
202 'IDBObjectStore.put': [
"@_annotation_Creates_IDBKey"],
203 'IDBObjectStore.add': [
"@_annotation_Creates_IDBKey"],
204 'IDBObjectStore.get': [
"@annotation_Creates_SerializedScriptValue"],
205 'IDBObjectStore.openCursor': [
"@Creates('Cursor')"],
206 'IDBIndex.get': [
"@annotation_Creates_SerializedScriptValue"],
208 "@annotation_Creates_SerializedScriptValue",
210 "@Creates('ObjectStore')",
212 'IDBIndex.openCursor': [
"@Creates('Cursor')"],
213 'IDBIndex.openKeyCursor': [
"@Creates('Cursor')"],
214 'IDBCursorWithValue.value': [
215 '@annotation_Creates_SerializedScriptValue',
216 '@annotation_Returns_SerializedScriptValue',
219 "@_annotation_Creates_IDBKey",
220 "@_annotation_Returns_IDBKey",
222 'IDBCursor.primaryKey': [
223 "@_annotation_Creates_IDBKey",
224 "@_annotation_Returns_IDBKey",
226 'IDBCursor.source': [
228 "@Returns('ObjectStore|Index|Null')",
230 'IDBDatabase.version': [
231 "@Creates('int|String|Null')",
232 "@Returns('int|String|Null')",
234 'IDBIndex.keyPath': [
235 "@annotation_Creates_SerializedScriptValue",
237 'IDBKeyRange.lower': [
238 "@annotation_Creates_SerializedScriptValue",
240 'IDBKeyRange.upper': [
241 "@annotation_Creates_SerializedScriptValue",
243 'IDBObjectStore.keyPath': [
244 "@annotation_Creates_SerializedScriptValue",
246 '+IDBOpenDBRequest': [
247 "@Returns('Request')",
248 "@Creates('Request')",
251 "@Returns('Request')",
252 "@Creates('Request')",
254 'IDBVersionChangeEvent.newVersion': [
255 "@Creates('int|String|Null')",
256 "@Returns('int|String|Null')",
258 'IDBVersionChangeEvent.oldVersion': [
259 "@Creates('int|String|Null')",
260 "@Returns('int|String|Null')",
263 "@Creates('NativeUint8ClampedList')",
264 "@Returns('NativeUint8ClampedList')",
266 'MediaStream.getAudioTracks': [
267 "@Creates('JSExtendableArray|MediaStreamTrack')",
268 "@Returns('JSExtendableArray')",
270 'MediaStream.getVideoTracks': [
271 "@Creates('JSExtendableArray|MediaStreamTrack')",
272 "@Returns('JSExtendableArray')",
274 'MessageEvent.data': [
275 "@annotation_Creates_SerializedScriptValue",
276 "@annotation_Returns_SerializedScriptValue",
278 'MessageEvent.ports': [
"@Creates('JSExtendableArray')"],
279 'MessageEvent.source': [
281 "@Returns('EventTarget|=Object')",
283 'Metadata.modificationTime': [
286 'MouseEvent.relatedTarget': [
288 "@Returns('EventTarget|=Object|Null')",
290 'Notification.data': [
291 "@annotation_Creates_SerializedScriptValue",
292 "@annotation_Returns_SerializedScriptValue",
294 'PopStateEvent.state': [
295 "@annotation_Creates_SerializedScriptValue",
296 "@annotation_Returns_SerializedScriptValue",
298 'RTCStatsReport.timestamp': [
301 'SerializedScriptValue': [
302 "@annotation_Creates_SerializedScriptValue",
303 "@annotation_Returns_SerializedScriptValue",
305 'ServiceWorkerMessageEvent.data': [
306 "@annotation_Creates_SerializedScriptValue",
307 "@annotation_Returns_SerializedScriptValue",
309 'ServiceWorkerMessageEvent.source': [
311 "@Returns('ServiceWorker|MessagePort')",
313 'ShadowRoot.getElementsByClassName': [
314 "@Creates('NodeList|HtmlCollection')",
315 "@Returns('NodeList|HtmlCollection')",
317 'ShadowRoot.getElementsByName': [
318 "@Creates('NodeList|HtmlCollection')",
319 "@Returns('NodeList|HtmlCollection')",
321 'ShadowRoot.getElementsByTagName': [
322 "@Creates('NodeList|HtmlCollection')",
323 "@Returns('NodeList|HtmlCollection')",
328 "@Creates('Element|Document')",
329 "@Returns('Element|Document')",
331 'TrackEvent.track': [
336 "@Returns('num|String')",
340 "@Returns('num|String')",
342 'WebGLRenderingContext.getBufferParameter': [
343 "@Creates('int|Null')",
344 "@Returns('int|Null')",
346 'WebGLRenderingContext.getFramebufferAttachmentParameter': [
347 "@Creates('int|Renderbuffer|Texture|Null')",
348 "@Returns('int|Renderbuffer|Texture|Null')",
350 'WebGLRenderingContext.getProgramParameter': [
351 "@Creates('int|bool|Null')",
352 "@Returns('int|bool|Null')",
354 'WebGLRenderingContext.getRenderbufferParameter': [
355 "@Creates('int|Null')",
356 "@Returns('int|Null')",
358 'WebGLRenderingContext.getShaderParameter': [
359 "@Creates('int|bool|Null')",
360 "@Returns('int|bool|Null')",
362 'WebGLRenderingContext.getTexParameter': [
363 "@Creates('int|Null')",
364 "@Returns('int|Null')",
366 'WebGLRenderingContext.getUniform': [
367 "@Creates('Null|num|String|bool|JSExtendableArray|"
368 "NativeFloat32List|NativeInt32List|NativeUint32List')",
369 "@Returns('Null|num|String|bool|JSExtendableArray|"
370 "NativeFloat32List|NativeInt32List|NativeUint32List')",
372 'WebGLRenderingContext.getVertexAttrib': [
373 "@Creates('Null|num|bool|NativeFloat32List|Buffer')",
374 "@Returns('Null|num|bool|NativeFloat32List|Buffer')",
376 'WebGLRenderingContext.getParameter': [
379 "@Creates('Null|num|String|bool|JSExtendableArray|"
380 "NativeFloat32List|NativeInt32List|NativeUint32List|"
381 "Framebuffer|Renderbuffer|Texture')",
382 "@Returns('Null|num|String|bool|JSExtendableArray|"
383 "NativeFloat32List|NativeInt32List|NativeUint32List|"
384 "Framebuffer|Renderbuffer|Texture')",
386 'WebGLRenderingContext.getContextAttributes': [
387 "@Creates('ContextAttributes|Null')",
389 'XMLHttpRequest.response': [
390 "@Creates('NativeByteBuffer|Blob|Document|=Object|JSExtendableArray"
396_blink_experimental_annotations = [
397 "@SupportedBrowser(SupportedBrowser.CHROME)",
400_indexed_db_annotations = [
401 "@SupportedBrowser(SupportedBrowser.CHROME)",
402 "@SupportedBrowser(SupportedBrowser.FIREFOX, '15')",
403 "@SupportedBrowser(SupportedBrowser.IE, '10')",
406_file_system_annotations = [
407 "@SupportedBrowser(SupportedBrowser.CHROME)",
410_all_but_ie9_annotations = [
411 "@SupportedBrowser(SupportedBrowser.CHROME)",
412 "@SupportedBrowser(SupportedBrowser.FIREFOX)",
413 "@SupportedBrowser(SupportedBrowser.IE, '10')",
414 "@SupportedBrowser(SupportedBrowser.SAFARI)",
417_history_annotations = _all_but_ie9_annotations
419_no_ie_annotations = [
420 "@SupportedBrowser(SupportedBrowser.CHROME)",
421 "@SupportedBrowser(SupportedBrowser.FIREFOX)",
422 "@SupportedBrowser(SupportedBrowser.SAFARI)",
425_performance_annotations = [
426 "@SupportedBrowser(SupportedBrowser.CHROME)",
427 "@SupportedBrowser(SupportedBrowser.FIREFOX)",
428 "@SupportedBrowser(SupportedBrowser.IE)",
432 "@SupportedBrowser(SupportedBrowser.CHROME)",
435_shadow_dom_annotations = [
436 "@SupportedBrowser(SupportedBrowser.CHROME, '26')",
439_speech_recognition_annotations = [
440 "@SupportedBrowser(SupportedBrowser.CHROME, '25')",
443_svg_annotations = _all_but_ie9_annotations
445_web_sql_annotations = [
446 "@SupportedBrowser(SupportedBrowser.CHROME)",
447 "@SupportedBrowser(SupportedBrowser.SAFARI)",
450_webgl_annotations = [
451 "@SupportedBrowser(SupportedBrowser.CHROME)",
452 "@SupportedBrowser(SupportedBrowser.FIREFOX)",
455_web_audio_annotations = _webgl_annotations
457_webkit_experimental_annotations = [
458 "@SupportedBrowser(SupportedBrowser.CHROME)",
459 "@SupportedBrowser(SupportedBrowser.SAFARI)",
467 'dartmetadata._annotations',
470 _shadow_dom_annotations,
472 _webkit_experimental_annotations,
474 _webkit_experimental_annotations,
476 _web_sql_annotations,
478 _web_sql_annotations,
479 'ApplicationCache': [
480 "@SupportedBrowser(SupportedBrowser.CHROME)",
481 "@SupportedBrowser(SupportedBrowser.FIREFOX)",
482 "@SupportedBrowser(SupportedBrowser.IE, '10')",
483 "@SupportedBrowser(SupportedBrowser.OPERA)",
484 "@SupportedBrowser(SupportedBrowser.SAFARI)",
486 'AudioBufferSourceNode':
487 _web_audio_annotations,
489 _web_audio_annotations,
491 _file_system_annotations,
493 _file_system_annotations,
495 _indexed_db_annotations,
496 'Window.openDatabase':
497 _web_sql_annotations,
498 'Window.performance':
499 _performance_annotations,
500 'Window.webkitNotifications':
501 _webkit_experimental_annotations,
502 'Window.webkitRequestFileSystem':
503 _file_system_annotations,
504 'Window.webkitResolveLocalFileSystemURL':
505 _file_system_annotations,
506 'Element.createShadowRoot': [
507 "@SupportedBrowser(SupportedBrowser.CHROME, '25')",
509 'Element.ontransitionend':
510 _all_but_ie9_annotations,
513 'Element.webkitMatchesSelector': [],
514 'Event.clipboardData': [
515 "@SupportedBrowser(SupportedBrowser.CHROME)",
516 "@SupportedBrowser(SupportedBrowser.FIREFOX)",
517 "@SupportedBrowser(SupportedBrowser.SAFARI)",
520 _all_but_ie9_annotations,
522 "@SupportedBrowser(SupportedBrowser.CHROME)",
523 "@SupportedBrowser(SupportedBrowser.FIREFOX)",
524 "@SupportedBrowser(SupportedBrowser.SAFARI)",
527 _history_annotations,
528 'History.replaceState':
529 _history_annotations,
530 'HTMLContentElement':
531 _shadow_dom_annotations,
532 'HTMLDataListElement':
533 _all_but_ie9_annotations,
534 'HTMLDetailsElement':
535 _webkit_experimental_annotations,
536 'HTMLEmbedElement': [
537 "@SupportedBrowser(SupportedBrowser.CHROME)",
538 "@SupportedBrowser(SupportedBrowser.IE)",
539 "@SupportedBrowser(SupportedBrowser.SAFARI)",
542 _webkit_experimental_annotations,
545 'HTMLObjectElement': [
546 "@SupportedBrowser(SupportedBrowser.CHROME)",
547 "@SupportedBrowser(SupportedBrowser.IE)",
548 "@SupportedBrowser(SupportedBrowser.SAFARI)",
552 'HTMLProgressElement':
553 _all_but_ie9_annotations,
555 _shadow_dom_annotations,
556 'HTMLTemplateElement':
557 _blink_experimental_annotations,
558 'HTMLTrackElement': [
559 "@SupportedBrowser(SupportedBrowser.CHROME)",
560 "@SupportedBrowser(SupportedBrowser.IE, '10')",
561 "@SupportedBrowser(SupportedBrowser.SAFARI)",
564 _indexed_db_annotations,
566 _indexed_db_annotations,
573 'MediaStreamTrackEvent':
579 "@SupportedBrowser(SupportedBrowser.CHROME)",
580 "@SupportedBrowser(SupportedBrowser.IE, '11')",
582 'MutationObserver': [
583 "@SupportedBrowser(SupportedBrowser.CHROME)",
584 "@SupportedBrowser(SupportedBrowser.FIREFOX)",
585 "@SupportedBrowser(SupportedBrowser.SAFARI)",
588 _performance_annotations,
590 _history_annotations,
595 'RTCSessionDescription':
598 _shadow_dom_annotations,
600 _speech_recognition_annotations,
601 'SpeechRecognitionAlternative':
602 _speech_recognition_annotations,
603 'SpeechRecognitionError':
604 _speech_recognition_annotations,
605 'SpeechRecognitionEvent':
606 _speech_recognition_annotations,
607 'SpeechRecognitionResult':
608 _speech_recognition_annotations,
609 'SVGAltGlyphElement':
613 'SVGAnimateMotionElement':
615 'SVGAnimateTransformElement':
619 'SVGFEColorMatrixElement':
621 'SVGFEComponentTransferElement':
623 'SVGFEConvolveMatrixElement':
625 'SVGFEDiffuseLightingElement':
627 'SVGFEDisplacementMapElement':
629 'SVGFEDistantLightElement':
641 'SVGFEGaussianBlurElement':
647 'SVGFEMergeNodeElement':
649 'SVGFEMorphologyElement':
651 'SVGFEOffsetElement':
653 'SVGFEPointLightElement':
655 'SVGFESpecularLightingElement':
657 'SVGFESpotLightElement':
661 'SVGFETurbulenceElement':
665 'SVGForeignObjectElement':
670 _web_sql_annotations,
671 'SQLTransactionSync':
672 _web_sql_annotations,
673 'WebGLRenderingContext':
676 _all_but_ie9_annotations,
678 _all_but_ie9_annotations,
679 'XMLHttpRequest.overrideMimeType':
681 'XMLHttpRequest.response':
682 _all_but_ie9_annotations,
683 'XMLHttpRequestEventTarget.onloadend':
684 _all_but_ie9_annotations,
685 'XMLHttpRequestEventTarget.onprogress':
686 _all_but_ie9_annotations,
688 "@SupportedBrowser(SupportedBrowser.CHROME)",
689 "@SupportedBrowser(SupportedBrowser.FIREFOX)",
690 "@SupportedBrowser(SupportedBrowser.SAFARI)",
695_monitor_type_metadata =
False
698class DartMetadata(object):
703 logging_level=logging.WARNING):
704 _logger.setLevel(logging_level)
705 self._api_status_path = api_status_path
706 status_file = open(self._api_status_path,
'r+')
707 self._types = json.load(status_file)
710 comments_file = open(doc_comments_path,
'r+')
711 self._doc_comments = json.load(comments_file)
712 comments_file.close()
714 if _monitor_type_metadata:
715 monitored_interfaces = {}
716 for interface_id, interface_data
in list(self._types.items()):
717 monitored_interface = interface_data.copy()
719 'dartmetadata.%s' % interface_id, interface_data[
'members'])
721 monitored_interfaces[interface_id] = monitored_interface
724 'dartmetadata._monitored_types', monitored_interfaces)
726 self._monitored_types = self._types
728 def GetFormattedMetadata(self,
733 """ Gets all comments and annotations for an interface or member.
735 return self.FormatMetadata(
736 self.GetMetadata(library_name, interface, member_id), indentation)
738 def GetMetadata(self,
742 source_member_name=None):
743 """ Gets all comments and annotations for an interface or member.
746 source_member_name: If the member is dependent on a different member
747 then this
is used to apply the support annotations
from the other
750 annotations = self._GetComments(library_name, interface, member_name)
751 annotations = annotations + self._GetCommonAnnotations(
752 interface, member_name, source_member_name)
756 def GetDart2JSMetadata(
763 """ Gets all annotations for Dart2JS members- including annotations for
764 both dart2js and dartium.
766 annotations = self.GetMetadata(library_name, interface, member_name)
768 ann2 = self._GetDart2JSSpecificAnnotations(idl_type, interface.id,
772 annotations.extend(ann2)
777 def IsSuppressed(self, interface, member_name):
778 annotations = self._GetSupportLevelAnnotations(interface.id,
781 annotation.startswith(
'@removed')
for annotation
in annotations)
783 def _GetCommonAnnotations(self,
786 source_member_name=None):
789 key =
'%s.%s' % (interface.id, member_name)
790 dom_name =
'%s.%s' % (interface.javascript_binding_name,
793 if member_name ==
'dblclickEvent' or member_name ==
'ondblclick':
794 annotations.append(
"@DomName('" + dom_name +
"')")
798 if key
in _annotations:
799 annotations.extend(_annotations[key])
801 if (
not member_name
and
802 interface.javascript_binding_name.startswith(
'WebKit')
and
803 interface.id
not in html_interface_renames):
804 annotations.extend(_webkit_experimental_annotations)
806 if (member_name
and member_name.startswith(
'webkit')
and
807 key
not in renamed_html_members):
808 annotations.extend(_webkit_experimental_annotations)
810 if source_member_name:
811 member_name = source_member_name
813 support_annotations = self._GetSupportLevelAnnotations(
814 interface.id, member_name)
816 for annotation
in support_annotations:
817 if annotation
not in annotations:
818 annotations.append(annotation)
822 def _GetComments(self, library_name, interface, member_name=None):
823 """ Gets all comments for the interface or member and returns a list. """
827 library_name =
'dart.dom.%s' % library_name
828 if library_name
in self._doc_comments:
829 library_info = self._doc_comments[library_name]
830 if interface.id
in library_info:
831 interface_info = library_info[interface.id]
833 if 'members' in interface_info
and member_name
in interface_info[
835 comments = interface_info[
'members'][member_name]
836 elif 'comment' in interface_info:
837 comments = interface_info[
'comment']
840 comments = [
'\n'.
join(comments)]
844 def AnyConversionAnnotations(self, idl_type, interface_name, member_name):
845 if (_annotations.get(
'%s.%s' % (interface_name, member_name))
or
846 self._GetDart2JSSpecificAnnotations(idl_type, interface_name,
852 def FormatMetadata(self, metadata, indentation):
854 newline =
'\n%s' % indentation
855 result = newline.join(metadata) + newline
859 def _GetDart2JSSpecificAnnotations(self, idl_type, interface_name,
861 """ Finds dart2js-specific annotations. This does not include ones shared with
864 ann1 = _dart2js_annotations.get("%s.%s" % (interface_name, member_name))
866 ann2 = _dart2js_annotations.get(
'+' + idl_type)
869 ann2 = _dart2js_annotations.get(idl_type)
874 ann2 = _dart2js_annotations.get(
'-' + idl_type)
877 ann2 = _dart2js_annotations.get(idl_type)
880 def _GetSupportInfo(self, interface_id, member_id=None):
881 """ Looks up the interface or member in the DOM status list and returns the
882 support level for it.
884 if interface_id
in self._monitored_types:
885 type_info = self._monitored_types[interface_id]
889 'support_level':
'untriaged',
891 self._types[interface_id] = type_info
896 members = type_info[
'members']
898 if member_id
in members:
899 member_info = members[member_id]
901 if member_id == interface_id:
904 member_info = {
'support_level':
'untriaged'}
905 members[member_id] = member_info
909 def _GetSupportLevelAnnotations(self, interface_id, member_id=None):
910 """ Gets annotations for API support status.
912 support_info = self._GetSupportInfo(interface_id, member_id)
914 dart_action = support_info.get('dart_action')
915 support_level = support_info.get(
'support_level')
916 comment = support_info.get(
'comment')
924 if dart_action ==
'unstable':
925 annotations.append(
'@Unstable()')
926 elif dart_action ==
'suppress':
928 annotations.append(
'// %s' % comment)
929 anAnnotation =
'deprecated'
931 anAnnotation =
'removed'
932 annotations.append(
'@%s // %s' % (anAnnotation, support_level))
934 elif dart_action ==
'stable':
938 'Unknown dart_action - %s:%s' % (interface_id, member_id))
939 elif support_level ==
'stable':
941 elif support_level ==
'deprecated':
943 annotations.append(
'// %s' % comment)
944 annotations.append(
'@deprecated')
945 elif support_level
is None:
949 'Unknown support_level - %s:%s' % (interface_id, member_id))
954 json_file = open(self._api_status_path,
'w+')
959 separators=(
',',
': '),
void Flush(SkSurface *surface)
SIT bool any(const Vec< 1, T > &x)
static SkString join(const CommandLineFlags::StringArray &)