| 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 * To generate docs for a library, run this script with the path to an | 6 * To generate docs for a library, run this script with the path to an |
| 7 * entrypoint .dart file, like: | 7 * entrypoint .dart file, like: |
| 8 * | 8 * |
| 9 * $ dart dartdoc.dart foo.dart | 9 * $ dart dartdoc.dart foo.dart |
| 10 * | 10 * |
| (...skipping 1017 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1028 if (!showPrivate && member.isPrivate) return; | 1028 if (!showPrivate && member.isPrivate) return; |
| 1029 if (host is LibraryMirror || member.isStatic) { | 1029 if (host is LibraryMirror || member.isStatic) { |
| 1030 if (member is MethodMirror) { | 1030 if (member is MethodMirror) { |
| 1031 if (member.isGetter) { | 1031 if (member.isGetter) { |
| 1032 staticGetters[member.displayName] = member; | 1032 staticGetters[member.displayName] = member; |
| 1033 } else if (member.isSetter) { | 1033 } else if (member.isSetter) { |
| 1034 staticSetters[member.displayName] = member; | 1034 staticSetters[member.displayName] = member; |
| 1035 } else { | 1035 } else { |
| 1036 staticMethods.add(member); | 1036 staticMethods.add(member); |
| 1037 } | 1037 } |
| 1038 } else if (member is FieldMirror) { | 1038 } else if (member is VariableMirror) { |
| 1039 staticGetters[member.displayName] = member; | 1039 staticGetters[member.displayName] = member; |
| 1040 } | 1040 } |
| 1041 } | 1041 } |
| 1042 }); | 1042 }); |
| 1043 | 1043 |
| 1044 if (host is ClassMirror) { | 1044 if (host is ClassMirror) { |
| 1045 var iterable = new HierarchyIterable(host, includeType: true); | 1045 var iterable = new HierarchyIterable(host, includeType: true); |
| 1046 for (ClassMirror type in iterable) { | 1046 for (ClassMirror type in iterable) { |
| 1047 if (!host.isObject && !inheritFromObject && type.isObject) continue; | 1047 if (!host.isObject && !inheritFromObject && type.isObject) continue; |
| 1048 | 1048 |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 instanceOperators.add(member); | 1095 instanceOperators.add(member); |
| 1096 if (member.owner == host) { | 1096 if (member.owner == host) { |
| 1097 allOperatorsInherited = false; | 1097 allOperatorsInherited = false; |
| 1098 } | 1098 } |
| 1099 } else { | 1099 } else { |
| 1100 instanceMethods.add(member); | 1100 instanceMethods.add(member); |
| 1101 if (member.owner == host) { | 1101 if (member.owner == host) { |
| 1102 allMethodsInherited = false; | 1102 allMethodsInherited = false; |
| 1103 } | 1103 } |
| 1104 } | 1104 } |
| 1105 } else if (member is FieldMirror) { | 1105 } else if (member is VariableMirror) { |
| 1106 instanceGetters[member.displayName] = member; | 1106 instanceGetters[member.displayName] = member; |
| 1107 if (member.owner == host) { | 1107 if (member.owner == host) { |
| 1108 allPropertiesInherited = false; | 1108 allPropertiesInherited = false; |
| 1109 } | 1109 } |
| 1110 } | 1110 } |
| 1111 }); | 1111 }); |
| 1112 | 1112 |
| 1113 instanceOperators.sort((MethodMirror a, MethodMirror b) { | 1113 instanceOperators.sort((MethodMirror a, MethodMirror b) { |
| 1114 return operatorOrderMap[a.simpleName].compareTo( | 1114 return operatorOrderMap[a.simpleName].compareTo( |
| 1115 operatorOrderMap[b.simpleName]); | 1115 operatorOrderMap[b.simpleName]); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1147 nameList.sort((String a, String b) { | 1147 nameList.sort((String a, String b) { |
| 1148 return a.toLowerCase().compareTo(b.toLowerCase()); | 1148 return a.toLowerCase().compareTo(b.toLowerCase()); |
| 1149 }); | 1149 }); |
| 1150 | 1150 |
| 1151 writeln('<div${allInherited ? ' class="inherited"' : ''}>'); | 1151 writeln('<div${allInherited ? ' class="inherited"' : ''}>'); |
| 1152 writeln('<h3>$title</h3>'); | 1152 writeln('<h3>$title</h3>'); |
| 1153 for (String name in nameList) { | 1153 for (String name in nameList) { |
| 1154 MemberMirror getter = getters[name]; | 1154 MemberMirror getter = getters[name]; |
| 1155 MemberMirror setter = setters[name]; | 1155 MemberMirror setter = setters[name]; |
| 1156 if (setter == null) { | 1156 if (setter == null) { |
| 1157 if (getter is FieldMirror) { | 1157 if (getter is VariableMirror) { |
| 1158 // We have a field. | 1158 // We have a field. |
| 1159 docField(host, getter); | 1159 docField(host, getter); |
| 1160 } else { | 1160 } else { |
| 1161 // We only have a getter. | 1161 // We only have a getter. |
| 1162 assert(getter is MethodMirror); | 1162 assert(getter is MethodMirror); |
| 1163 docProperty(host, getter, null); | 1163 docProperty(host, getter, null); |
| 1164 } | 1164 } |
| 1165 } else if (getter == null) { | 1165 } else if (getter == null) { |
| 1166 // We only have a setter => Document as a method. | 1166 // We only have a setter => Document as a method. |
| 1167 assert(setter is MethodMirror); | 1167 assert(setter is MethodMirror); |
| 1168 docMethod(host, setter); | 1168 docMethod(host, setter); |
| 1169 } else { | 1169 } else { |
| 1170 DocComment getterComment = getMemberComment(getter); | 1170 DocComment getterComment = getMemberComment(getter); |
| 1171 DocComment setterComment = getMemberComment(setter); | 1171 DocComment setterComment = getMemberComment(setter); |
| 1172 if (getter.owner !== setter.owner || | 1172 if (getter.owner !== setter.owner || |
| 1173 getterComment != null && setterComment != null) { | 1173 getterComment != null && setterComment != null) { |
| 1174 // Both have comments or are not declared in the same class | 1174 // Both have comments or are not declared in the same class |
| 1175 // => Documents separately. | 1175 // => Documents separately. |
| 1176 if (getter is FieldMirror) { | 1176 if (getter is VariableMirror) { |
| 1177 // Document field as a getter (setter is inherited). | 1177 // Document field as a getter (setter is inherited). |
| 1178 docField(host, getter, asGetter: true); | 1178 docField(host, getter, asGetter: true); |
| 1179 } else { | 1179 } else { |
| 1180 docMethod(host, getter); | 1180 docMethod(host, getter); |
| 1181 } | 1181 } |
| 1182 if (setter is FieldMirror) { | 1182 if (setter is VariableMirror) { |
| 1183 // Document field as a setter (getter is inherited). | 1183 // Document field as a setter (getter is inherited). |
| 1184 docField(host, setter, asSetter: true); | 1184 docField(host, setter, asSetter: true); |
| 1185 } else { | 1185 } else { |
| 1186 docMethod(host, setter); | 1186 docMethod(host, setter); |
| 1187 } | 1187 } |
| 1188 } else { | 1188 } else { |
| 1189 // Document as field. | 1189 // Document as field. |
| 1190 docProperty(host, getter, setter); | 1190 docProperty(host, getter, setter); |
| 1191 } | 1191 } |
| 1192 } | 1192 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1212 * [FieldMirror] it is documented as a getter or setter depending upon the | 1212 * [FieldMirror] it is documented as a getter or setter depending upon the |
| 1213 * value of [asGetter]. | 1213 * value of [asGetter]. |
| 1214 */ | 1214 */ |
| 1215 void docMethod(ObjectMirror host, MemberMirror member, | 1215 void docMethod(ObjectMirror host, MemberMirror member, |
| 1216 {bool asGetter: false}) { | 1216 {bool asGetter: false}) { |
| 1217 _totalMembers++; | 1217 _totalMembers++; |
| 1218 _currentMember = member; | 1218 _currentMember = member; |
| 1219 | 1219 |
| 1220 bool isAbstract = false; | 1220 bool isAbstract = false; |
| 1221 String name = member.displayName; | 1221 String name = member.displayName; |
| 1222 if (member is FieldMirror) { | 1222 if (member is VariableMirror) { |
| 1223 if (asGetter) { | 1223 if (asGetter) { |
| 1224 // Getter. | 1224 // Getter. |
| 1225 name = 'get $name'; | 1225 name = 'get $name'; |
| 1226 } else { | 1226 } else { |
| 1227 // Setter. | 1227 // Setter. |
| 1228 name = 'set $name'; | 1228 name = 'set $name'; |
| 1229 } | 1229 } |
| 1230 } else { | 1230 } else { |
| 1231 assert(member is MethodMirror); | 1231 assert(member is MethodMirror); |
| 1232 isAbstract = member.isAbstract; | 1232 isAbstract = member.isAbstract; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1257 write(member.isConst ? 'const ' : 'new '); | 1257 write(member.isConst ? 'const ' : 'new '); |
| 1258 } | 1258 } |
| 1259 } else if (member.isAbstract) { | 1259 } else if (member.isAbstract) { |
| 1260 write('abstract '); | 1260 write('abstract '); |
| 1261 } | 1261 } |
| 1262 | 1262 |
| 1263 if (!member.isConstructor) { | 1263 if (!member.isConstructor) { |
| 1264 annotateType(host, member.returnType); | 1264 annotateType(host, member.returnType); |
| 1265 } | 1265 } |
| 1266 } else { | 1266 } else { |
| 1267 assert(member is FieldMirror); | 1267 assert(member is VariableMirror); |
| 1268 if (asGetter) { | 1268 if (asGetter) { |
| 1269 annotateType(host, member.type); | 1269 annotateType(host, member.type); |
| 1270 } else { | 1270 } else { |
| 1271 write('void '); | 1271 write('void '); |
| 1272 } | 1272 } |
| 1273 } | 1273 } |
| 1274 | 1274 |
| 1275 write('<strong>$name</strong>'); | 1275 write('<strong>$name</strong>'); |
| 1276 | 1276 |
| 1277 if (member is MethodMirror) { | 1277 if (member is MethodMirror) { |
| 1278 if (!member.isGetter) { | 1278 if (!member.isGetter) { |
| 1279 docParamList(host, member.parameters); | 1279 docParamList(host, member.parameters); |
| 1280 } | 1280 } |
| 1281 } else { | 1281 } else { |
| 1282 assert(member is FieldMirror); | 1282 assert(member is VariableMirror); |
| 1283 if (!asGetter) { | 1283 if (!asGetter) { |
| 1284 write('('); | 1284 write('('); |
| 1285 annotateType(host, member.type); | 1285 annotateType(host, member.type); |
| 1286 write(' value)'); | 1286 write(' value)'); |
| 1287 } | 1287 } |
| 1288 } | 1288 } |
| 1289 | 1289 |
| 1290 var prefix = host is LibraryMirror ? '' : '${typeName(host)}.'; | 1290 var prefix = host is LibraryMirror ? '' : '${typeName(host)}.'; |
| 1291 write(''' <a class="anchor-link" href="#${memberAnchor(member)}" | 1291 write(''' <a class="anchor-link" href="#${memberAnchor(member)}" |
| 1292 title="Permalink to $prefix$name">#</a>'''); | 1292 title="Permalink to $prefix$name">#</a>'''); |
| 1293 writeln('</h4>'); | 1293 writeln('</h4>'); |
| 1294 | 1294 |
| 1295 if (inherited) { | 1295 if (inherited) { |
| 1296 write('<div class="inherited-from">inherited from '); | 1296 write('<div class="inherited-from">inherited from '); |
| 1297 annotateType(host, member.owner); | 1297 annotateType(host, member.owner); |
| 1298 write('</div>'); | 1298 write('</div>'); |
| 1299 } | 1299 } |
| 1300 | 1300 |
| 1301 writeln('<div class="doc">'); | 1301 writeln('<div class="doc">'); |
| 1302 docComment(host, getMemberComment(member)); | 1302 docComment(host, getMemberComment(member)); |
| 1303 if (showCode) { | 1303 if (showCode) { |
| 1304 docCode(member.location); | 1304 docCode(member.location); |
| 1305 } | 1305 } |
| 1306 writeln('</div>'); | 1306 writeln('</div>'); |
| 1307 | 1307 |
| 1308 writeln('</div>'); | 1308 writeln('</div>'); |
| 1309 } | 1309 } |
| 1310 | 1310 |
| 1311 void docField(ObjectMirror host, FieldMirror field, | 1311 void docField(ObjectMirror host, VariableMirror field, |
| 1312 {bool asGetter: false, bool asSetter: false}) { | 1312 {bool asGetter: false, bool asSetter: false}) { |
| 1313 if (asGetter) { | 1313 if (asGetter) { |
| 1314 docMethod(host, field, asGetter: true); | 1314 docMethod(host, field, asGetter: true); |
| 1315 } else if (asSetter) { | 1315 } else if (asSetter) { |
| 1316 docMethod(host, field, asGetter: false); | 1316 docMethod(host, field, asGetter: false); |
| 1317 } else { | 1317 } else { |
| 1318 docProperty(host, field, null); | 1318 docProperty(host, field, null); |
| 1319 } | 1319 } |
| 1320 } | 1320 } |
| 1321 | 1321 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1336 writeln('<div class="field${inherited ? ' inherited' : ''}">' | 1336 writeln('<div class="field${inherited ? ' inherited' : ''}">' |
| 1337 '<h4 id="${memberAnchor(getter)}">'); | 1337 '<h4 id="${memberAnchor(getter)}">'); |
| 1338 | 1338 |
| 1339 if (includeSource) { | 1339 if (includeSource) { |
| 1340 writeln('<button class="show-code">Code</button>'); | 1340 writeln('<button class="show-code">Code</button>'); |
| 1341 } | 1341 } |
| 1342 | 1342 |
| 1343 bool isConst = false; | 1343 bool isConst = false; |
| 1344 bool isFinal; | 1344 bool isFinal; |
| 1345 TypeMirror type; | 1345 TypeMirror type; |
| 1346 if (getter is FieldMirror) { | 1346 if (getter is VariableMirror) { |
| 1347 assert(setter == null); | 1347 assert(setter == null); |
| 1348 isConst = getter.isConst; | 1348 isConst = getter.isConst; |
| 1349 isFinal = getter.isFinal; | 1349 isFinal = getter.isFinal; |
| 1350 type = getter.type; | 1350 type = getter.type; |
| 1351 } else { | 1351 } else { |
| 1352 assert(getter is MethodMirror); | 1352 assert(getter is MethodMirror); |
| 1353 isFinal = setter == null; | 1353 isFinal = setter == null; |
| 1354 type = getter.returnType; | 1354 type = getter.returnType; |
| 1355 } | 1355 } |
| 1356 | 1356 |
| (...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1857 final ClassMirror inheritedFrom; | 1857 final ClassMirror inheritedFrom; |
| 1858 | 1858 |
| 1859 DocComment(this.text, [this.inheritedFrom = null]) { | 1859 DocComment(this.text, [this.inheritedFrom = null]) { |
| 1860 assert(text != null && !text.trim().isEmpty); | 1860 assert(text != null && !text.trim().isEmpty); |
| 1861 } | 1861 } |
| 1862 | 1862 |
| 1863 String get html => md.markdownToHtml(text); | 1863 String get html => md.markdownToHtml(text); |
| 1864 | 1864 |
| 1865 String toString() => text; | 1865 String toString() => text; |
| 1866 } | 1866 } |
| OLD | NEW |