| 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, this |
| 7 * lists a map of `dart:dom` methods that have been renamed to `dart:html` | 7 * lists a map of `dart:dom` methods that have been renamed to `dart:html` |
| 8 * methods without changing their semantics, and `dart:dom` methods that have | 8 * methods without changing their semantics, and `dart:dom` methods that have |
| 9 * been removed in `dart:html`. As a heuristic, a `dart:html` method doesn't | 9 * been removed in `dart:html`. As a heuristic, a `dart:html` method doesn't |
| 10 * change the semantics of the corresponding `dart:dom` method if it's the only | 10 * change the semantics of the corresponding `dart:dom` method if it's the only |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 /** Whether or not a domType represents the same type as an htmlType. */ | 33 /** Whether or not a domType represents the same type as an htmlType. */ |
| 34 bool sameType(Type domType, Type htmlType) { | 34 bool sameType(Type domType, Type htmlType) { |
| 35 if (domType.isVoid || htmlType.isVoid) { | 35 if (domType.isVoid || htmlType.isVoid) { |
| 36 return domType.isVoid && htmlType.isVoid; | 36 return domType.isVoid && htmlType.isVoid; |
| 37 } | 37 } |
| 38 | 38 |
| 39 final htmlTypes = diff.domTypesToHtml[domType]; | 39 final htmlTypes = diff.domTypesToHtml[domType]; |
| 40 return htmlTypes != null && htmlTypes.some((t) => t == htmlType); | 40 return htmlTypes != null && htmlTypes.some((t) => t == htmlType); |
| 41 } | 41 } |
| 42 | 42 |
| 43 /** Returns the name of a member, including `get:` if it's a field. */ |
| 44 String memberName(Member m) => m is FieldMember ? 'get:${m.name}' : m.name; |
| 45 |
| 43 /** | 46 /** |
| 44 * Returns a string describing the name of a member. If [type] is passed, it's | 47 * Returns a string describing the name of a member. If [type] is passed, it's |
| 45 * used in place of the member's real type name. | 48 * used in place of the member's real type name. |
| 46 */ | 49 */ |
| 47 String memberName(Member m, [Type type = null]) { | 50 String memberDesc(Member m, [Type type = null]) { |
| 48 if (type == null) type = m.declaringType; | 51 if (type == null) type = m.declaringType; |
| 49 if (m is FieldMember) { | 52 return '${type.name}.${memberName(m)}'; |
| 50 return '${type.name}.get:${m.name}'; | |
| 51 } else { | |
| 52 return '${type.name}.${m.name}'; | |
| 53 } | |
| 54 } | 53 } |
| 55 | 54 |
| 56 /** | 55 /** |
| 57 * Same as [memberName], but if [m] is a `dart:dom` type its `dart:html` | 56 * Same as [memberDesc], but if [m] is a `dart:dom` type its `dart:html` |
| 58 * typename is used instead. | 57 * typename is used instead. |
| 59 */ | 58 */ |
| 60 String htmlishMemberName(Member m) { | 59 String htmlishMemberDesc(Member m) { |
| 61 var type = m.declaringType; | 60 var type = m.declaringType; |
| 62 final htmlTypes = diff.domTypesToHtml[type]; | 61 final htmlTypes = diff.domTypesToHtml[type]; |
| 63 if (htmlTypes != null && htmlTypes.length == 1) { | 62 if (htmlTypes != null && htmlTypes.length == 1) { |
| 64 type = htmlTypes.iterator().next(); | 63 type = htmlTypes.iterator().next(); |
| 65 } | 64 } |
| 66 return memberName(m, type); | 65 return memberDesc(m, type); |
| 67 } | 66 } |
| 68 | 67 |
| 69 bool isGetter(Member member) => member.name.startsWith('get:'); | 68 bool isGetter(Member member) => member.name.startsWith('get:'); |
| 70 bool isSetter(Member member) => member.name.startsWith('set:'); | 69 bool isSetter(Member member) => member.name.startsWith('set:'); |
| 71 | 70 |
| 72 /** | 71 /** |
| 73 * Add an entry to the map of `dart:dom` names to `dart:html` names if | 72 * Add an entry to the map of `dart:dom` names to `dart:html` names if |
| 74 * [domMember] was renamed to [htmlMembers] with the same semantics. | 73 * [domMember] was renamed to [htmlMembers] with the same semantics. |
| 75 */ | 74 */ |
| 76 void maybeAddRename(Map<String, String> renamed, Member domMember, | 75 void maybeAddRename(Map<String, String> renamed, Member domMember, |
| 77 Collection<Member> htmlMembers) { | 76 Collection<Member> htmlMembers) { |
| 78 if (htmlMembers.length != 1) return; | 77 if (htmlMembers.length != 1) return; |
| 79 final htmlMember = htmlMembers.iterator().next(); | 78 final htmlMember = htmlMembers.iterator().next(); |
| 80 if (memberName(domMember) != memberName(htmlMember) && | 79 if (memberName(domMember) != memberName(htmlMember) && |
| 81 sameType(domMember.returnType, htmlMember.returnType)) { | 80 sameType(domMember.returnType, htmlMember.returnType)) { |
| 82 renamed[memberName(domMember)] = memberName(htmlMember); | 81 renamed[memberDesc(domMember)] = memberDesc(htmlMember); |
| 83 } | 82 } |
| 84 } | 83 } |
| 85 | 84 |
| 86 void main() { | 85 void main() { |
| 87 var files = new NodeFileSystem(); | 86 var files = new NodeFileSystem(); |
| 88 parseOptions('../../frog', [] /* args */, files); | 87 parseOptions('../../frog', [] /* args */, files); |
| 89 initializeWorld(files); | 88 initializeWorld(files); |
| 90 | 89 |
| 91 HtmlDiff.initialize(); | 90 HtmlDiff.initialize(); |
| 92 diff = new HtmlDiff(); | 91 diff = new HtmlDiff(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 109 | 108 |
| 110 final removed = <Set>[]; | 109 final removed = <Set>[]; |
| 111 for (final type in world.libraries['dart:dom'].types.getValues()) { | 110 for (final type in world.libraries['dart:dom'].types.getValues()) { |
| 112 if (type.members.getValues().every((m) => | 111 if (type.members.getValues().every((m) => |
| 113 !diff.domToHtml.containsKey(m))) { | 112 !diff.domToHtml.containsKey(m))) { |
| 114 removed.add('${type.name}.*'); | 113 removed.add('${type.name}.*'); |
| 115 } else { | 114 } else { |
| 116 for (final member in type.members.getValues()) { | 115 for (final member in type.members.getValues()) { |
| 117 if (!diff.domToHtml.containsKey(member)) { | 116 if (!diff.domToHtml.containsKey(member)) { |
| 118 if (member is PropertyMember) { | 117 if (member is PropertyMember) { |
| 119 if (member.canGet) removed.add(htmlishMemberName(member.getter)); | 118 if (member.canGet) removed.add(htmlishMemberDesc(member.getter)); |
| 120 if (member.canSet) removed.add(htmlishMemberName(member.setter)); | 119 if (member.canSet) removed.add(htmlishMemberDesc(member.setter)); |
| 121 } else { | 120 } else { |
| 122 removed.add(htmlishMemberName(member)); | 121 removed.add(htmlishMemberDesc(member)); |
| 123 } | 122 } |
| 124 } else if (member is PropertyMember) { | 123 } else if (member is PropertyMember) { |
| 125 final htmlMembers = diff.domToHtml[member]; | 124 final htmlMembers = diff.domToHtml[member]; |
| 126 if (member.canGet && !htmlMembers.some((m) => m.name.startsWith('get:'
))) { | 125 if (member.canGet && !htmlMembers.some((m) => m.name.startsWith('get:'
))) { |
| 127 removed.add(htmlishMemberName(member.getter)); | 126 removed.add(htmlishMemberDesc(member.getter)); |
| 128 } | 127 } |
| 129 if (member.canSet && !htmlMembers.some((m) => m.name.startsWith('set:'
))) { | 128 if (member.canSet && !htmlMembers.some((m) => m.name.startsWith('set:'
))) { |
| 130 removed.add(htmlishMemberName(member.setter)); | 129 removed.add(htmlishMemberDesc(member.setter)); |
| 131 } | 130 } |
| 132 } | 131 } |
| 133 } | 132 } |
| 134 } | 133 } |
| 135 } | 134 } |
| 136 | 135 |
| 137 print(JSON.stringify({'renamed': renamed, 'removed': removed})); | 136 print(JSON.stringify({'renamed': renamed, 'removed': removed})); |
| 138 } | 137 } |
| OLD | NEW |