Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(230)

Side by Side Diff: dart/utils/apidoc/html_diff_dump.dart

Issue 10164004: Remove frogsh. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 /**
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`
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
10 * change the semantics of the corresponding `dart:dom` method if it's the only
11 * corresponding HTML method and it has the corresponding return type.
12 *
13 * The format of the output is as follows:
14 *
15 * {
16 * "renamed": { domName: htmlName, ... },
17 * "removed": [name, ...]
18 * }
19 *
20 * 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
22 * `MediaElement.get:textTracks`.
23 */
24 #library('html_diff_dump');
25
26 #import('dart:json');
27 #import('html_diff.dart');
28 #import('../../frog/lang.dart');
29 #import('../../frog/file_system_node.dart');
30
31 HtmlDiff diff;
32
33 /** Whether or not a domType represents the same type as an htmlType. */
34 bool sameType(Type domType, Type htmlType) {
35 if (domType.isVoid || htmlType.isVoid) {
36 return domType.isVoid && htmlType.isVoid;
37 }
38
39 final htmlTypes = diff.domTypesToHtml[domType];
40 return htmlTypes != null && htmlTypes.some((t) => t == htmlType);
41 }
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
46 /**
47 * Returns a string describing the name of a member. If [type] is passed, it's
48 * used in place of the member's real type name.
49 */
50 String memberDesc(Member m, [Type type = null]) {
51 if (type == null) type = m.declaringType;
52 return '${type.name}.${memberName(m)}';
53 }
54
55 /**
56 * Same as [memberDesc], but if [m] is a `dart:dom` type its `dart:html`
57 * typename is used instead.
58 */
59 String htmlishMemberDesc(Member m) {
60 var type = m.declaringType;
61 final htmlTypes = diff.domTypesToHtml[type];
62 if (htmlTypes != null && htmlTypes.length == 1) {
63 type = htmlTypes.iterator().next();
64 }
65 return memberDesc(m, type);
66 }
67
68 bool isGetter(Member member) => member.name.startsWith('get:');
69 bool isSetter(Member member) => member.name.startsWith('set:');
70
71 /**
72 * Add an entry to the map of `dart:dom` names to `dart:html` names if
73 * [domMember] was renamed to [htmlMembers] with the same semantics.
74 */
75 void maybeAddRename(Map<String, String> renamed, Member domMember,
76 Collection<Member> htmlMembers) {
77 if (htmlMembers.length != 1) return;
78 final htmlMember = htmlMembers.iterator().next();
79 if (memberName(domMember) != memberName(htmlMember) &&
80 sameType(domMember.returnType, htmlMember.returnType)) {
81 renamed[memberDesc(domMember)] = memberDesc(htmlMember);
82 }
83 }
84
85 void main() {
86 var files = new NodeFileSystem();
87 parseOptions('../../frog', [] /* args */, files);
88 initializeWorld(files);
89
90 HtmlDiff.initialize();
91 diff = new HtmlDiff();
92 diff.run();
93
94 final renamed = <String>{};
95 diff.domToHtml.forEach((domMember, htmlMembers) {
96 if (domMember is PropertyMember) {
97 if (domMember.canGet) {
98 maybeAddRename(renamed, domMember.getter, htmlMembers.filter(isGetter));
99 }
100 if (domMember.canSet) {
101 maybeAddRename(renamed, domMember.setter, htmlMembers.filter(isSetter));
102 }
103 } else {
104 maybeAddRename(renamed, domMember, htmlMembers);
105 return;
106 }
107 });
108
109 final removed = <Set>[];
110 for (final type in world.libraries['dart:dom'].types.getValues()) {
111 if (type.members.getValues().every((m) =>
112 !diff.domToHtml.containsKey(m))) {
113 removed.add('${type.name}.*');
114 } else {
115 for (final member in type.members.getValues()) {
116 if (!diff.domToHtml.containsKey(member)) {
117 if (member is PropertyMember) {
118 if (member.canGet) removed.add(htmlishMemberDesc(member.getter));
119 if (member.canSet) removed.add(htmlishMemberDesc(member.setter));
120 } else {
121 removed.add(htmlishMemberDesc(member));
122 }
123 } else if (member is PropertyMember) {
124 final htmlMembers = diff.domToHtml[member];
125 if (member.canGet && !htmlMembers.some((m) => m.name.startsWith('get:' ))) {
126 removed.add(htmlishMemberDesc(member.getter));
127 }
128 if (member.canSet && !htmlMembers.some((m) => m.name.startsWith('set:' ))) {
129 removed.add(htmlishMemberDesc(member.setter));
130 }
131 }
132 }
133 }
134 }
135
136 print(JSON.stringify({'renamed': renamed, 'removed': removed}));
137 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698