Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 * **docgen** is a tool for creating machine readable representations of Dart | 6 * **docgen** is a tool for creating machine readable representations of Dart |
| 7 * code metadata, including: classes, members, comments and annotations. | 7 * code metadata, including: classes, members, comments and annotations. |
| 8 * | 8 * |
| 9 * docgen is run on a `.dart` file or a directory containing `.dart` files. | 9 * docgen is run on a `.dart` file or a directory containing `.dart` files. |
| 10 * | 10 * |
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 353 'constructors' : constructors, | 353 'constructors' : constructors, |
| 354 'operators' : operators, | 354 'operators' : operators, |
| 355 'methods' : methods}; | 355 'methods' : methods}; |
| 356 } | 356 } |
| 357 | 357 |
| 358 /** | 358 /** |
| 359 * Returns a map of [Class] objects constructed from inputted mirrors. | 359 * Returns a map of [Class] objects constructed from inputted mirrors. |
| 360 */ | 360 */ |
| 361 Map<String, Class> _getClasses(Map<String, ClassMirror> mirrorMap, | 361 Map<String, Class> _getClasses(Map<String, ClassMirror> mirrorMap, |
| 362 bool includePrivate) { | 362 bool includePrivate) { |
| 363 var data = {}; | 363 |
| 364 var abstract = {}; | |
| 365 var classes = {}; | |
| 366 var typedefs = {}; | |
| 367 var errors = {}; | |
| 368 | |
| 364 mirrorMap.forEach((String mirrorName, ClassMirror mirror) { | 369 mirrorMap.forEach((String mirrorName, ClassMirror mirror) { |
| 365 if (includePrivate || !mirror.isPrivate) { | 370 if (includePrivate || !mirror.isPrivate) { |
| 366 _currentClass = mirror; | |
| 367 var superclass = (mirror.superclass != null) ? | 371 var superclass = (mirror.superclass != null) ? |
| 368 mirror.superclass.qualifiedName : ''; | 372 mirror.superclass.qualifiedName : ''; |
| 369 var interfaces = | 373 var interfaces = |
| 370 mirror.superinterfaces.map((interface) => interface.qualifiedName); | 374 mirror.superinterfaces.map((interface) => interface.qualifiedName); |
| 371 data[mirrorName] = new Class(mirrorName, superclass, mirror.isAbstract, | 375 var clazz = new Class(mirrorName, superclass, _getComment(mirror), |
| 372 mirror.isTypedef, _getComment(mirror), interfaces.toList(), | 376 interfaces.toList(), _getVariables(mirror.variables, includePrivate), |
| 373 _getVariables(mirror.variables, includePrivate), | |
| 374 _getMethods(mirror.methods, includePrivate), | 377 _getMethods(mirror.methods, includePrivate), |
| 375 _getAnnotations(mirror), mirror.qualifiedName); | 378 _getAnnotations(mirror), mirror.qualifiedName); |
| 379 _currentClass = mirror; | |
| 380 | |
| 381 if (isError(mirror.qualifiedName)) { | |
| 382 errors[mirrorName] = clazz; | |
| 383 } else if (mirror.isTypedef) { | |
| 384 typedefs[mirrorName] = clazz; | |
| 385 } else if (mirror.isAbstract) { | |
| 386 abstract[mirrorName] = clazz; | |
| 387 } else if (mirror.isClass) { | |
| 388 classes[mirrorName] = clazz; | |
| 389 } else { | |
| 390 throw new StateError('$mirrorName - no class tyle match. '); | |
|
Bob Nystrom
2013/07/18 17:08:07
"tyle" -> "style".
Also, throw ArgumentError inst
| |
| 391 } | |
| 376 } | 392 } |
| 377 }); | 393 }); |
| 378 return data; | 394 return {'abstract' : abstract, |
| 395 'class' : classes, | |
| 396 'typedef' : typedefs, | |
| 397 'error' : errors}; | |
|
Bob Nystrom
2013/07/18 17:08:07
A couple of style nits: no space before ":", and p
| |
| 379 } | 398 } |
| 380 | 399 |
| 381 /** | 400 /** |
| 382 * Returns a map of [Parameter] objects constructed from inputted mirrors. | 401 * Returns a map of [Parameter] objects constructed from inputted mirrors. |
| 383 */ | 402 */ |
| 384 Map<String, Parameter> _getParameters(List<ParameterMirror> mirrorList) { | 403 Map<String, Parameter> _getParameters(List<ParameterMirror> mirrorList) { |
| 385 var data = {}; | 404 var data = {}; |
| 386 mirrorList.forEach((ParameterMirror mirror) { | 405 mirrorList.forEach((ParameterMirror mirror) { |
| 387 _currentMember = mirror; | 406 _currentMember = mirror; |
| 388 data[mirror.simpleName] = new Parameter(mirror.simpleName, | 407 data[mirror.simpleName] = new Parameter(mirror.simpleName, |
| (...skipping 28 matching lines...) Expand all Loading... | |
| 417 inputMap.forEach((key, value) { | 436 inputMap.forEach((key, value) { |
| 418 if (value is Map) { | 437 if (value is Map) { |
| 419 outputMap[key] = recurseMap(value); | 438 outputMap[key] = recurseMap(value); |
| 420 } else { | 439 } else { |
| 421 outputMap[key] = value.toMap(); | 440 outputMap[key] = value.toMap(); |
| 422 } | 441 } |
| 423 }); | 442 }); |
| 424 return outputMap; | 443 return outputMap; |
| 425 } | 444 } |
| 426 | 445 |
| 446 bool isError(String qualifiedName) { | |
| 447 return qualifiedName.toLowerCase().contains('error') || | |
| 448 qualifiedName.toLowerCase().contains('exception'); | |
| 449 } | |
| 450 | |
| 427 /** | 451 /** |
| 428 * A class representing all programming constructs, like library or class. | 452 * A class representing all programming constructs, like library or class. |
| 429 */ | 453 */ |
| 430 class IndexableItem { | 454 class IndexableItem { |
| 431 IndexableItem(String qualifiedName) { | 455 IndexableItem(String qualifiedName) { |
| 432 qualifiedNameIndex.add(qualifiedName); | 456 qualifiedNameIndex.add(qualifiedName); |
| 433 } | 457 } |
| 434 } | 458 } |
| 435 | 459 |
| 436 /** | 460 /** |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 482 List<String> interfaces; | 506 List<String> interfaces; |
| 483 | 507 |
| 484 /// Top-level variables in the class. | 508 /// Top-level variables in the class. |
| 485 Map<String, Variable> variables; | 509 Map<String, Variable> variables; |
| 486 | 510 |
| 487 /// Methods in the class. | 511 /// Methods in the class. |
| 488 Map<String, Map<String, Method>> methods; | 512 Map<String, Map<String, Method>> methods; |
| 489 | 513 |
| 490 String name; | 514 String name; |
| 491 String superclass; | 515 String superclass; |
| 492 bool isAbstract; | |
| 493 bool isTypedef; | |
| 494 | 516 |
| 495 /// List of the meta annotations on the class. | 517 /// List of the meta annotations on the class. |
| 496 List<String> annotations; | 518 List<String> annotations; |
| 497 | 519 |
| 498 Class(this.name, this.superclass, this.isAbstract, this.isTypedef, | 520 Class(this.name, this.superclass, this.comment, this.interfaces, |
| 499 this.comment, this.interfaces, this.variables, this.methods, | 521 this.variables, this.methods, this.annotations, |
| 500 this.annotations, String qualifiedName) : super(qualifiedName) {} | 522 String qualifiedName) : super(qualifiedName) {} |
| 501 | 523 |
| 502 /// Generates a map describing the [Class] object. | 524 /// Generates a map describing the [Class] object. |
| 503 Map toMap() { | 525 Map toMap() { |
| 504 var classMap = {}; | 526 var classMap = {}; |
| 505 classMap['name'] = name; | 527 classMap['name'] = name; |
| 506 classMap['comment'] = comment; | 528 classMap['comment'] = comment; |
| 507 classMap['superclass'] = superclass; | 529 classMap['superclass'] = superclass; |
| 508 classMap['abstract'] = isAbstract.toString(); | |
| 509 classMap['typedef'] = isTypedef.toString(); | |
| 510 classMap['implements'] = new List.from(interfaces); | 530 classMap['implements'] = new List.from(interfaces); |
| 511 classMap['variables'] = recurseMap(variables); | 531 classMap['variables'] = recurseMap(variables); |
| 512 classMap['methods'] = recurseMap(methods); | 532 classMap['methods'] = recurseMap(methods); |
| 513 classMap['annotations'] = new List.from(annotations); | 533 classMap['annotations'] = new List.from(annotations); |
| 514 return classMap; | 534 return classMap; |
| 515 } | 535 } |
| 516 } | 536 } |
| 517 | 537 |
| 518 /** | 538 /** |
| 519 * A class containing properties of a Dart variable. | 539 * A class containing properties of a Dart variable. |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 606 parameterMap['name'] = name; | 626 parameterMap['name'] = name; |
| 607 parameterMap['optional'] = isOptional.toString(); | 627 parameterMap['optional'] = isOptional.toString(); |
| 608 parameterMap['named'] = isNamed.toString(); | 628 parameterMap['named'] = isNamed.toString(); |
| 609 parameterMap['default'] = hasDefaultValue.toString(); | 629 parameterMap['default'] = hasDefaultValue.toString(); |
| 610 parameterMap['type'] = type; | 630 parameterMap['type'] = type; |
| 611 parameterMap['value'] = defaultValue; | 631 parameterMap['value'] = defaultValue; |
| 612 parameterMap['annotations'] = new List.from(annotations); | 632 parameterMap['annotations'] = new List.from(annotations); |
| 613 return parameterMap; | 633 return parameterMap; |
| 614 } | 634 } |
| 615 } | 635 } |
| OLD | NEW |