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

Side by Side Diff: pkg/docgen/lib/docgen.dart

Issue 21619003: Added inherited comments, and where they are inherited from. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 602 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 this.isPrivate = true; 613 this.isPrivate = true;
614 // Since we are now making the mixin a private class, make all elements 614 // Since we are now making the mixin a private class, make all elements
615 // with the mixin as an owner private too. 615 // with the mixin as an owner private too.
616 entityMap.values.where((e) => e.owner == qualifiedName) 616 entityMap.values.where((e) => e.owner == qualifiedName)
617 .forEach((element) => element.isPrivate = true); 617 .forEach((element) => element.isPrivate = true);
618 // Move the subclass up to the next public superclass 618 // Move the subclass up to the next public superclass
619 subclasses.forEach((subclass) => addSubclass(entityMap[subclass])); 619 subclasses.forEach((subclass) => addSubclass(entityMap[subclass]));
620 } 620 }
621 } 621 }
622 622
623 /**
624 * Makes sure that all methods with inherited equivalents have comments.
625 */
626 void ensureComments() {
627 inheritedMethods.keys.forEach((qualifiedName) {
628 var method = methods[qualifiedName];
Alan Knight 2013/08/02 18:32:22 Since you're actually using the value, this might
janicejl 2013/08/02 21:40:27 Done.
629 if (method != null) {
630 if (method.comment == "") {
Alan Knight 2013/08/02 18:32:22 I think this might also work better if you named t
janicejl 2013/08/02 21:40:27 Done.
631 var inheritedMethod = inheritedMethods[qualifiedName];
632 method.comment = inheritedMethod.comment;
633 if (method.comment != "") {
Alan Knight 2013/08/02 18:32:22 In fact, I think this could be rewritten to be muc
janicejl 2013/08/02 21:40:27 Done.
634 method.commentInheritedFrom =
635 inheritedMethod.commentInheritedFrom == "" ?
636 inheritedMethod.qualifiedName :
637 inheritedMethod.commentInheritedFrom;
638 } else {
639 entityMap[inheritedMethod.owner].ensureComments();
640 method.comment = inheritedMethod.comment;
641 method.commentInheritedFrom = inheritedMethod.commentInheritedFrom;
642 }
643 }
644 }
645 });
646 }
647
623 /// Generates a map describing the [Class] object. 648 /// Generates a map describing the [Class] object.
624 Map toMap() => { 649 Map toMap() => {
625 'name': name, 650 'name': name,
626 'qualifiedname': qualifiedName, 651 'qualifiedname': qualifiedName,
627 'comment': comment, 652 'comment': comment,
628 'superclass': superclass == null ? "" : (_filterPrivate(superclass)) ? 653 'superclass': superclass == null ? "" : (_filterPrivate(superclass)) ?
629 superclass.qualifiedName : "", 654 superclass.qualifiedName : "",
630 'implements': new List.from(interfaces.where((e) => _filterPrivate(e)) 655 'implements': new List.from(interfaces.where((e) => _filterPrivate(e))
631 .map((e) => e.qualifiedName)), 656 .map((e) => e.qualifiedName)),
632 'subclass': new List.from(subclasses), 657 'subclass': new List.from(subclasses),
(...skipping 20 matching lines...) Expand all
653 _currentClass = mirror; 678 _currentClass = mirror;
654 var clazz = _class(mirror); 679 var clazz = _class(mirror);
655 680
656 // Adding inherited parent variables and methods. 681 // Adding inherited parent variables and methods.
657 clazz.parent().forEach((parent) { 682 clazz.parent().forEach((parent) {
658 if (_filterPrivate(clazz)) { 683 if (_filterPrivate(clazz)) {
659 parent.addSubclass(clazz); 684 parent.addSubclass(clazz);
660 } 685 }
661 clazz.addInherited(parent); 686 clazz.addInherited(parent);
662 }); 687 });
688
689 clazz.ensureComments();
663 690
664 if (isError(mirror.qualifiedName)) { 691 if (isError(mirror.qualifiedName)) {
665 errors[mirror.simpleName] = clazz; 692 errors[mirror.simpleName] = clazz;
666 } else if (mirror.isTypedef) { 693 } else if (mirror.isTypedef) {
667 if (_includePrivate || !mirror.isPrivate) { 694 if (_includePrivate || !mirror.isPrivate) {
668 entityMap[mirror.qualifiedName] = new Typedef(mirror.simpleName, 695 entityMap[mirror.qualifiedName] = new Typedef(mirror.simpleName,
669 mirror.value.returnType.qualifiedName, _commentToHtml(mirror), 696 mirror.value.returnType.qualifiedName, _commentToHtml(mirror),
670 _generics(mirror), _parameters(mirror.value.parameters), 697 _generics(mirror), _parameters(mirror.value.parameters),
671 _annotations(mirror), mirror.qualifiedName, _isPrivate(mirror), 698 _annotations(mirror), mirror.qualifiedName, _isPrivate(mirror),
672 mirror.owner.qualifiedName); 699 mirror.owner.qualifiedName);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
764 class Method extends Indexable { 791 class Method extends Indexable {
765 792
766 /// Parameters for this method. 793 /// Parameters for this method.
767 Map<String, Parameter> parameters; 794 Map<String, Parameter> parameters;
768 795
769 bool isStatic; 796 bool isStatic;
770 bool isAbstract; 797 bool isAbstract;
771 bool isConst; 798 bool isConst;
772 Type returnType; 799 Type returnType;
773 800
801 /// Qualified name to state where the comment is inherited from.
802 String commentInheritedFrom = "";
803
774 /// List of the meta annotations on the method. 804 /// List of the meta annotations on the method.
775 List<String> annotations; 805 List<String> annotations;
776 806
777 Method(String name, this.isStatic, this.isAbstract, this.isConst, 807 Method(String name, this.isStatic, this.isAbstract, this.isConst,
778 this.returnType, String comment, this.parameters, this.annotations, 808 this.returnType, String comment, this.parameters, this.annotations,
779 String qualifiedName, bool isPrivate, String owner) : super(name, comment, 809 String qualifiedName, bool isPrivate, String owner) : super(name, comment,
780 qualifiedName, isPrivate, owner); 810 qualifiedName, isPrivate, owner);
781 811
782 /// Generates a map describing the [Method] object. 812 /// Generates a map describing the [Method] object.
783 Map toMap() => { 813 Map toMap() => {
784 'name': name, 814 'name': name,
785 'qualifiedname': qualifiedName, 815 'qualifiedname': qualifiedName,
786 'comment': comment, 816 'comment': comment,
817 'commentfrom': commentInheritedFrom,
787 'static': isStatic.toString(), 818 'static': isStatic.toString(),
788 'abstract': isAbstract.toString(), 819 'abstract': isAbstract.toString(),
789 'constant': isConst.toString(), 820 'constant': isConst.toString(),
790 'return': new List.filled(1, returnType.toMap()), 821 'return': new List.filled(1, returnType.toMap()),
791 'parameters': recurseMap(parameters), 822 'parameters': recurseMap(parameters),
792 'annotations': new List.from(annotations) 823 'annotations': new List.from(annotations)
793 }; 824 };
794 } 825 }
795 826
796 /** 827 /**
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 } 871 }
841 } 872 }
842 873
843 Map toMap() => { 874 Map toMap() => {
844 'setters': recurseMap(setters), 875 'setters': recurseMap(setters),
845 'getters': recurseMap(getters), 876 'getters': recurseMap(getters),
846 'constructors': recurseMap(constructors), 877 'constructors': recurseMap(constructors),
847 'operators': recurseMap(operators), 878 'operators': recurseMap(operators),
848 'methods': recurseMap(regularMethods) 879 'methods': recurseMap(regularMethods)
849 }; 880 };
881
882 Method operator [](String qualifiedName) {
883 var method = setters[qualifiedName];
Alan Knight 2013/08/02 18:32:22 I don't love the deep nesting. Redo as a loop over
janicejl 2013/08/02 21:40:27 Done.
884 if (method != null) return method;
885 else {
886 method = getters[qualifiedName];
887 if (method != null) return method;
888 else {
889 method = operators[qualifiedName];
890 if (method != null) return method;
891 else {
892 method = regularMethods[qualifiedName];
893 if (method != null) return method;
894 else return null;
895 }
896 }
897 }
898 }
899
900 Iterable<String> get keys {
Alan Knight 2013/08/02 18:32:22 => [setters, getters, operators, regularMethods].e
janicejl 2013/08/02 21:40:27 Done.
901 var qualifiedNames = [];
902 qualifiedNames.addAll(setters.keys);
903 qualifiedNames.addAll(getters.keys);
904 qualifiedNames.addAll(operators.keys);
905 qualifiedNames.addAll(regularMethods.keys);
906 return qualifiedNames;
907 }
850 } 908 }
851 909
852 /** 910 /**
853 * A class containing properties of a Dart method/function parameter. 911 * A class containing properties of a Dart method/function parameter.
854 */ 912 */
855 class Parameter { 913 class Parameter {
856 914
857 String name; 915 String name;
858 bool isOptional; 916 bool isOptional;
859 bool isNamed; 917 bool isNamed;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 String outer; 986 String outer;
929 List<Type> inner; 987 List<Type> inner;
930 988
931 Type(this.outer, this.inner); 989 Type(this.outer, this.inner);
932 990
933 Map toMap() => { 991 Map toMap() => {
934 'outer': outer, 992 'outer': outer,
935 'inner': new List.from(inner.map((e) => e.toMap())) 993 'inner': new List.from(inner.map((e) => e.toMap()))
936 }; 994 };
937 } 995 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698