OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 /** | 5 /** |
6 * A script for printing a JSON dump of HTML diff data. In particular, this | 6 * A script for printing a JSON dump of HTML diff data. In particular, |
7 * lists a map of `dart:dom` methods that have been renamed to `dart:html` | 7 * this lists a map of `dart:dom_deprecated` methods that have been |
8 * methods without changing their semantics, and `dart:dom` methods that have | 8 * renamed to `dart:html` methods without changing their semantics, |
9 * been removed in `dart:html`. As a heuristic, a `dart:html` method doesn't | 9 * and `dart:dom_deprecated` methods that have been removed in |
10 * change the semantics of the corresponding `dart:dom` method if it's the only | 10 * `dart:html`. As a heuristic, a `dart:html` method doesn't change |
11 * corresponding HTML method and it has the corresponding return type. | 11 * the semantics of the corresponding `dart:dom_deprecated` method if |
| 12 * it's the only corresponding HTML method and it has the |
| 13 * corresponding return type. |
12 * | 14 * |
13 * The format of the output is as follows: | 15 * The format of the output is as follows: |
14 * | 16 * |
15 * { | 17 * { |
16 * "renamed": { domName: htmlName, ... }, | 18 * "renamed": { domName: htmlName, ... }, |
17 * "removed": [name, ...] | 19 * "removed": [name, ...] |
18 * } | 20 * } |
19 * | 21 * |
20 * Note that the removed members are listed with the names they would have in | 22 * Note that the removed members are listed with the names they would have in |
21 * HTML where possible; e.g. `HTMLMediaElement.get:textTracks` is listed as | 23 * HTML where possible; e.g. `HTMLMediaElement.get:textTracks` is listed as |
(...skipping 23 matching lines...) Expand all Loading... |
45 /** | 47 /** |
46 * Returns a string describing the name of a member. If [type] is passed, it's | 48 * Returns a string describing the name of a member. If [type] is passed, it's |
47 * used in place of the member's real type name. | 49 * used in place of the member's real type name. |
48 */ | 50 */ |
49 String memberDesc(Member m, [Type type = null]) { | 51 String memberDesc(Member m, [Type type = null]) { |
50 if (type == null) type = m.declaringType; | 52 if (type == null) type = m.declaringType; |
51 return '${type.name}.${memberName(m)}'; | 53 return '${type.name}.${memberName(m)}'; |
52 } | 54 } |
53 | 55 |
54 /** | 56 /** |
55 * Same as [memberDesc], but if [m] is a `dart:dom` type its `dart:html` | 57 * Same as [memberDesc], but if [m] is a `dart:dom_deprecated` type |
56 * typename is used instead. | 58 * its `dart:html` typename is used instead. |
57 */ | 59 */ |
58 String htmlishMemberDesc(Member m) { | 60 String htmlishMemberDesc(Member m) { |
59 var type = m.declaringType; | 61 var type = m.declaringType; |
60 final htmlTypes = diff.domTypesToHtml[type]; | 62 final htmlTypes = diff.domTypesToHtml[type]; |
61 if (htmlTypes != null && htmlTypes.length == 1) { | 63 if (htmlTypes != null && htmlTypes.length == 1) { |
62 type = htmlTypes.iterator().next(); | 64 type = htmlTypes.iterator().next(); |
63 } | 65 } |
64 return memberDesc(m, type); | 66 return memberDesc(m, type); |
65 } | 67 } |
66 | 68 |
67 bool isGetter(Member member) => member.name.startsWith('get:'); | 69 bool isGetter(Member member) => member.name.startsWith('get:'); |
68 bool isSetter(Member member) => member.name.startsWith('set:'); | 70 bool isSetter(Member member) => member.name.startsWith('set:'); |
69 | 71 |
70 /** | 72 /** |
71 * Add an entry to the map of `dart:dom` names to `dart:html` names if | 73 * Add an entry to the map of `dart:dom_deprecated` names to |
72 * [domMember] was renamed to [htmlMembers] with the same semantics. | 74 * `dart:html` names if [domMember] was renamed to [htmlMembers] with |
| 75 * the same semantics. |
73 */ | 76 */ |
74 void maybeAddRename(Map<String, String> renamed, Member domMember, | 77 void maybeAddRename(Map<String, String> renamed, Member domMember, |
75 Collection<Member> htmlMembers) { | 78 Collection<Member> htmlMembers) { |
76 if (htmlMembers.length != 1) return; | 79 if (htmlMembers.length != 1) return; |
77 final htmlMember = htmlMembers.iterator().next(); | 80 final htmlMember = htmlMembers.iterator().next(); |
78 if (memberName(domMember) != memberName(htmlMember) && | 81 if (memberName(domMember) != memberName(htmlMember) && |
79 sameType(domMember.returnType, htmlMember.returnType)) { | 82 sameType(domMember.returnType, htmlMember.returnType)) { |
80 renamed[memberDesc(domMember)] = memberDesc(htmlMember); | 83 renamed[memberDesc(domMember)] = memberDesc(htmlMember); |
81 } | 84 } |
82 } | 85 } |
(...skipping 16 matching lines...) Expand all Loading... |
99 if (domMember.canSet) { | 102 if (domMember.canSet) { |
100 maybeAddRename(renamed, domMember.setter, htmlMembers.filter(isSetter)); | 103 maybeAddRename(renamed, domMember.setter, htmlMembers.filter(isSetter)); |
101 } | 104 } |
102 } else { | 105 } else { |
103 maybeAddRename(renamed, domMember, htmlMembers); | 106 maybeAddRename(renamed, domMember, htmlMembers); |
104 return; | 107 return; |
105 } | 108 } |
106 }); | 109 }); |
107 | 110 |
108 final removed = <Set>[]; | 111 final removed = <Set>[]; |
109 for (final type in world.libraries['dart:dom'].types.getValues()) { | 112 for (final type in world.libraries['dart:dom_deprecated'].types.getValues()) { |
110 if (type.members.getValues().every((m) => | 113 if (type.members.getValues().every((m) => |
111 !diff.domToHtml.containsKey(m))) { | 114 !diff.domToHtml.containsKey(m))) { |
112 removed.add('${type.name}.*'); | 115 removed.add('${type.name}.*'); |
113 } else { | 116 } else { |
114 for (final member in type.members.getValues()) { | 117 for (final member in type.members.getValues()) { |
115 if (!diff.domToHtml.containsKey(member)) { | 118 if (!diff.domToHtml.containsKey(member)) { |
116 if (member is PropertyMember) { | 119 if (member is PropertyMember) { |
117 if (member.canGet) removed.add(htmlishMemberDesc(member.getter)); | 120 if (member.canGet) removed.add(htmlishMemberDesc(member.getter)); |
118 if (member.canSet) removed.add(htmlishMemberDesc(member.setter)); | 121 if (member.canSet) removed.add(htmlishMemberDesc(member.setter)); |
119 } else { | 122 } else { |
120 removed.add(htmlishMemberDesc(member)); | 123 removed.add(htmlishMemberDesc(member)); |
121 } | 124 } |
122 } else if (member is PropertyMember) { | 125 } else if (member is PropertyMember) { |
123 final htmlMembers = diff.domToHtml[member]; | 126 final htmlMembers = diff.domToHtml[member]; |
124 if (member.canGet && !htmlMembers.some((m) => m.name.startsWith('get:'
))) { | 127 if (member.canGet && !htmlMembers.some((m) => m.name.startsWith('get:'
))) { |
125 removed.add(htmlishMemberDesc(member.getter)); | 128 removed.add(htmlishMemberDesc(member.getter)); |
126 } | 129 } |
127 if (member.canSet && !htmlMembers.some((m) => m.name.startsWith('set:'
))) { | 130 if (member.canSet && !htmlMembers.some((m) => m.name.startsWith('set:'
))) { |
128 removed.add(htmlishMemberDesc(member.setter)); | 131 removed.add(htmlishMemberDesc(member.setter)); |
129 } | 132 } |
130 } | 133 } |
131 } | 134 } |
132 } | 135 } |
133 } | 136 } |
134 | 137 |
135 print(JSON.stringify({'renamed': renamed, 'removed': removed})); | 138 print(JSON.stringify({'renamed': renamed, 'removed': removed})); |
136 } | 139 } |
OLD | NEW |