OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 /// Mixins that implement convenience methods on [Element] subclasses. | 5 /// Mixins that implement convenience methods on [Element] subclasses. |
6 | 6 |
7 library elements.common; | 7 library elements.common; |
8 | 8 |
9 import '../common/names.dart' show Identifiers, Names, Uris; | 9 import '../common/names.dart' show Identifiers, Names, Uris; |
10 import '../common_elements.dart' show CommonElements; | 10 import '../common_elements.dart' show CommonElements; |
11 import '../util/util.dart' show Link; | 11 import '../util/util.dart' show Link; |
12 import 'entities.dart'; | 12 import 'entities.dart'; |
13 import 'elements.dart'; | 13 import 'elements.dart'; |
| 14 import 'types.dart'; |
14 import 'resolution_types.dart' | 15 import 'resolution_types.dart' |
15 show ResolutionDartType, ResolutionInterfaceType, ResolutionFunctionType; | 16 show ResolutionDartType, ResolutionInterfaceType, ResolutionFunctionType; |
16 | 17 |
17 abstract class ElementCommon implements Element { | 18 abstract class ElementCommon implements Element { |
18 @override | 19 @override |
19 bool get isLibrary => kind == ElementKind.LIBRARY; | 20 bool get isLibrary => kind == ElementKind.LIBRARY; |
20 | 21 |
21 @override | 22 @override |
22 bool get isCompilationUnit => kind == ElementKind.COMPILATION_UNIT; | 23 bool get isCompilationUnit => kind == ElementKind.COMPILATION_UNIT; |
23 | 24 |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 String path = canonicalUri.path; | 184 String path = canonicalUri.path; |
184 return path.substring(path.lastIndexOf('/') + 1); | 185 return path.substring(path.lastIndexOf('/') + 1); |
185 } | 186 } |
186 } | 187 } |
187 } | 188 } |
188 | 189 |
189 abstract class CompilationUnitElementCommon implements CompilationUnitElement {} | 190 abstract class CompilationUnitElementCommon implements CompilationUnitElement {} |
190 | 191 |
191 abstract class ClassElementCommon implements ClassElement { | 192 abstract class ClassElementCommon implements ClassElement { |
192 @override | 193 @override |
193 Link<ResolutionDartType> get allSupertypes => allSupertypesAndSelf.supertypes; | 194 Link<InterfaceType> get allSupertypes => allSupertypesAndSelf.supertypes; |
194 | 195 |
195 @override | 196 @override |
196 int get hierarchyDepth => allSupertypesAndSelf.maxDepth; | 197 int get hierarchyDepth => allSupertypesAndSelf.maxDepth; |
197 | 198 |
198 @override | 199 @override |
199 ResolutionInterfaceType asInstanceOf(ClassElement cls) { | 200 ResolutionInterfaceType asInstanceOf(ClassElement cls) { |
200 if (cls == this) return thisType; | 201 if (cls == this) return thisType; |
201 return allSupertypesAndSelf.asInstanceOf(cls); | 202 return allSupertypesAndSelf.asInstanceOf(cls, cls.hierarchyDepth); |
202 } | 203 } |
203 | 204 |
204 @override | 205 @override |
205 ConstructorElement lookupConstructor(String name) { | 206 ConstructorElement lookupConstructor(String name) { |
206 Element result = localLookup(name); | 207 Element result = localLookup(name); |
207 return result != null && result.isConstructor ? result : null; | 208 return result != null && result.isConstructor ? result : null; |
208 } | 209 } |
209 | 210 |
210 /** | 211 /** |
211 * Find the first member in the class chain with the given [memberName]. | 212 * Find the first member in the class chain with the given [memberName]. |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 return true; | 429 return true; |
429 } | 430 } |
430 } | 431 } |
431 } | 432 } |
432 lookupClass = lookupClass.superclass; | 433 lookupClass = lookupClass.superclass; |
433 } | 434 } |
434 return false; | 435 return false; |
435 } | 436 } |
436 | 437 |
437 @override | 438 @override |
438 bool implementsInterface(ClassElement intrface) { | 439 bool implementsInterface(ClassElement interface) { |
439 return this != intrface && | 440 return this != interface && |
440 allSupertypesAndSelf.asInstanceOf(intrface) != null; | 441 allSupertypesAndSelf.asInstanceOf( |
| 442 interface, interface.hierarchyDepth) != |
| 443 null; |
441 } | 444 } |
442 | 445 |
443 @override | 446 @override |
444 bool implementsFunction(CommonElements commonElements) { | 447 bool implementsFunction(CommonElements commonElements) { |
445 return asInstanceOf(commonElements.functionClass) != null || | 448 return asInstanceOf(commonElements.functionClass) != null || |
446 callType != null; | 449 callType != null; |
447 } | 450 } |
448 | 451 |
449 @override | 452 @override |
450 bool isSubclassOf(ClassElement cls) { | 453 bool isSubclassOf(ClassElement cls) { |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
669 @override | 672 @override |
670 bool get isBoolFromEnvironmentConstructor { | 673 bool get isBoolFromEnvironmentConstructor { |
671 return fromEnvironmentState == _FromEnvironmentState.BOOL; | 674 return fromEnvironmentState == _FromEnvironmentState.BOOL; |
672 } | 675 } |
673 | 676 |
674 @override | 677 @override |
675 bool get isStringFromEnvironmentConstructor { | 678 bool get isStringFromEnvironmentConstructor { |
676 return fromEnvironmentState == _FromEnvironmentState.STRING; | 679 return fromEnvironmentState == _FromEnvironmentState.STRING; |
677 } | 680 } |
678 } | 681 } |
OLD | NEW |