OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 import 'package:analyzer/dart/element/element.dart' show Element; | 5 import 'dart:collection'; |
6 import 'package:analyzer/dart/element/visitor.dart' | 6 import 'package:analyzer/dart/element/element.dart' |
7 show GeneralizingElementVisitor; | 7 show ClassElement, CompilationUnitElement, Element; |
8 import 'package:collection/collection.dart' show binarySearch; | 8 import 'package:analyzer/dart/element/type.dart' show DartType, InterfaceType; |
| 9 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; |
9 | 10 |
10 class ExtensionTypeSet extends GeneralizingElementVisitor { | 11 /// Contains information about native JS types (those types provided by the |
11 bool contains(Element element) { | 12 /// implementation) that are also provided by the Dart SDK. |
12 var library = element?.library; | 13 /// |
13 if (library == null) return false; | 14 /// For types provided by JavaScript, it is important that we don't add methods |
| 15 /// directly to those types. Instead, we must call through a special set of |
| 16 /// JS Symbol names, that are used for the "Dart extensions". For example: |
| 17 /// |
| 18 /// // Dart |
| 19 /// Iterable iter = myList; |
| 20 /// print(iter.first); |
| 21 /// |
| 22 /// // JS |
| 23 /// let iter = myLib.myList; |
| 24 /// core.print(iter[dartx.first]); |
| 25 /// |
| 26 /// This will provide the [Iterable.first] property, without needing to add |
| 27 /// `first` to the `Array.prototype`. |
| 28 class ExtensionTypeSet { |
| 29 final AnalysisContext _context; |
14 | 30 |
15 var source = library.source; | 31 // Abstract types that may be implemented by both native and non-native |
16 if (source.isInSystemLibrary) { | 32 // classes. |
17 var types = _extensionTypes[source.uri.toString()]; | 33 final _extensibleTypes = new HashSet<ClassElement>(); |
18 if (types != null) { | 34 |
19 int index = binarySearch(types, element.name); | 35 // Concrete native types. |
20 return index >= 0; | 36 final _nativeTypes = new HashSet<ClassElement>(); |
| 37 final _pendingLibraries = new HashSet<String>(); |
| 38 |
| 39 ExtensionTypeSet(this._context) { |
| 40 // TODO(vsm): Eventually, we want to make this extensible - i.e., find |
| 41 // annotations in user code as well. It would need to be summarized in |
| 42 // the element model - not searched this way on every compile. To make this |
| 43 // a little more efficient now, we do this in two phases. |
| 44 |
| 45 // First, core types: |
| 46 // TODO(vsm): If we're analyzing against the main SDK, those |
| 47 // types are not explicitly annotated. |
| 48 var types = _context.typeProvider; |
| 49 _addExtensionType(types.intType, true); |
| 50 _addExtensionType(types.doubleType, true); |
| 51 _addExtensionType(types.boolType, true); |
| 52 _addExtensionType(types.stringType, true); |
| 53 _addExtensionTypes('dart:_interceptors'); |
| 54 _addExtensionTypes('dart:_native_typed_data'); |
| 55 |
| 56 // These are used natively by dart:html but also not annotated. |
| 57 _addExtensionTypesForLibrary('dart:core', ['Comparable', 'Map']); |
| 58 _addExtensionTypesForLibrary('dart:collection', ['ListMixin']); |
| 59 _addExtensionTypesForLibrary('dart:math', ['Rectangle']); |
| 60 |
| 61 // Second, html types - these are only searched if we use dart:html, etc.: |
| 62 _addPendingExtensionTypes('dart:html'); |
| 63 _addPendingExtensionTypes('dart:indexed_db'); |
| 64 _addPendingExtensionTypes('dart:svg'); |
| 65 _addPendingExtensionTypes('dart:web_audio'); |
| 66 _addPendingExtensionTypes('dart:web_gl'); |
| 67 _addPendingExtensionTypes('dart:web_sql'); |
| 68 } |
| 69 |
| 70 void _visitCompilationUnit(CompilationUnitElement unit) { |
| 71 unit.types.forEach(_visitClass); |
| 72 } |
| 73 |
| 74 void _visitClass(ClassElement element) { |
| 75 if (_isNative(element)) { |
| 76 _addExtensionType(element.type, true); |
| 77 } |
| 78 } |
| 79 |
| 80 bool _isNative(ClassElement element) { |
| 81 for (var metadata in element.metadata) { |
| 82 var e = metadata.element?.enclosingElement; |
| 83 if (e.name == 'Native' || e.name == 'JsPeerInterface') { |
| 84 if (e.source.isInSystemLibrary) return true; |
21 } | 85 } |
22 } | 86 } |
23 return false; | 87 return false; |
24 } | 88 } |
25 | 89 |
26 // TODO(vsm): Eventually, we want to make this extensible - i.e., find | 90 void _addExtensionType(InterfaceType t, [bool mustBeNative = false]) { |
27 // annotations in user code as well. It would need to be summarized in | 91 if (t.isObject) return; |
28 // the element model - not searched this way on every compile. To make this | 92 var element = t.element; |
29 // a little more efficient now, we do this in two phases. | 93 if (_extensibleTypes.contains(element) || _nativeTypes.contains(element)) { |
30 final _extensionTypes = { | 94 return; |
31 'dart:_interceptors': [ | 95 } |
32 'Interceptor', | 96 bool isNative = mustBeNative || _isNative(element); |
33 'JSArray', | 97 if (isNative) { |
34 'JSBool', | 98 _nativeTypes.add(element); |
35 'JSIndexable', | 99 } else { |
36 'JSMutableIndexable', | 100 _extensibleTypes.add(element); |
37 'JSNumber', | 101 } |
38 'JSString' | 102 element.interfaces.forEach(_addExtensionType); |
39 ], | 103 element.mixins.forEach(_addExtensionType); |
40 'dart:_internal': ['FixedLengthListMixin'], | 104 _addExtensionType(element.supertype); |
41 'dart:_js_helper': ['JavaScriptIndexingBehavior'], | 105 } |
42 'dart:_native_typed_data': [ | 106 |
43 'NativeByteBuffer', | 107 void _addExtensionTypesForLibrary(String libraryUri, List<String> typeNames) { |
44 'NativeByteData', | 108 var sourceFactory = _context.sourceFactory.forUri(libraryUri); |
45 'NativeFloat32List', | 109 var library = _context.computeLibraryElement(sourceFactory); |
46 'NativeFloat64List', | 110 for (var typeName in typeNames) { |
47 'NativeInt16List', | 111 _addExtensionType(library.getType(typeName).type); |
48 'NativeInt32List', | 112 } |
49 'NativeInt8List', | 113 } |
50 'NativeTypedArray', | 114 |
51 'NativeTypedArrayOfDouble', | 115 void _addExtensionTypes(String libraryUri) { |
52 'NativeTypedArrayOfInt', | 116 var sourceFactory = _context.sourceFactory.forUri(libraryUri); |
53 'NativeTypedData', | 117 var library = _context.computeLibraryElement(sourceFactory); |
54 'NativeUint16List', | 118 _visitCompilationUnit(library.definingCompilationUnit); |
55 'NativeUint32List', | 119 library.parts.forEach(_visitCompilationUnit); |
56 'NativeUint8ClampedList', | 120 } |
57 'NativeUint8List' | 121 |
58 ], | 122 void _addPendingExtensionTypes(String libraryUri) { |
59 'dart:collection': ['ListMixin'], | 123 _pendingLibraries.add(libraryUri); |
60 'dart:core': [ | 124 } |
61 'Comparable', | 125 |
62 'Iterable', | 126 bool _processPending(Element element) { |
63 'List', | 127 if (_pendingLibraries.isEmpty) return false; |
64 'Map', | 128 if (element is ClassElement) { |
65 'Pattern', | 129 var uri = element.library.source.uri.toString(); |
66 'String', | 130 if (_pendingLibraries.contains(uri)) { |
67 'bool', | 131 // Load all pending libraries |
68 'double', | 132 _pendingLibraries.forEach(_addExtensionTypes); |
69 'int', | 133 _pendingLibraries.clear(); |
70 'num' | 134 return true; |
71 ], | 135 } |
72 'dart:indexed_db': [ | 136 } |
73 'Cursor', | 137 return false; |
74 'CursorWithValue', | 138 } |
75 'Database', | 139 |
76 'IdbFactory', | 140 bool _setContains(HashSet<ClassElement> set, Element element) { |
77 'Index', | 141 return set.contains(element) || |
78 'KeyRange', | 142 _processPending(element) && set.contains(element); |
79 'ObjectStore', | 143 } |
80 'OpenDBRequest', | 144 |
81 'Request', | 145 bool isNativeClass(Element element) => _setContains(_nativeTypes, element); |
82 'Transaction', | 146 |
83 'VersionChangeEvent' | 147 bool _isNativeInterface(Element element) => |
84 ], | 148 _setContains(_extensibleTypes, element); |
85 'dart:math': ['Rectangle', '_RectangleBase'], | 149 |
86 'dart:typed_data': [ | 150 bool hasNativeSubtype(DartType type) => |
87 'ByteBuffer', | 151 _isNativeInterface(type.element) || isNativeClass(type.element); |
88 'ByteData', | 152 |
89 'Float32List', | 153 /// Collects all supertypes that may themselves contain native subtypes, |
90 'Float64List', | 154 /// excluding [Object], for example `List` is implemented by several native |
91 'Int16List', | 155 /// types. |
92 'Int32List', | 156 LinkedHashSet<ClassElement> collectNativeInterfaces(ClassElement element) { |
93 'Int8List', | 157 var types = new LinkedHashSet<ClassElement>(); |
94 'TypedData', | 158 _collectNativeInterfaces(element.type, types); |
95 'Uint16List', | 159 return types; |
96 'Uint32List', | 160 } |
97 'Uint8ClampedList', | 161 |
98 'Uint8List' | 162 void _collectNativeInterfaces(InterfaceType type, Set<ClassElement> types) { |
99 ], | 163 if (type.isObject) return; |
100 'dart:html': [ | 164 var element = type.element; |
101 'AbstractWorker', | 165 if (_isNativeInterface(element)) types.add(element); |
102 'AnchorElement', | 166 for (var m in element.mixins.reversed) { |
103 'Animation', | 167 _collectNativeInterfaces(m, types); |
104 'AnimationEffect', | 168 } |
105 'AnimationEvent', | 169 for (var i in element.interfaces) { |
106 'AnimationNode', | 170 _collectNativeInterfaces(i, types); |
107 'AnimationPlayer', | 171 } |
108 'AnimationPlayerEvent', | 172 _collectNativeInterfaces(element.supertype, types); |
109 'AnimationTimeline', | 173 } |
110 'ApplicationCache', | |
111 'ApplicationCacheErrorEvent', | |
112 'AreaElement', | |
113 'AudioElement', | |
114 'AudioTrack', | |
115 'AudioTrackList', | |
116 'AutocompleteErrorEvent', | |
117 'BRElement', | |
118 'BarProp', | |
119 'BaseElement', | |
120 'BatteryManager', | |
121 'BeforeUnloadEvent', | |
122 'Blob', | |
123 'Body', | |
124 'BodyElement', | |
125 'ButtonElement', | |
126 'ButtonInputElement', | |
127 'CDataSection', | |
128 'CacheStorage', | |
129 'Canvas2DContextAttributes', | |
130 'CanvasElement', | |
131 'CanvasGradient', | |
132 'CanvasImageSource', | |
133 'CanvasPattern', | |
134 'CanvasRenderingContext', | |
135 'CanvasRenderingContext2D', | |
136 'CharacterData', | |
137 'CheckboxInputElement', | |
138 'ChildNode', | |
139 'CircularGeofencingRegion', | |
140 'CloseEvent', | |
141 'Comment', | |
142 'CompositionEvent', | |
143 'ConsoleBase', | |
144 'ContentElement', | |
145 'Coordinates', | |
146 'Credential', | |
147 'CredentialsContainer', | |
148 'Crypto', | |
149 'CryptoKey', | |
150 'Css', | |
151 'CssCharsetRule', | |
152 'CssFilterRule', | |
153 'CssFontFaceRule', | |
154 'CssImportRule', | |
155 'CssKeyframeRule', | |
156 'CssKeyframesRule', | |
157 'CssMediaRule', | |
158 'CssPageRule', | |
159 'CssRule', | |
160 'CssStyleDeclaration', | |
161 'CssStyleDeclarationBase', | |
162 'CssStyleRule', | |
163 'CssStyleSheet', | |
164 'CssSupportsRule', | |
165 'CssViewportRule', | |
166 'CustomEvent', | |
167 'DListElement', | |
168 'DataListElement', | |
169 'DataTransfer', | |
170 'DataTransferItem', | |
171 'DataTransferItemList', | |
172 'DateInputElement', | |
173 'DedicatedWorkerGlobalScope', | |
174 'DeprecatedStorageInfo', | |
175 'DeprecatedStorageQuota', | |
176 'DetailsElement', | |
177 'DeviceAcceleration', | |
178 'DeviceLightEvent', | |
179 'DeviceMotionEvent', | |
180 'DeviceOrientationEvent', | |
181 'DeviceRotationRate', | |
182 'DialogElement', | |
183 'DirectoryEntry', | |
184 'DirectoryReader', | |
185 'DivElement', | |
186 'Document', | |
187 'DocumentFragment', | |
188 'DomError', | |
189 'DomException', | |
190 'DomImplementation', | |
191 'DomIterator', | |
192 'DomMatrix', | |
193 'DomMatrixReadOnly', | |
194 'DomParser', | |
195 'DomPoint', | |
196 'DomPointReadOnly', | |
197 'DomRectReadOnly', | |
198 'DomSettableTokenList', | |
199 'DomStringList', | |
200 'DomTokenList', | |
201 'Element', | |
202 'EmailInputElement', | |
203 'EmbedElement', | |
204 'Entry', | |
205 'ErrorEvent', | |
206 'Event', | |
207 'EventSource', | |
208 'EventTarget', | |
209 'ExtendableEvent', | |
210 'FederatedCredential', | |
211 'FetchEvent', | |
212 'FieldSetElement', | |
213 'File', | |
214 'FileEntry', | |
215 'FileError', | |
216 'FileList', | |
217 'FileReader', | |
218 'FileStream', | |
219 'FileSystem', | |
220 'FileUploadInputElement', | |
221 'FileWriter', | |
222 'FocusEvent', | |
223 'FontFace', | |
224 'FontFaceSet', | |
225 'FontFaceSetLoadEvent', | |
226 'FormData', | |
227 'FormElement', | |
228 'Gamepad', | |
229 'GamepadButton', | |
230 'GamepadEvent', | |
231 'Geofencing', | |
232 'GeofencingRegion', | |
233 'Geolocation', | |
234 'Geoposition', | |
235 'GlobalEventHandlers', | |
236 'HRElement', | |
237 'HashChangeEvent', | |
238 'HeadElement', | |
239 'Headers', | |
240 'HeadingElement', | |
241 'HiddenInputElement', | |
242 'History', | |
243 'HistoryBase', | |
244 'HtmlCollection', | |
245 'HtmlDocument', | |
246 'HtmlElement', | |
247 'HtmlFormControlsCollection', | |
248 'HtmlHtmlElement', | |
249 'HtmlOptionsCollection', | |
250 'HttpRequest', | |
251 'HttpRequestEventTarget', | |
252 'HttpRequestUpload', | |
253 'IFrameElement', | |
254 'ImageBitmap', | |
255 'ImageButtonInputElement', | |
256 'ImageData', | |
257 'ImageElement', | |
258 'ImmutableListMixin', | |
259 'InjectedScriptHost', | |
260 'InputElement', | |
261 'InputElementBase', | |
262 'InputMethodContext', | |
263 'InstallEvent', | |
264 'KeyboardEvent', | |
265 'KeygenElement', | |
266 'LIElement', | |
267 'LabelElement', | |
268 'LegendElement', | |
269 'LinkElement', | |
270 'LocalCredential', | |
271 'LocalDateTimeInputElement', | |
272 'Location', | |
273 'LocationBase', | |
274 'MapElement', | |
275 'MediaController', | |
276 'MediaDeviceInfo', | |
277 'MediaElement', | |
278 'MediaError', | |
279 'MediaKeyError', | |
280 'MediaKeyEvent', | |
281 'MediaKeyMessageEvent', | |
282 'MediaKeyNeededEvent', | |
283 'MediaKeySession', | |
284 'MediaKeys', | |
285 'MediaList', | |
286 'MediaQueryList', | |
287 'MediaQueryListEvent', | |
288 'MediaSource', | |
289 'MediaStream', | |
290 'MediaStreamEvent', | |
291 'MediaStreamTrack', | |
292 'MediaStreamTrackEvent', | |
293 'MemoryInfo', | |
294 'MenuElement', | |
295 'MenuItemElement', | |
296 'MessageChannel', | |
297 'MessageEvent', | |
298 'MessagePort', | |
299 'MetaElement', | |
300 'Metadata', | |
301 'MeterElement', | |
302 'MidiAccess', | |
303 'MidiConnectionEvent', | |
304 'MidiInput', | |
305 'MidiInputMap', | |
306 'MidiMessageEvent', | |
307 'MidiOutput', | |
308 'MidiOutputMap', | |
309 'MidiPort', | |
310 'MimeType', | |
311 'MimeTypeArray', | |
312 'ModElement', | |
313 'MonthInputElement', | |
314 'MouseEvent', | |
315 'MutationObserver', | |
316 'MutationRecord', | |
317 'Navigator', | |
318 'NavigatorCpu', | |
319 'NavigatorID', | |
320 'NavigatorLanguage', | |
321 'NavigatorOnLine', | |
322 'NavigatorUserMediaError', | |
323 'NetworkInformation', | |
324 'Node', | |
325 'NodeFilter', | |
326 'NodeIterator', | |
327 'NodeList', | |
328 'Notification', | |
329 'NumberInputElement', | |
330 'OListElement', | |
331 'ObjectElement', | |
332 'OptGroupElement', | |
333 'OptionElement', | |
334 'OutputElement', | |
335 'OverflowEvent', | |
336 'PageTransitionEvent', | |
337 'ParagraphElement', | |
338 'ParamElement', | |
339 'ParentNode', | |
340 'PasswordInputElement', | |
341 'Path2D', | |
342 'Performance', | |
343 'PerformanceEntry', | |
344 'PerformanceMark', | |
345 'PerformanceMeasure', | |
346 'PerformanceNavigation', | |
347 'PerformanceResourceTiming', | |
348 'PerformanceTiming', | |
349 'PictureElement', | |
350 'Plugin', | |
351 'PluginArray', | |
352 'PluginPlaceholderElement', | |
353 'PopStateEvent', | |
354 'PositionError', | |
355 'PreElement', | |
356 'Presentation', | |
357 'ProcessingInstruction', | |
358 'ProgressElement', | |
359 'ProgressEvent', | |
360 'PushEvent', | |
361 'PushManager', | |
362 'PushRegistration', | |
363 'QuoteElement', | |
364 'RadioButtonInputElement', | |
365 'Range', | |
366 'RangeInputElement', | |
367 'RangeInputElementBase', | |
368 'ReadableStream', | |
369 'RelatedEvent', | |
370 'ResetButtonInputElement', | |
371 'ResourceProgressEvent', | |
372 'RtcDataChannel', | |
373 'RtcDataChannelEvent', | |
374 'RtcDtmfSender', | |
375 'RtcDtmfToneChangeEvent', | |
376 'RtcIceCandidate', | |
377 'RtcIceCandidateEvent', | |
378 'RtcPeerConnection', | |
379 'RtcSessionDescription', | |
380 'RtcStatsReport', | |
381 'RtcStatsResponse', | |
382 'Screen', | |
383 'ScreenOrientation', | |
384 'ScriptElement', | |
385 'SearchInputElement', | |
386 'SecurityPolicyViolationEvent', | |
387 'SelectElement', | |
388 'Selection', | |
389 'ServiceWorkerClient', | |
390 'ServiceWorkerClients', | |
391 'ServiceWorkerContainer', | |
392 'ServiceWorkerGlobalScope', | |
393 'ServiceWorkerRegistration', | |
394 'ShadowElement', | |
395 'ShadowRoot', | |
396 'SharedWorker', | |
397 'SharedWorkerGlobalScope', | |
398 'SourceBuffer', | |
399 'SourceBufferList', | |
400 'SourceElement', | |
401 'SourceInfo', | |
402 'SpanElement', | |
403 'SpeechGrammar', | |
404 'SpeechGrammarList', | |
405 'SpeechRecognition', | |
406 'SpeechRecognitionAlternative', | |
407 'SpeechRecognitionError', | |
408 'SpeechRecognitionEvent', | |
409 'SpeechRecognitionResult', | |
410 'SpeechSynthesis', | |
411 'SpeechSynthesisEvent', | |
412 'SpeechSynthesisUtterance', | |
413 'SpeechSynthesisVoice', | |
414 'Storage', | |
415 'StorageEvent', | |
416 'StorageInfo', | |
417 'StorageQuota', | |
418 'StyleElement', | |
419 'StyleMedia', | |
420 'StyleSheet', | |
421 'SubmitButtonInputElement', | |
422 'TableCaptionElement', | |
423 'TableCellElement', | |
424 'TableColElement', | |
425 'TableElement', | |
426 'TableRowElement', | |
427 'TableSectionElement', | |
428 'TelephoneInputElement', | |
429 'TemplateElement', | |
430 'Text', | |
431 'TextAreaElement', | |
432 'TextEvent', | |
433 'TextInputElement', | |
434 'TextInputElementBase', | |
435 'TextMetrics', | |
436 'TextTrack', | |
437 'TextTrackCue', | |
438 'TextTrackCueList', | |
439 'TextTrackList', | |
440 'TimeInputElement', | |
441 'TimeRanges', | |
442 'Timing', | |
443 'TitleElement', | |
444 'Touch', | |
445 'TouchEvent', | |
446 'TouchList', | |
447 'TrackElement', | |
448 'TrackEvent', | |
449 'TransitionEvent', | |
450 'TreeWalker', | |
451 'UIEvent', | |
452 'UListElement', | |
453 'UnknownElement', | |
454 'Url', | |
455 'UrlInputElement', | |
456 'UrlUtils', | |
457 'UrlUtilsReadOnly', | |
458 'ValidityState', | |
459 'VideoElement', | |
460 'VideoPlaybackQuality', | |
461 'VideoTrack', | |
462 'VideoTrackList', | |
463 'VttCue', | |
464 'VttRegion', | |
465 'VttRegionList', | |
466 'WebSocket', | |
467 'WeekInputElement', | |
468 'WheelEvent', | |
469 'Window', | |
470 'WindowBase', | |
471 'WindowBase64', | |
472 'WindowEventHandlers', | |
473 'Worker', | |
474 'WorkerConsole', | |
475 'WorkerGlobalScope', | |
476 'WorkerPerformance', | |
477 'XPathEvaluator', | |
478 'XPathExpression', | |
479 'XPathNSResolver', | |
480 'XPathResult', | |
481 'XmlDocument', | |
482 'XmlSerializer', | |
483 'XsltProcessor', | |
484 '_Attr', | |
485 '_CSSPrimitiveValue', | |
486 '_CSSUnknownRule', | |
487 '_CSSValue', | |
488 '_Cache', | |
489 '_CanvasPathMethods', | |
490 '_ClientRect', | |
491 '_ClientRectList', | |
492 '_Counter', | |
493 '_CssRuleList', | |
494 '_CssValueList', | |
495 '_DOMFileSystemSync', | |
496 '_DirectoryEntrySync', | |
497 '_DirectoryReaderSync', | |
498 '_DocumentType', | |
499 '_DomRect', | |
500 '_EntryArray', | |
501 '_EntrySync', | |
502 '_FileEntrySync', | |
503 '_FileReaderSync', | |
504 '_FileWriterSync', | |
505 '_GamepadList', | |
506 '_HTMLAllCollection', | |
507 '_HTMLAppletElement', | |
508 '_HTMLDirectoryElement', | |
509 '_HTMLFontElement', | |
510 '_HTMLFrameElement', | |
511 '_HTMLFrameSetElement', | |
512 '_HTMLMarqueeElement', | |
513 '_MutationEvent', | |
514 '_NamedNodeMap', | |
515 '_PagePopupController', | |
516 '_RGBColor', | |
517 '_Rect', | |
518 '_Request', | |
519 '_Response', | |
520 '_ServiceWorker', | |
521 '_SpeechRecognitionResultList', | |
522 '_StyleSheetList', | |
523 '_SubtleCrypto', | |
524 '_WebKitCSSFilterValue', | |
525 '_WebKitCSSMatrix', | |
526 '_WebKitCSSTransformValue', | |
527 '_WindowTimers', | |
528 '_WorkerLocation', | |
529 '_WorkerNavigator', | |
530 '_XMLHttpRequestProgressEvent' | |
531 ], | |
532 'dart:svg': [ | |
533 'AElement', | |
534 'AltGlyphElement', | |
535 'Angle', | |
536 'AnimateElement', | |
537 'AnimateMotionElement', | |
538 'AnimateTransformElement', | |
539 'AnimatedAngle', | |
540 'AnimatedBoolean', | |
541 'AnimatedEnumeration', | |
542 'AnimatedInteger', | |
543 'AnimatedLength', | |
544 'AnimatedLengthList', | |
545 'AnimatedNumber', | |
546 'AnimatedNumberList', | |
547 'AnimatedPreserveAspectRatio', | |
548 'AnimatedRect', | |
549 'AnimatedString', | |
550 'AnimatedTransformList', | |
551 'AnimationElement', | |
552 'CircleElement', | |
553 'ClipPathElement', | |
554 'DefsElement', | |
555 'DescElement', | |
556 'DiscardElement', | |
557 'EllipseElement', | |
558 'FEBlendElement', | |
559 'FEColorMatrixElement', | |
560 'FEComponentTransferElement', | |
561 'FECompositeElement', | |
562 'FEConvolveMatrixElement', | |
563 'FEDiffuseLightingElement', | |
564 'FEDisplacementMapElement', | |
565 'FEDistantLightElement', | |
566 'FEFloodElement', | |
567 'FEFuncAElement', | |
568 'FEFuncBElement', | |
569 'FEFuncGElement', | |
570 'FEFuncRElement', | |
571 'FEGaussianBlurElement', | |
572 'FEImageElement', | |
573 'FEMergeElement', | |
574 'FEMergeNodeElement', | |
575 'FEMorphologyElement', | |
576 'FEOffsetElement', | |
577 'FEPointLightElement', | |
578 'FESpecularLightingElement', | |
579 'FESpotLightElement', | |
580 'FETileElement', | |
581 'FETurbulenceElement', | |
582 'FilterElement', | |
583 'FilterPrimitiveStandardAttributes', | |
584 'FitToViewBox', | |
585 'ForeignObjectElement', | |
586 'GElement', | |
587 'GeometryElement', | |
588 'GraphicsElement', | |
589 'ImageElement', | |
590 'Length', | |
591 'LengthList', | |
592 'LineElement', | |
593 'LinearGradientElement', | |
594 'MarkerElement', | |
595 'MaskElement', | |
596 'Matrix', | |
597 'MetadataElement', | |
598 'Number', | |
599 'NumberList', | |
600 'PathElement', | |
601 'PathSeg', | |
602 'PathSegArcAbs', | |
603 'PathSegArcRel', | |
604 'PathSegClosePath', | |
605 'PathSegCurvetoCubicAbs', | |
606 'PathSegCurvetoCubicRel', | |
607 'PathSegCurvetoCubicSmoothAbs', | |
608 'PathSegCurvetoCubicSmoothRel', | |
609 'PathSegCurvetoQuadraticAbs', | |
610 'PathSegCurvetoQuadraticRel', | |
611 'PathSegCurvetoQuadraticSmoothAbs', | |
612 'PathSegCurvetoQuadraticSmoothRel', | |
613 'PathSegLinetoAbs', | |
614 'PathSegLinetoHorizontalAbs', | |
615 'PathSegLinetoHorizontalRel', | |
616 'PathSegLinetoRel', | |
617 'PathSegLinetoVerticalAbs', | |
618 'PathSegLinetoVerticalRel', | |
619 'PathSegList', | |
620 'PathSegMovetoAbs', | |
621 'PathSegMovetoRel', | |
622 'PatternElement', | |
623 'Point', | |
624 'PointList', | |
625 'PolygonElement', | |
626 'PolylineElement', | |
627 'PreserveAspectRatio', | |
628 'RadialGradientElement', | |
629 'Rect', | |
630 'RectElement', | |
631 'RenderingIntent', | |
632 'ScriptElement', | |
633 'SetElement', | |
634 'StopElement', | |
635 'StringList', | |
636 'StyleElement', | |
637 'SvgElement', | |
638 'SvgSvgElement', | |
639 'SwitchElement', | |
640 'SymbolElement', | |
641 'TSpanElement', | |
642 'Tests', | |
643 'TextContentElement', | |
644 'TextElement', | |
645 'TextPathElement', | |
646 'TextPositioningElement', | |
647 'TitleElement', | |
648 'Transform', | |
649 'TransformList', | |
650 'UnitTypes', | |
651 'UriReference', | |
652 'UseElement', | |
653 'ViewElement', | |
654 'ViewSpec', | |
655 'ZoomAndPan', | |
656 'ZoomEvent', | |
657 '_GradientElement', | |
658 '_SVGAltGlyphDefElement', | |
659 '_SVGAltGlyphItemElement', | |
660 '_SVGComponentTransferFunctionElement', | |
661 '_SVGCursorElement', | |
662 '_SVGFEDropShadowElement', | |
663 '_SVGFontElement', | |
664 '_SVGFontFaceElement', | |
665 '_SVGFontFaceFormatElement', | |
666 '_SVGFontFaceNameElement', | |
667 '_SVGFontFaceSrcElement', | |
668 '_SVGFontFaceUriElement', | |
669 '_SVGGlyphElement', | |
670 '_SVGGlyphRefElement', | |
671 '_SVGHKernElement', | |
672 '_SVGMPathElement', | |
673 '_SVGMissingGlyphElement', | |
674 '_SVGVKernElement' | |
675 ], | |
676 'dart:web_audio': [ | |
677 'AnalyserNode', | |
678 'AudioBuffer', | |
679 'AudioBufferSourceNode', | |
680 'AudioContext', | |
681 'AudioDestinationNode', | |
682 'AudioListener', | |
683 'AudioNode', | |
684 'AudioParam', | |
685 'AudioProcessingEvent', | |
686 'AudioSourceNode', | |
687 'BiquadFilterNode', | |
688 'ChannelMergerNode', | |
689 'ChannelSplitterNode', | |
690 'ConvolverNode', | |
691 'DelayNode', | |
692 'DynamicsCompressorNode', | |
693 'GainNode', | |
694 'MediaElementAudioSourceNode', | |
695 'MediaStreamAudioDestinationNode', | |
696 'MediaStreamAudioSourceNode', | |
697 'OfflineAudioCompletionEvent', | |
698 'OfflineAudioContext', | |
699 'OscillatorNode', | |
700 'PannerNode', | |
701 'PeriodicWave', | |
702 'ScriptProcessorNode', | |
703 'WaveShaperNode' | |
704 ], | |
705 'dart:web_gl': [ | |
706 'ActiveInfo', | |
707 'AngleInstancedArrays', | |
708 'Buffer', | |
709 'CompressedTextureAtc', | |
710 'CompressedTextureETC1', | |
711 'CompressedTexturePvrtc', | |
712 'CompressedTextureS3TC', | |
713 'ContextAttributes', | |
714 'ContextEvent', | |
715 'DebugRendererInfo', | |
716 'DebugShaders', | |
717 'DepthTexture', | |
718 'DrawBuffers', | |
719 'ExtBlendMinMax', | |
720 'ExtFragDepth', | |
721 'ExtShaderTextureLod', | |
722 'ExtTextureFilterAnisotropic', | |
723 'Framebuffer', | |
724 'LoseContext', | |
725 'OesElementIndexUint', | |
726 'OesStandardDerivatives', | |
727 'OesTextureFloat', | |
728 'OesTextureFloatLinear', | |
729 'OesTextureHalfFloat', | |
730 'OesTextureHalfFloatLinear', | |
731 'OesVertexArrayObject', | |
732 'Program', | |
733 'Renderbuffer', | |
734 'RenderingContext', | |
735 'Shader', | |
736 'ShaderPrecisionFormat', | |
737 'Texture', | |
738 'UniformLocation', | |
739 'VertexArrayObject' | |
740 ], | |
741 'dart:web_sql': [ | |
742 'SqlDatabase', | |
743 'SqlError', | |
744 'SqlResultSet', | |
745 'SqlResultSetRowList', | |
746 'SqlTransaction' | |
747 ] | |
748 }; | |
749 } | 174 } |
OLD | NEW |