@@ -698,115 +698,50 @@ class Class extends ModelElement
698
698
}
699
699
700
700
List <Method > get inheritedMethods {
701
- if (_inheritedMethods != null ) return _inheritedMethods;
702
-
703
- Map <String , ExecutableElement > cmap =
704
- library.inheritanceManager.getMembersInheritedFromClasses (element);
705
- Map <String , ExecutableElement > imap =
706
- library.inheritanceManager.getMembersInheritedFromInterfaces (element);
707
-
708
- // remove methods that exist on this class
709
- _methods.forEach ((method) {
710
- cmap.remove (method.name);
711
- imap.remove (method.name);
712
- });
713
-
714
- _inheritedMethods = [];
715
- List <ExecutableElement > values = [];
716
- Set <String > uniqueNames = new Set ();
717
-
718
- instanceProperties.forEach ((f) {
719
- if (f.setter != null ) uniqueNames.add (f.setter.element.name);
720
- if (f.getter != null ) uniqueNames.add (f.getter.element.name);
721
- });
722
-
723
- for (String key in cmap.keys) {
724
- // XXX: if we care about showing a hierarchy with our inherited methods,
725
- // then don't do this
726
- if (uniqueNames.contains (key)) continue ;
727
-
728
- uniqueNames.add (key);
729
- values.add (cmap[key]);
730
- }
731
-
732
- for (String key in imap.keys) {
733
- // XXX: if we care about showing a hierarchy with our inherited methods,
734
- // then don't do this
735
- if (uniqueNames.contains (key)) continue ;
736
-
737
- uniqueNames.add (key);
738
- values.add (imap[key]);
739
- }
740
-
741
- for (ExecutableElement value in values) {
742
- if (value != null &&
743
- value is MethodElement &&
744
- ! value.isOperator &&
745
- value.enclosingElement != null ) {
746
- Method m;
747
- m = new ModelElement .from (value, library, enclosingClass: this );
701
+ if (_inheritedMethods == null ) {
702
+ _inheritedMethods = new List <Method >();
703
+ Set <String > methodNames = _methods.map ((m) => m.element.name).toSet ();
704
+
705
+ Set <ExecutableElement > inheritedMethodElements =
706
+ _inheritedElements.where ((e) {
707
+ return (e is MethodElement &&
708
+ ! e.isOperator &&
709
+ e is ! PropertyAccessorElement &&
710
+ ! methodNames.contains (e.name));
711
+ }).toSet ();
712
+
713
+ for (ExecutableElement e in inheritedMethodElements) {
714
+ Method m = new ModelElement .from (e, library, enclosingClass: this );
748
715
_inheritedMethods.add (m);
749
716
_genPageMethods.add (m);
750
717
}
718
+ _inheritedMethods.sort (byName);
751
719
}
752
-
753
- _inheritedMethods.sort (byName);
754
-
755
720
return _inheritedMethods;
756
721
}
757
722
758
723
Iterable get publicInheritedMethods => filterNonPublic (inheritedMethods);
759
724
760
725
bool get hasPublicInheritedMethods => publicInheritedMethods.isNotEmpty;
761
726
762
- // TODO(jcollins-g): this is very copy-paste from inheritedMethods now that the
763
- // constructor is always [ModelElement.from]. Fix this.
764
727
List <Operator > get inheritedOperators {
765
- if (_inheritedOperators != null ) return _inheritedOperators;
766
- Map <String , ExecutableElement > cmap =
767
- library.inheritanceManager.getMembersInheritedFromClasses (element);
768
- Map <String , ExecutableElement > imap =
769
- library.inheritanceManager.getMembersInheritedFromInterfaces (element);
770
- operators.forEach ((operator ) {
771
- cmap.remove (operator .element.name);
772
- imap.remove (operator .element.name);
773
- });
774
- _inheritedOperators = [];
775
- Map <String , ExecutableElement > values = {};
776
-
777
- bool _isInheritedOperator (ExecutableElement value) {
778
- if (value != null &&
779
- value is MethodElement &&
780
- ! value.isPrivate &&
781
- value.isOperator &&
782
- value.enclosingElement != null ) {
783
- return true ;
728
+ if (_inheritedOperators == null ) {
729
+ _inheritedOperators = [];
730
+ Set <String > operatorNames = _operators.map ((o) => o.element.name).toSet ();
731
+
732
+ Set <ExecutableElement > inheritedOperatorElements =
733
+ _inheritedElements.where ((e) {
734
+ return (e is MethodElement &&
735
+ e.isOperator &&
736
+ ! operatorNames.contains (e.name));
737
+ }).toSet ();
738
+ for (ExecutableElement e in inheritedOperatorElements) {
739
+ Operator o = new ModelElement .from (e, library, enclosingClass: this );
740
+ _inheritedOperators.add (o);
741
+ _genPageOperators.add (o);
784
742
}
785
- return false ;
786
- }
787
-
788
- for (String key in imap.keys) {
789
- ExecutableElement value = imap[key];
790
- if (_isInheritedOperator (value)) {
791
- values.putIfAbsent (value.name, () => value);
792
- }
793
- }
794
-
795
- for (String key in cmap.keys) {
796
- ExecutableElement value = cmap[key];
797
- if (_isInheritedOperator (value)) {
798
- values.putIfAbsent (value.name, () => value);
799
- }
800
- }
801
-
802
- for (ExecutableElement value in values.values) {
803
- Operator o = new ModelElement .from (value, library, enclosingClass: this );
804
- _inheritedOperators.add (o);
805
- _genPageOperators.add (o);
743
+ _inheritedOperators.sort (byName);
806
744
}
807
-
808
- _inheritedOperators.sort (byName);
809
-
810
745
return _inheritedOperators;
811
746
}
812
747
@@ -994,22 +929,26 @@ class Class extends ModelElement
994
929
995
930
ElementType get supertype => _supertype;
996
931
932
+ List <ExecutableElement > __inheritedElements;
933
+ List <ExecutableElement > get _inheritedElements {
934
+ if (__inheritedElements == null ) {
935
+ __inheritedElements = [];
936
+ Map <String , ExecutableElement > cmap =
937
+ library.inheritanceManager.getMembersInheritedFromClasses (element);
938
+ Map <String , ExecutableElement > imap =
939
+ library.inheritanceManager.getMembersInheritedFromInterfaces (element);
940
+ __inheritedElements.addAll (cmap.values);
941
+ __inheritedElements
942
+ .addAll (imap.values.where ((e) => ! cmap.containsKey (e.name)));
943
+ }
944
+ return __inheritedElements;
945
+ }
946
+
997
947
List <Field > get allFields {
998
948
if (_fields != null ) return _fields;
999
949
_fields = [];
1000
- Map <String , ExecutableElement > cmap =
1001
- library.inheritanceManager.getMembersInheritedFromClasses (element);
1002
- Map <String , ExecutableElement > imap =
1003
- library.inheritanceManager.getMembersInheritedFromInterfaces (element);
1004
-
1005
- Set <PropertyAccessorElement > inheritedAccessors = new Set ();
1006
- inheritedAccessors
1007
- .addAll (cmap.values.where ((e) => e is PropertyAccessorElement ));
1008
-
1009
- // Interfaces are subordinate to members inherited from classes, so don't
1010
- // add this to our accessor set if we already have something inherited from classes.
1011
- inheritedAccessors.addAll (imap.values.where (
1012
- (e) => e is PropertyAccessorElement && ! cmap.containsKey (e.name)));
950
+ Set <PropertyAccessorElement > inheritedAccessors = new Set ()
951
+ ..addAll (_inheritedElements.where ((e) => e is PropertyAccessorElement ));
1013
952
1014
953
// This structure keeps track of inherited accessors, allowing lookup
1015
954
// by field name (stripping the '=' from setters).
@@ -5091,6 +5030,7 @@ class PackageBuilder {
5091
5030
PerformanceLog log = new PerformanceLog (null );
5092
5031
AnalysisDriverScheduler scheduler = new AnalysisDriverScheduler (log);
5093
5032
AnalysisOptionsImpl options = new AnalysisOptionsImpl ();
5033
+ options.strongMode = true ;
5094
5034
options.enableSuperMixins = true ;
5095
5035
5096
5036
// TODO(jcollins-g): Make use of currently not existing API for managing
0 commit comments