Skip to content

Commit 5cb6cb0

Browse files
committed
Refine types of EventTarget
Most DOM attributes that yield an EventTarget are yielding one that has already been seen by the program. Review URL: https://codereview.chromium.org//11411347 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@15703 260f80e4-7a28-3924-810f-c04153c831b5
1 parent d94dd29 commit 5cb6cb0

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

sdk/lib/html/dart2js/html_dart2js.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7836,7 +7836,7 @@ class Event native "*Event" {
78367836
/// @domName Event.currentTarget; @docsEditable true
78377837
EventTarget get currentTarget => _convertNativeToDart_EventTarget(this._currentTarget);
78387838
@JSName('currentTarget')
7839-
@Creates('EventTarget|=Object') @Returns('EventTarget|=Object')
7839+
@Creates('Null') @Returns('EventTarget|=Object')
78407840
final dynamic _currentTarget;
78417841

78427842
/// @domName Event.defaultPrevented; @docsEditable true
@@ -7851,7 +7851,7 @@ class Event native "*Event" {
78517851
/// @domName Event.target; @docsEditable true
78527852
EventTarget get target => _convertNativeToDart_EventTarget(this._target);
78537853
@JSName('target')
7854-
@Creates('EventTarget|=Object') @Returns('EventTarget|=Object')
7854+
@Creates('Node') @Returns('EventTarget|=Object')
78557855
final dynamic _target;
78567856

78577857
/// @domName Event.timeStamp; @docsEditable true
@@ -13055,7 +13055,7 @@ class MouseEvent extends UIEvent native "*MouseEvent" {
1305513055
/// @domName MouseEvent.relatedTarget; @docsEditable true
1305613056
EventTarget get relatedTarget => _convertNativeToDart_EventTarget(this._relatedTarget);
1305713057
@JSName('relatedTarget')
13058-
@Creates('EventTarget|=Object') @Returns('EventTarget|=Object')
13058+
@Creates('Node') @Returns('EventTarget|=Object')
1305913059
final dynamic _relatedTarget;
1306013060

1306113061
/// @domName MouseEvent.screenX; @docsEditable true
@@ -17454,7 +17454,7 @@ class Touch native "*Touch" {
1745417454
/// @domName Touch.target; @docsEditable true
1745517455
EventTarget get target => _convertNativeToDart_EventTarget(this._target);
1745617456
@JSName('target')
17457-
@Creates('EventTarget|=Object') @Returns('EventTarget|=Object')
17457+
@Creates('Element|Document') @Returns('Element|Document')
1745817458
final dynamic _target;
1745917459

1746017460
/// @domName Touch.webkitForce; @docsEditable true

sdk/lib/html/scripts/generator.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,7 @@ def FindConversion(idl_type, direction, interface, member):
594594
#
595595
# INTERFACE.MEMBER: annotations for member.
596596
# +TYPE: add annotations only if there are member annotations.
597+
# -TYPE: add annotations only if there are no member annotations.
597598
# TYPE: add regardless of member annotations.
598599

599600
dart2js_annotations = {
@@ -615,10 +616,26 @@ def FindConversion(idl_type, direction, interface, member):
615616
'DOMWindow.openDatabase': "@Creates('Database') @Creates('DatabaseSync')",
616617

617618
# Cross-frame windows are EventTargets.
618-
'EventTarget':
619-
#"@Creates('Null') @Returns('EventTarget|=Object')",
619+
'-EventTarget':
620620
"@Creates('EventTarget|=Object') @Returns('EventTarget|=Object')",
621621

622+
# To be in callback with the browser-created Event, we had to have called
623+
# addEventListener on the target, so we avoid
624+
'Event.currentTarget':
625+
"@Creates('Null') @Returns('EventTarget|=Object')",
626+
627+
# Only nodes in the DOM bubble and have target !== currentTarget.
628+
'Event.target':
629+
"@Creates('Node') @Returns('EventTarget|=Object')",
630+
631+
'MouseEvent.relatedTarget':
632+
"@Creates('Node') @Returns('EventTarget|=Object')",
633+
634+
# Touch targets are Elements in a Document, or the Document.
635+
'Touch.target':
636+
"@Creates('Element|Document') @Returns('Element|Document')",
637+
638+
622639
'FileReader.result': "@Creates('String|ArrayBuffer|Null')",
623640

624641
# Rather than have the result of an IDBRequest as a union over all possible
@@ -687,6 +704,9 @@ def FindAnnotations(idl_type, interface_name, member_name):
687704
return ann2 + ' ' + ann1
688705
return ann1
689706

707+
ann2 = dart2js_annotations.get('-' + idl_type)
708+
if ann2:
709+
return ann2
690710
ann2 = dart2js_annotations.get(idl_type)
691711
return ann2
692712

0 commit comments

Comments
 (0)