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

Side by Side Diff: pkg/analysis_server/lib/src/services/index/indexable_element.dart

Issue 1413563004: Make IndexableObjectKind parameterized. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Clean up IndexableElementKind. Created 5 years, 2 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
OLDNEW
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/plugin/index/index_core.dart'; 9 import 'package:analysis_server/plugin/index/index_core.dart';
10 import 'package:analyzer/src/generated/element.dart'; 10 import 'package:analyzer/src/generated/element.dart';
(...skipping 13 matching lines...) Expand all
24 /** 24 /**
25 * Initialize a newly created wrapper to wrap the given [element]. 25 * Initialize a newly created wrapper to wrap the given [element].
26 */ 26 */
27 IndexableElement(this.element) { 27 IndexableElement(this.element) {
28 if (element == null) { 28 if (element == null) {
29 throw new ArgumentError.notNull('element'); 29 throw new ArgumentError.notNull('element');
30 } 30 }
31 } 31 }
32 32
33 @override 33 @override
34 String get filePath {
35 return element.source?.fullName;
36 }
37
38 @override
34 int get hashCode => element.hashCode; 39 int get hashCode => element.hashCode;
35 40
36 @override 41 @override
37 IndexableObjectKind get kind => IndexableElementKind.forElement(element); 42 IndexableElementKind get kind => IndexableElementKind.forElement(element);
38 43
39 @override 44 @override
40 int get offset { 45 int get offset {
41 if (element is ConstructorElement) { 46 if (element is ConstructorElement) {
42 return element.enclosingElement.nameOffset; 47 return element.enclosingElement.nameOffset;
43 } 48 }
44 return element.nameOffset; 49 return element.nameOffset;
45 } 50 }
46 51
47 @override 52 @override
48 String get filePath {
49 return element.source?.fullName;
50 }
51
52 @override
53 bool operator ==(Object object) => 53 bool operator ==(Object object) =>
54 object is IndexableElement && element == object.element; 54 object is IndexableElement && element == object.element;
55 55
56 @override 56 @override
57 String toString() => element.toString(); 57 String toString() => element.toString();
58 } 58 }
59 59
60 /** 60 /**
61 * The kind associated with an [IndexableElement]. 61 * The kind associated with an [IndexableElement].
62 */ 62 */
63 class IndexableElementKind implements IndexableObjectKind { 63 class IndexableElementKind implements IndexableObjectKind<IndexableElement> {
64 /** 64 /**
65 * A table mapping element kinds to the corresponding indexable element kind. 65 * A table mapping element kinds to the corresponding indexable element kind.
66 */ 66 */
67 static final Map<ElementKind, IndexableElementKind> _kindMap = 67 static final Map<ElementKind, IndexableElementKind> _kindMap =
68 new HashMap<ElementKind, IndexableElementKind>(); 68 new HashMap<ElementKind, IndexableElementKind>();
69 69
70 /** 70 /**
71 * A table mapping the index of a constructor (in the lexically-ordered list 71 * A table mapping the index of a constructor (in the lexically-ordered list
72 * of constructors associated with a class) to the indexable element kind used 72 * of constructors associated with a class) to the indexable element kind used
73 * to represent it. 73 * to represent it.
(...skipping 23 matching lines...) Expand all
97 int get constructorIndex { 97 int get constructorIndex {
98 for (int index in _constructorKinds.keys) { 98 for (int index in _constructorKinds.keys) {
99 if (_constructorKinds[index] == this) { 99 if (_constructorKinds[index] == this) {
100 return index; 100 return index;
101 } 101 }
102 } 102 }
103 return -1; 103 return -1;
104 } 104 }
105 105
106 @override 106 @override
107 IndexableObject decode(AnalysisContext context, String filePath, int offset) { 107 IndexableElement decode(
108 AnalysisContext context, String filePath, int offset) {
108 List<Source> unitSources = context.getSourcesWithFullName(filePath); 109 List<Source> unitSources = context.getSourcesWithFullName(filePath);
109 for (Source unitSource in unitSources) { 110 for (Source unitSource in unitSources) {
110 List<Source> libSources = context.getLibrariesContaining(unitSource); 111 List<Source> libSources = context.getLibrariesContaining(unitSource);
111 for (Source libSource in libSources) { 112 for (Source libSource in libSources) {
112 CompilationUnitElement unitElement = 113 CompilationUnitElement unitElement =
113 context.getCompilationUnitElement(unitSource, libSource); 114 context.getCompilationUnitElement(unitSource, libSource);
114 if (unitElement == null) { 115 if (unitElement == null) {
115 return null; 116 return null;
116 } 117 }
117 if (elementKind == ElementKind.LIBRARY) { 118 if (elementKind == ElementKind.LIBRARY) {
(...skipping 18 matching lines...) Expand all
136 } 137 }
137 } 138 }
138 return new IndexableElement(element); 139 return new IndexableElement(element);
139 } 140 }
140 } 141 }
141 } 142 }
142 return null; 143 return null;
143 } 144 }
144 145
145 @override 146 @override
146 int encodeHash(StringToInt stringToInt, IndexableObject indexable) { 147 int encodeHash(StringToInt stringToInt, IndexableElement indexable) {
147 Element element = (indexable as IndexableElement).element; 148 Element element = indexable.element;
148 String elementName = element.displayName; 149 String elementName = element.displayName;
149 int elementNameId = stringToInt(elementName); 150 int elementNameId = stringToInt(elementName);
150 if (indexable is IndexableElement) { 151 LibraryElement libraryElement = element.library;
151 LibraryElement libraryElement = indexable.element.library; 152 if (libraryElement != null) {
152 if (libraryElement != null) { 153 String libraryPath = libraryElement.source.fullName;
153 String libraryPath = libraryElement.source.fullName; 154 int libraryPathId = stringToInt(libraryPath);
154 int libraryPathId = stringToInt(libraryPath); 155 return JenkinsSmiHash.combine(libraryPathId, elementNameId);
155 return JenkinsSmiHash.combine(libraryPathId, elementNameId);
156 }
157 } 156 }
158 return elementNameId; 157 return elementNameId;
159 } 158 }
160 159
161 /** 160 /**
162 * Return the indexable element kind representing the given [element]. 161 * Return the indexable element kind representing the given [element].
163 */ 162 */
164 static IndexableElementKind forElement(Element element) { 163 static IndexableElementKind forElement(Element element) {
165 if (element is ConstructorElement) { 164 if (element is ConstructorElement) {
166 ClassElement classElement = element.enclosingElement; 165 ClassElement classElement = element.enclosingElement;
167 int constructorIndex = classElement.constructors.indexOf(element); 166 int constructorIndex = classElement.constructors.indexOf(element);
168 return _constructorKinds.putIfAbsent(constructorIndex, 167 return _constructorKinds.putIfAbsent(constructorIndex,
169 () => new IndexableElementKind._(ElementKind.CONSTRUCTOR)); 168 () => new IndexableElementKind._(ElementKind.CONSTRUCTOR));
170 } 169 }
171 ElementKind elementKind = element.kind; 170 ElementKind elementKind = element.kind;
172 return _kindMap.putIfAbsent( 171 return _kindMap.putIfAbsent(
173 elementKind, () => new IndexableElementKind._(elementKind)); 172 elementKind, () => new IndexableElementKind._(elementKind));
174 } 173 }
175 } 174 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/services/index/index.dart ('k') | pkg/analysis_server/lib/src/services/index/indexable_file.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698