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 analyzer.src.task.dart_work_manager; | 5 library analyzer.src.task.dart_work_manager; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 | 8 |
9 import 'package:analyzer/src/context/cache.dart'; | 9 import 'package:analyzer/src/context/cache.dart'; |
10 import 'package:analyzer/src/generated/engine.dart' | 10 import 'package:analyzer/src/generated/engine.dart' |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
195 * Maybe empty, but not null. | 195 * Maybe empty, but not null. |
196 */ | 196 */ |
197 List<Source> getLibrariesContainingPart(Source part) { | 197 List<Source> getLibrariesContainingPart(Source part) { |
198 if (part.isInSystemLibrary) { | 198 if (part.isInSystemLibrary) { |
199 DartWorkManager sdkDartWorkManager = _getSdkDartWorkManager(); | 199 DartWorkManager sdkDartWorkManager = _getSdkDartWorkManager(); |
200 if (sdkDartWorkManager != this) { | 200 if (sdkDartWorkManager != this) { |
201 return sdkDartWorkManager.getLibrariesContainingPart(part); | 201 return sdkDartWorkManager.getLibrariesContainingPart(part); |
202 } | 202 } |
203 } | 203 } |
204 List<Source> libraries = partLibrariesMap[part]; | 204 List<Source> libraries = partLibrariesMap[part]; |
| 205 libraries ??= _getLibrariesContainingPartFromResultProvider(part); |
205 return libraries?.toList() ?? Source.EMPTY_LIST; | 206 return libraries?.toList() ?? Source.EMPTY_LIST; |
206 } | 207 } |
207 | 208 |
208 @override | 209 @override |
209 TargetedResult getNextResult() { | 210 TargetedResult getNextResult() { |
210 // Try to find a priority result to compute. | 211 // Try to find a priority result to compute. |
211 while (priorityResultQueue.isNotEmpty) { | 212 while (priorityResultQueue.isNotEmpty) { |
212 TargetedResult result = priorityResultQueue.first; | 213 TargetedResult result = priorityResultQueue.first; |
213 if (!_needsComputing(result.target, result.result)) { | 214 if (!_needsComputing(result.target, result.result)) { |
214 priorityResultQueue.remove(result); | 215 priorityResultQueue.remove(result); |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
348 context.getNotice(source).setErrors(info.errors, info.lineInfo); | 349 context.getNotice(source).setErrors(info.errors, info.lineInfo); |
349 } | 350 } |
350 } | 351 } |
351 } | 352 } |
352 | 353 |
353 void unitIncrementallyResolved(Source librarySource, Source unitSource) { | 354 void unitIncrementallyResolved(Source librarySource, Source unitSource) { |
354 librarySourceQueue.add(librarySource); | 355 librarySourceQueue.add(librarySource); |
355 } | 356 } |
356 | 357 |
357 /** | 358 /** |
| 359 * Ask the [context]'s result provider for [CONTAINING_LIBRARIES]. |
| 360 * Return the list of containing libraries, or `null` if unknown. |
| 361 */ |
| 362 List<Source> _getLibrariesContainingPartFromResultProvider(Source part) { |
| 363 CacheEntry cacheEntry = context.getCacheEntry(part); |
| 364 bool knows = context.aboutToComputeResult(cacheEntry, CONTAINING_LIBRARIES); |
| 365 if (knows) { |
| 366 return cacheEntry.getValue(CONTAINING_LIBRARIES); |
| 367 } |
| 368 return null; |
| 369 } |
| 370 |
| 371 /** |
358 * Return the SDK [DartWorkManager] or this one. | 372 * Return the SDK [DartWorkManager] or this one. |
359 */ | 373 */ |
360 DartWorkManager _getSdkDartWorkManager() { | 374 DartWorkManager _getSdkDartWorkManager() { |
361 SourceFactory sourceFactory = context.sourceFactory; | 375 SourceFactory sourceFactory = context.sourceFactory; |
362 InternalAnalysisContext sdkContext = sourceFactory.dartSdk.context; | 376 InternalAnalysisContext sdkContext = sourceFactory.dartSdk.context; |
363 if (sdkContext != context) { | 377 if (sdkContext != context) { |
364 for (WorkManager workManager in sdkContext.workManagers) { | 378 for (WorkManager workManager in sdkContext.workManagers) { |
365 if (workManager is DartWorkManager) { | 379 if (workManager is DartWorkManager) { |
366 return workManager; | 380 return workManager; |
367 } | 381 } |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
473 } | 487 } |
474 } | 488 } |
475 | 489 |
476 bool _shouldErrorsBeComputed(Source source) => | 490 bool _shouldErrorsBeComputed(Source source) => |
477 context.shouldErrorsBeAnalyzed(source); | 491 context.shouldErrorsBeAnalyzed(source); |
478 | 492 |
479 static bool _isDartSource(AnalysisTarget target) { | 493 static bool _isDartSource(AnalysisTarget target) { |
480 return target is Source && AnalysisEngine.isDartFileName(target.fullName); | 494 return target is Source && AnalysisEngine.isDartFileName(target.fullName); |
481 } | 495 } |
482 } | 496 } |
OLD | NEW |