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

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.forEach((qualifiedName, inheritedMethod) {
628 var method = methods[qualifiedName];
629 if (method != null) method.ensureCommentFor(inheritedMethod);
630 });
631 }
632
623 /** 633 /**
624 * If a class extends a private superclass, find the closest public superclass 634 * If a class extends a private superclass, find the closest public superclass
625 * of the private superclass. 635 * of the private superclass.
626 */ 636 */
627 String validSuperclass() { 637 String validSuperclass() {
628 if (superclass == null) return 'dart.core.Object'; 638 if (superclass == null) return 'dart.core.Object';
629 if (_isVisible(superclass)) return superclass.qualifiedName; 639 if (_isVisible(superclass)) return superclass.qualifiedName;
630 return superclass.validSuperclass(); 640 return superclass.validSuperclass();
631 } 641 }
632 642
(...skipping 29 matching lines...) Expand all
662 _currentClass = mirror; 672 _currentClass = mirror;
663 var clazz = _class(mirror); 673 var clazz = _class(mirror);
664 674
665 // Adding inherited parent variables and methods. 675 // Adding inherited parent variables and methods.
666 clazz.parent().forEach((parent) { 676 clazz.parent().forEach((parent) {
667 if (_isVisible(clazz)) { 677 if (_isVisible(clazz)) {
668 parent.addSubclass(clazz); 678 parent.addSubclass(clazz);
669 } 679 }
670 clazz.addInherited(parent); 680 clazz.addInherited(parent);
671 }); 681 });
682
683 clazz.ensureComments();
672 684
673 if (isError(mirror.qualifiedName)) { 685 if (isError(mirror.qualifiedName)) {
674 errors[mirror.simpleName] = clazz; 686 errors[mirror.simpleName] = clazz;
675 } else if (mirror.isTypedef) { 687 } else if (mirror.isTypedef) {
676 if (_includePrivate || !mirror.isPrivate) { 688 if (_includePrivate || !mirror.isPrivate) {
677 entityMap[mirror.qualifiedName] = new Typedef(mirror.simpleName, 689 entityMap[mirror.qualifiedName] = new Typedef(mirror.simpleName,
678 mirror.value.returnType.qualifiedName, _commentToHtml(mirror), 690 mirror.value.returnType.qualifiedName, _commentToHtml(mirror),
679 _generics(mirror), _parameters(mirror.value.parameters), 691 _generics(mirror), _parameters(mirror.value.parameters),
680 _annotations(mirror), mirror.qualifiedName, _isPrivate(mirror), 692 _annotations(mirror), mirror.qualifiedName, _isPrivate(mirror),
681 mirror.owner.qualifiedName); 693 mirror.owner.qualifiedName);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 class Method extends Indexable { 785 class Method extends Indexable {
774 786
775 /// Parameters for this method. 787 /// Parameters for this method.
776 Map<String, Parameter> parameters; 788 Map<String, Parameter> parameters;
777 789
778 bool isStatic; 790 bool isStatic;
779 bool isAbstract; 791 bool isAbstract;
780 bool isConst; 792 bool isConst;
781 Type returnType; 793 Type returnType;
782 794
795 /// Qualified name to state where the comment is inherited from.
796 String commentInheritedFrom = "";
797
783 /// List of the meta annotations on the method. 798 /// List of the meta annotations on the method.
784 List<String> annotations; 799 List<String> annotations;
785 800
786 Method(String name, this.isStatic, this.isAbstract, this.isConst, 801 Method(String name, this.isStatic, this.isAbstract, this.isConst,
787 this.returnType, String comment, this.parameters, this.annotations, 802 this.returnType, String comment, this.parameters, this.annotations,
788 String qualifiedName, bool isPrivate, String owner) : super(name, comment, 803 String qualifiedName, bool isPrivate, String owner) : super(name, comment,
789 qualifiedName, isPrivate, owner); 804 qualifiedName, isPrivate, owner);
790 805
806 /**
807 * Makes sure that the method with an inherited equivalent have comments.
808 */
809 void ensureCommentFor(Method inheritedMethod) {
810 if (comment.isNotEmpty) return;
811 entityMap[inheritedMethod.owner].ensureComments();
812 comment = inheritedMethod.comment;
813 commentInheritedFrom = inheritedMethod.commentInheritedFrom == '' ?
814 inheritedMethod.qualifiedName : inheritedMethod.commentInheritedFrom;
815 }
816
791 /// Generates a map describing the [Method] object. 817 /// Generates a map describing the [Method] object.
792 Map toMap() => { 818 Map toMap() => {
793 'name': name, 819 'name': name,
794 'qualifiedname': qualifiedName, 820 'qualifiedname': qualifiedName,
795 'comment': comment, 821 'comment': comment,
822 'commentfrom': commentInheritedFrom,
796 'static': isStatic.toString(), 823 'static': isStatic.toString(),
797 'abstract': isAbstract.toString(), 824 'abstract': isAbstract.toString(),
798 'constant': isConst.toString(), 825 'constant': isConst.toString(),
799 'return': new List.filled(1, returnType.toMap()), 826 'return': new List.filled(1, returnType.toMap()),
800 'parameters': recurseMap(parameters), 827 'parameters': recurseMap(parameters),
801 'annotations': new List.from(annotations) 828 'annotations': new List.from(annotations)
802 }; 829 };
803 } 830 }
804 831
805 /** 832 /**
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 } 876 }
850 } 877 }
851 878
852 Map toMap() => { 879 Map toMap() => {
853 'setters': recurseMap(setters), 880 'setters': recurseMap(setters),
854 'getters': recurseMap(getters), 881 'getters': recurseMap(getters),
855 'constructors': recurseMap(constructors), 882 'constructors': recurseMap(constructors),
856 'operators': recurseMap(operators), 883 'operators': recurseMap(operators),
857 'methods': recurseMap(regularMethods) 884 'methods': recurseMap(regularMethods)
858 }; 885 };
886
887 Method operator [](String qualifiedName) {
888 if (setters.containsKey(qualifiedName)) return setters[qualifiedName];
889 if (getters.containsKey(qualifiedName)) return getters[qualifiedName];
890 if (operators.containsKey(qualifiedName)) return operators[qualifiedName];
891 if (regularMethods.containsKey(qualifiedName)) {
892 return regularMethods[qualifiedName];
893 }
894 return null;
895 }
896
897 void forEach(void f(String key, Method value)) {
898 setters.forEach(f);
899 getters.forEach(f);
900 operators.forEach(f);
901 regularMethods.forEach(f);
902 }
859 } 903 }
860 904
861 /** 905 /**
862 * A class containing properties of a Dart method/function parameter. 906 * A class containing properties of a Dart method/function parameter.
863 */ 907 */
864 class Parameter { 908 class Parameter {
865 909
866 String name; 910 String name;
867 bool isOptional; 911 bool isOptional;
868 bool isNamed; 912 bool isNamed;
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
937 String outer; 981 String outer;
938 List<Type> inner; 982 List<Type> inner;
939 983
940 Type(this.outer, this.inner); 984 Type(this.outer, this.inner);
941 985
942 Map toMap() => { 986 Map toMap() => {
943 'outer': outer, 987 'outer': outer,
944 'inner': new List.from(inner.map((e) => e.toMap())) 988 'inner': new List.from(inner.map((e) => e.toMap()))
945 }; 989 };
946 } 990 }
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