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 library src.services.index; | 5 library src.services.index; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 | 8 |
9 import 'package:analysis_server/analysis/index/index_core.dart'; | 9 import 'package:analysis_server/analysis/index/index_core.dart'; |
10 import 'package:analyzer/src/generated/element.dart'; | 10 import 'package:analyzer/src/generated/element.dart'; |
11 import 'package:analyzer/src/generated/engine.dart'; | 11 import 'package:analyzer/src/generated/engine.dart'; |
12 import 'package:analyzer/src/generated/source.dart'; | 12 import 'package:analyzer/src/generated/source.dart'; |
13 | 13 |
14 /** | 14 /** |
15 * A wrapper around an [Element] that implements the [IndexableObject] interface
. | 15 * A wrapper around an [Element] that implements the [IndexableObject] interface
. |
16 */ | 16 */ |
17 class IndexableElement implements IndexableObject { | 17 class IndexableElement implements IndexableObject { |
18 /** | 18 /** |
19 * The element being wrapped. | 19 * The element being wrapped. |
20 */ | 20 */ |
21 final Element element; | 21 final Element element; |
22 | 22 |
23 /** | 23 /** |
24 * Initialize a newly created wrapper to wrap the given [element]. | 24 * Initialize a newly created wrapper to wrap the given [element]. |
25 */ | 25 */ |
26 IndexableElement(this.element); | 26 IndexableElement(this.element) { |
| 27 if (element == null) { |
| 28 throw new ArgumentError.notNull('element'); |
| 29 } |
| 30 } |
27 | 31 |
28 @override | 32 @override |
29 int get hashCode => element.hashCode; | 33 int get hashCode => element.hashCode; |
30 | 34 |
31 @override | 35 @override |
32 IndexableObjectKind get kind => IndexableElementKind.forElement(element); | 36 IndexableObjectKind get kind => IndexableElementKind.forElement(element); |
33 | 37 |
34 @override | 38 @override |
35 int get length => element.displayName.length; | 39 int get length => element.displayName.length; |
36 | 40 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 * Return the indexable element kind representing the given [element]. | 149 * Return the indexable element kind representing the given [element]. |
146 */ | 150 */ |
147 static IndexableElementKind forElement(Element element) { | 151 static IndexableElementKind forElement(Element element) { |
148 if (element is ConstructorElement) { | 152 if (element is ConstructorElement) { |
149 ClassElement classElement = element.enclosingElement; | 153 ClassElement classElement = element.enclosingElement; |
150 int constructorIndex = classElement.constructors.indexOf(element); | 154 int constructorIndex = classElement.constructors.indexOf(element); |
151 return _constructorKinds.putIfAbsent(constructorIndex, | 155 return _constructorKinds.putIfAbsent(constructorIndex, |
152 () => new IndexableElementKind._(ElementKind.CONSTRUCTOR)); | 156 () => new IndexableElementKind._(ElementKind.CONSTRUCTOR)); |
153 } | 157 } |
154 ElementKind elementKind = element.kind; | 158 ElementKind elementKind = element.kind; |
155 return _kindMap.putIfAbsent(elementKind, () => | 159 return _kindMap.putIfAbsent( |
156 new IndexableElementKind._(elementKind)); | 160 elementKind, () => new IndexableElementKind._(elementKind)); |
157 } | 161 } |
158 } | 162 } |
OLD | NEW |