OLD | NEW |
---|---|
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 library analyzer.src.dart.element.element; | 5 library analyzer.src.dart.element.element; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 import 'dart:math' show min; | 8 import 'dart:math' show min; |
9 | 9 |
10 import 'package:analyzer/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
(...skipping 1136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1147 ClassElement currentElement = currentType.element; | 1147 ClassElement currentElement = currentType.element; |
1148 if (!visitedClasses.contains(currentElement)) { | 1148 if (!visitedClasses.contains(currentElement)) { |
1149 visitedClasses.add(currentElement); | 1149 visitedClasses.add(currentElement); |
1150 if (!identical(currentType, this.type)) { | 1150 if (!identical(currentType, this.type)) { |
1151 supertypes.add(currentType); | 1151 supertypes.add(currentType); |
1152 } | 1152 } |
1153 InterfaceType supertype = currentType.superclass; | 1153 InterfaceType supertype = currentType.superclass; |
1154 if (supertype != null) { | 1154 if (supertype != null) { |
1155 typesToVisit.add(supertype); | 1155 typesToVisit.add(supertype); |
1156 } | 1156 } |
1157 for (InterfaceType type in currentElement.interfaces) { | 1157 for (InterfaceType type in currentType.interfaces) { |
Jennifer Messerly
2017/08/17 21:57:29
oh wow, nice catch!
| |
1158 typesToVisit.add(type); | 1158 typesToVisit.add(type); |
1159 } | 1159 } |
1160 for (InterfaceType type in currentElement.mixins) { | 1160 for (InterfaceType type in currentType.mixins) { |
1161 ClassElement element = type.element; | 1161 ClassElement element = type.element; |
1162 if (!visitedClasses.contains(element)) { | 1162 if (!visitedClasses.contains(element)) { |
1163 supertypes.add(type); | 1163 supertypes.add(type); |
1164 for (InterfaceType type in type.interfaces) { | |
Jennifer Messerly
2017/08/17 21:57:29
there's also the weird case where a mixin's mixin
Brian Wilkerson
2017/08/17 22:49:25
Is it still the case that classes used as mixins c
Jennifer Messerly
2017/08/17 23:14:39
oh yeah, good call! yeah with super mixins, the su
| |
1165 typesToVisit.add(type); | |
1166 } | |
1164 } | 1167 } |
1165 } | 1168 } |
1166 } | 1169 } |
1167 } | 1170 } |
1168 } | 1171 } |
1169 | 1172 |
1170 /** | 1173 /** |
1171 * Compute a list of constructors for this class, which is a mixin | 1174 * Compute a list of constructors for this class, which is a mixin |
1172 * application. If specified, [visitedClasses] is a list of the other mixin | 1175 * application. If specified, [visitedClasses] is a list of the other mixin |
1173 * application classes which have been visited on the way to reaching this | 1176 * application classes which have been visited on the way to reaching this |
(...skipping 8765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
9939 | 9942 |
9940 @override | 9943 @override |
9941 DartObject computeConstantValue() => null; | 9944 DartObject computeConstantValue() => null; |
9942 | 9945 |
9943 @override | 9946 @override |
9944 void visitChildren(ElementVisitor visitor) { | 9947 void visitChildren(ElementVisitor visitor) { |
9945 super.visitChildren(visitor); | 9948 super.visitChildren(visitor); |
9946 _initializer?.accept(visitor); | 9949 _initializer?.accept(visitor); |
9947 } | 9950 } |
9948 } | 9951 } |
OLD | NEW |