OLD | NEW |
---|---|
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 import 'dart:async'; | 5 import 'dart:async'; |
6 import 'dart:collection'; | 6 import 'dart:collection'; |
7 import 'dart:convert'; | 7 import 'dart:convert'; |
8 | 8 |
9 import 'package:analyzer/dart/ast/ast.dart'; | 9 import 'package:analyzer/dart/ast/ast.dart'; |
10 import 'package:analyzer/dart/ast/token.dart'; | 10 import 'package:analyzer/dart/ast/token.dart'; |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
101 */ | 101 */ |
102 final AnalysisOptions _analysisOptions; | 102 final AnalysisOptions _analysisOptions; |
103 | 103 |
104 /** | 104 /** |
105 * The combined unlinked and linked package for the SDK, extracted from | 105 * The combined unlinked and linked package for the SDK, extracted from |
106 * the given [_sourceFactory]. | 106 * the given [_sourceFactory]. |
107 */ | 107 */ |
108 PackageBundle _sdkBundle; | 108 PackageBundle _sdkBundle; |
109 | 109 |
110 /** | 110 /** |
111 * The set of explicitly analyzed files. | |
112 */ | |
113 final _explicitFiles = new LinkedHashSet<String>(); | |
114 | |
115 /** | |
116 * The set of priority files, that should be analyzed sooner. | |
117 */ | |
118 final _priorityFiles = new LinkedHashSet<String>(); | |
119 | |
120 /** | |
111 * The mapping from the files for which analysis was requested using | 121 * The mapping from the files for which analysis was requested using |
112 * [getResult] to the [Completer]s to report the result. | 122 * [getResult] to the [Completer]s to report the result. |
113 */ | 123 */ |
114 final _requestedFiles = <String, List<Completer<AnalysisResult>>>{}; | 124 final _requestedFiles = <String, List<Completer<AnalysisResult>>>{}; |
115 | 125 |
116 /** | 126 /** |
117 * The set of explicitly analyzed files. | |
118 */ | |
119 final _explicitFiles = new LinkedHashSet<String>(); | |
120 | |
121 /** | |
122 * The set of files were reported as changed through [changeFile] and not | 127 * The set of files were reported as changed through [changeFile] and not |
123 * checked for actual changes yet. | 128 * checked for actual changes yet. |
124 */ | 129 */ |
125 final _changedFiles = new LinkedHashSet<String>(); | 130 final _changedFiles = new LinkedHashSet<String>(); |
126 | 131 |
127 /** | 132 /** |
128 * The set of files that are currently scheduled for analysis. | 133 * The set of files that are currently scheduled for analysis. |
129 */ | 134 */ |
130 final _filesToAnalyze = new LinkedHashSet<String>(); | 135 final _filesToAnalyze = new LinkedHashSet<String>(); |
131 | 136 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
169 /** | 174 /** |
170 * Set the list of files that the driver should try to analyze sooner. | 175 * Set the list of files that the driver should try to analyze sooner. |
171 * | 176 * |
172 * Every path in the list must be absolute and normalized. | 177 * Every path in the list must be absolute and normalized. |
173 * | 178 * |
174 * The driver will produce the results through the [results] stream. The | 179 * The driver will produce the results through the [results] stream. The |
175 * exact order in which results are produced is not defined, neither | 180 * exact order in which results are produced is not defined, neither |
176 * between priority files, nor between priority and non-priority files. | 181 * between priority files, nor between priority and non-priority files. |
177 */ | 182 */ |
178 void set priorityFiles(List<String> priorityPaths) { | 183 void set priorityFiles(List<String> priorityPaths) { |
179 // TODO(scheglov) implement | 184 _priorityFiles.clear(); |
185 _priorityFiles.addAll(priorityPaths); | |
186 _hasWork.notify(); | |
180 } | 187 } |
181 | 188 |
182 /** | 189 /** |
183 * Return the [Stream] that produces [AnalysisResult]s for added files. | 190 * Return the [Stream] that produces [AnalysisResult]s for added files. |
184 * | 191 * |
185 * Analysis starts when the client starts listening to the stream, and stops | 192 * Analysis starts when the client starts listening to the stream, and stops |
186 * when the client cancels the subscription. | 193 * when the client cancels the subscription. |
187 * | 194 * |
188 * When the client starts listening, the analysis state transitions to | 195 * When the client starts listening, the analysis state transitions to |
189 * "analyzing" and an analysis result is produced for every added file prior | 196 * "analyzing" and an analysis result is produced for every added file prior |
(...skipping 23 matching lines...) Expand all Loading... | |
213 | 220 |
214 // Verify all changed files one at a time. | 221 // Verify all changed files one at a time. |
215 if (_changedFiles.isNotEmpty) { | 222 if (_changedFiles.isNotEmpty) { |
216 String path = _removeFirst(_changedFiles); | 223 String path = _removeFirst(_changedFiles); |
217 _verifyApiSignatureOfChangedFile(path); | 224 _verifyApiSignatureOfChangedFile(path); |
218 // Repeat the processing loop. | 225 // Repeat the processing loop. |
219 _hasWork.notify(); | 226 _hasWork.notify(); |
220 continue; | 227 continue; |
221 } | 228 } |
222 | 229 |
223 // Analyze the first file in the general queue. | 230 // TODO(scheglov) analyze requested files |
231 | |
232 // Analyze a priority file. | |
233 if (_priorityFiles.isNotEmpty) { | |
234 bool analyzed = false; | |
235 for (String path in _priorityFiles) { | |
236 if (_filesToAnalyze.remove(path)) { | |
237 _File file = _fileForPath(path); | |
238 AnalysisResult result = _computeAnalysisResult(file); | |
239 yield result; | |
240 break; | |
Paul Berry
2016/10/31 16:51:40
Do need to set `analyzed = true` here? Otherwise
scheglov
2016/10/31 17:38:52
Yes, you are right, we need to set `analyzed = tru
| |
241 } | |
242 } | |
243 // Repeat the processing loop. | |
244 if (analyzed) { | |
245 _hasWork.notify(); | |
246 continue; | |
247 } | |
248 } | |
249 | |
250 // Analyze a general file. | |
224 if (_filesToAnalyze.isNotEmpty) { | 251 if (_filesToAnalyze.isNotEmpty) { |
225 String path = _removeFirst(_filesToAnalyze); | 252 String path = _removeFirst(_filesToAnalyze); |
226 _File file = _fileForPath(path); | 253 _File file = _fileForPath(path); |
227 AnalysisResult result = _computeAnalysisResult(file); | 254 AnalysisResult result = _computeAnalysisResult(file); |
228 yield result; | 255 yield result; |
229 // Repeat the processing loop. | 256 // Repeat the processing loop. |
230 _hasWork.notify(); | 257 _hasWork.notify(); |
231 continue; | 258 continue; |
232 } | 259 } |
233 | 260 |
234 // There is nothing to do. | 261 // There is nothing to do. |
235 analysisSection.exit(); | 262 analysisSection.exit(); |
236 analysisSection = null; | 263 analysisSection = null; |
237 } | 264 } |
238 // TODO(scheglov) implement | |
239 } finally { | 265 } finally { |
240 print('The stream was cancelled.'); | 266 print('The stream was cancelled.'); |
241 } | 267 } |
242 } | 268 } |
243 | 269 |
244 /** | 270 /** |
245 * Add the file with the given [path] to the set of files to analyze. | 271 * Add the file with the given [path] to the set of files to analyze. |
246 * | 272 * |
247 * The [path] must be absolute and normalized. | 273 * The [path] must be absolute and normalized. |
248 * | 274 * |
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
992 } | 1018 } |
993 } | 1019 } |
994 for (UnlinkedExportPublic export in unit.publicNamespace.exports) { | 1020 for (UnlinkedExportPublic export in unit.publicNamespace.exports) { |
995 referenced.exported.add(export.uri); | 1021 referenced.exported.add(export.uri); |
996 } | 1022 } |
997 return referenced; | 1023 return referenced; |
998 } | 1024 } |
999 | 1025 |
1000 _ReferencedUris._(); | 1026 _ReferencedUris._(); |
1001 } | 1027 } |
OLD | NEW |