| 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.context.context; | 5 library analyzer.src.context.context; | 
| 6 | 6 | 
| 7 import 'dart:async'; | 7 import 'dart:async'; | 
| 8 import 'dart:collection'; | 8 import 'dart:collection'; | 
| 9 | 9 | 
| 10 import 'package:analyzer/instrumentation/instrumentation.dart'; | 10 import 'package:analyzer/instrumentation/instrumentation.dart'; | 
|  | 11 import 'package:analyzer/plugin/task.dart'; | 
| 11 import 'package:analyzer/src/cancelable_future.dart'; | 12 import 'package:analyzer/src/cancelable_future.dart'; | 
| 12 import 'package:analyzer/src/context/cache.dart'; | 13 import 'package:analyzer/src/context/cache.dart'; | 
| 13 import 'package:analyzer/src/generated/ast.dart'; | 14 import 'package:analyzer/src/generated/ast.dart'; | 
| 14 import 'package:analyzer/src/generated/constant.dart'; | 15 import 'package:analyzer/src/generated/constant.dart'; | 
| 15 import 'package:analyzer/src/generated/element.dart'; | 16 import 'package:analyzer/src/generated/element.dart'; | 
| 16 import 'package:analyzer/src/generated/engine.dart' | 17 import 'package:analyzer/src/generated/engine.dart' | 
| 17     hide | 18     hide | 
| 18         AnalysisCache, | 19         AnalysisCache, | 
| 19         CachePartition, | 20         CachePartition, | 
| 20         SdkCachePartition, | 21         SdkCachePartition, | 
| 21         UniversalCachePartition, | 22         UniversalCachePartition, | 
| 22         WorkManager; | 23         WorkManager; | 
| 23 import 'package:analyzer/src/generated/error.dart'; | 24 import 'package:analyzer/src/generated/error.dart'; | 
| 24 import 'package:analyzer/src/generated/html.dart' as ht show HtmlUnit; | 25 import 'package:analyzer/src/generated/html.dart' as ht show HtmlUnit; | 
| 25 import 'package:analyzer/src/generated/incremental_resolver.dart'; | 26 import 'package:analyzer/src/generated/incremental_resolver.dart'; | 
| 26 import 'package:analyzer/src/generated/java_core.dart'; | 27 import 'package:analyzer/src/generated/java_core.dart'; | 
| 27 import 'package:analyzer/src/generated/java_engine.dart'; | 28 import 'package:analyzer/src/generated/java_engine.dart'; | 
| 28 import 'package:analyzer/src/generated/resolver.dart'; | 29 import 'package:analyzer/src/generated/resolver.dart'; | 
| 29 import 'package:analyzer/src/generated/scanner.dart'; |  | 
| 30 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; | 30 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; | 
| 31 import 'package:analyzer/src/generated/source.dart'; | 31 import 'package:analyzer/src/generated/source.dart'; | 
| 32 import 'package:analyzer/src/generated/utilities_collection.dart'; | 32 import 'package:analyzer/src/generated/utilities_collection.dart'; | 
| 33 import 'package:analyzer/src/task/dart.dart'; | 33 import 'package:analyzer/src/task/dart.dart'; | 
| 34 import 'package:analyzer/src/task/dart_work_manager.dart'; | 34 import 'package:analyzer/src/task/dart_work_manager.dart'; | 
| 35 import 'package:analyzer/src/task/driver.dart'; | 35 import 'package:analyzer/src/task/driver.dart'; | 
| 36 import 'package:analyzer/src/task/html.dart'; |  | 
| 37 import 'package:analyzer/src/task/html_work_manager.dart'; |  | 
| 38 import 'package:analyzer/src/task/incremental_element_builder.dart'; | 36 import 'package:analyzer/src/task/incremental_element_builder.dart'; | 
| 39 import 'package:analyzer/src/task/manager.dart'; | 37 import 'package:analyzer/src/task/manager.dart'; | 
| 40 import 'package:analyzer/task/dart.dart'; | 38 import 'package:analyzer/task/dart.dart'; | 
| 41 import 'package:analyzer/task/general.dart'; | 39 import 'package:analyzer/task/general.dart'; | 
| 42 import 'package:analyzer/task/html.dart'; | 40 import 'package:analyzer/task/html.dart'; | 
| 43 import 'package:analyzer/task/model.dart'; | 41 import 'package:analyzer/task/model.dart'; | 
| 44 import 'package:html/dom.dart' show Document; | 42 import 'package:html/dom.dart' show Document; | 
| 45 | 43 | 
| 46 /** | 44 /** | 
| 47  * Type of callback functions used by PendingFuture. Functions of this type | 45  * Type of callback functions used by PendingFuture. Functions of this type | 
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 115    * are stored. | 113    * are stored. | 
| 116    */ | 114    */ | 
| 117   AnalysisCache _cache; | 115   AnalysisCache _cache; | 
| 118 | 116 | 
| 119   /** | 117   /** | 
| 120    * The task manager used to manage the tasks used to analyze code. | 118    * The task manager used to manage the tasks used to analyze code. | 
| 121    */ | 119    */ | 
| 122   TaskManager _taskManager; | 120   TaskManager _taskManager; | 
| 123 | 121 | 
| 124   /** | 122   /** | 
|  | 123    * A list of all [WorkManager]s used by this context. | 
|  | 124    */ | 
|  | 125   final List<WorkManager> workManagers = <WorkManager>[]; | 
|  | 126 | 
|  | 127   /** | 
| 125    * The [DartWorkManager] instance that performs Dart specific scheduling. | 128    * The [DartWorkManager] instance that performs Dart specific scheduling. | 
| 126    */ | 129    */ | 
| 127   DartWorkManager dartWorkManager; | 130   DartWorkManager dartWorkManager; | 
| 128 | 131 | 
| 129   /** | 132   /** | 
| 130    * The work manager that performs HTML specific scheduling. |  | 
| 131    */ |  | 
| 132   HtmlWorkManager htmlWorkManager; |  | 
| 133 |  | 
| 134   /** |  | 
| 135    * The analysis driver used to perform analysis. | 133    * The analysis driver used to perform analysis. | 
| 136    */ | 134    */ | 
| 137   AnalysisDriver driver; | 135   AnalysisDriver driver; | 
| 138 | 136 | 
| 139   /** | 137   /** | 
| 140    * A list containing sources for which data should not be flushed. | 138    * A list containing sources for which data should not be flushed. | 
| 141    */ | 139    */ | 
| 142   List<Source> _priorityOrder = <Source>[]; | 140   List<Source> _priorityOrder = <Source>[]; | 
| 143 | 141 | 
| 144   /** | 142   /** | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 155    */ | 153    */ | 
| 156   HashMap<Source, ChangeNoticeImpl> _pendingNotices = | 154   HashMap<Source, ChangeNoticeImpl> _pendingNotices = | 
| 157       new HashMap<Source, ChangeNoticeImpl>(); | 155       new HashMap<Source, ChangeNoticeImpl>(); | 
| 158 | 156 | 
| 159   /** | 157   /** | 
| 160    * The [TypeProvider] for this context, `null` if not yet created. | 158    * The [TypeProvider] for this context, `null` if not yet created. | 
| 161    */ | 159    */ | 
| 162   TypeProvider _typeProvider; | 160   TypeProvider _typeProvider; | 
| 163 | 161 | 
| 164   /** | 162   /** | 
|  | 163    * The [TypeSystem] for this context, `null` if not yet created. | 
|  | 164    */ | 
|  | 165   TypeSystem _typeSystem; | 
|  | 166 | 
|  | 167   /** | 
| 165    * The controller for sending [SourcesChangedEvent]s. | 168    * The controller for sending [SourcesChangedEvent]s. | 
| 166    */ | 169    */ | 
| 167   StreamController<SourcesChangedEvent> _onSourcesChangedController; | 170   StreamController<SourcesChangedEvent> _onSourcesChangedController; | 
| 168 | 171 | 
| 169   /** | 172   /** | 
|  | 173    * A subscription for a stream of events indicating when files are (and are | 
|  | 174    * not) being implicitly analyzed. | 
|  | 175    */ | 
|  | 176   StreamController<ImplicitAnalysisEvent> _implicitAnalysisEventsController; | 
|  | 177 | 
|  | 178   /** | 
| 170    * The listeners that are to be notified when various analysis results are | 179    * The listeners that are to be notified when various analysis results are | 
| 171    * produced in this context. | 180    * produced in this context. | 
| 172    */ | 181    */ | 
| 173   List<AnalysisListener> _listeners = new List<AnalysisListener>(); | 182   List<AnalysisListener> _listeners = new List<AnalysisListener>(); | 
| 174 | 183 | 
| 175   /** | 184   /** | 
| 176    * The most recently incrementally resolved source, or `null` when it was | 185    * The most recently incrementally resolved source, or `null` when it was | 
| 177    * already validated, or the most recent change was not incrementally resolved
      . | 186    * already validated, or the most recent change was not incrementally resolved
      . | 
| 178    */ | 187    */ | 
| 179   Source incrementalResolutionValidation_lastUnitSource; | 188   Source incrementalResolutionValidation_lastUnitSource; | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 206    */ | 215    */ | 
| 207   LibraryResolverFactory libraryResolverFactory; | 216   LibraryResolverFactory libraryResolverFactory; | 
| 208 | 217 | 
| 209   /** | 218   /** | 
| 210    * Initialize a newly created analysis context. | 219    * Initialize a newly created analysis context. | 
| 211    */ | 220    */ | 
| 212   AnalysisContextImpl() { | 221   AnalysisContextImpl() { | 
| 213     _privatePartition = new UniversalCachePartition(this); | 222     _privatePartition = new UniversalCachePartition(this); | 
| 214     _cache = createCacheFromSourceFactory(null); | 223     _cache = createCacheFromSourceFactory(null); | 
| 215     _taskManager = AnalysisEngine.instance.taskManager; | 224     _taskManager = AnalysisEngine.instance.taskManager; | 
| 216     // TODO(scheglov) Get WorkManager(Factory)(s) from plugins. | 225     for (WorkManagerFactory factory | 
| 217     dartWorkManager = new DartWorkManager(this); | 226         in AnalysisEngine.instance.enginePlugin.workManagerFactories) { | 
| 218     htmlWorkManager = new HtmlWorkManager(this); | 227       WorkManager workManager = factory(this); | 
| 219     driver = new AnalysisDriver( | 228       if (workManager != null) { | 
| 220         _taskManager, <WorkManager>[dartWorkManager, htmlWorkManager], this); | 229         workManagers.add(workManager); | 
|  | 230         if (workManager is DartWorkManager) { | 
|  | 231           dartWorkManager = workManager; | 
|  | 232         } | 
|  | 233       } | 
|  | 234     } | 
|  | 235     driver = new AnalysisDriver(_taskManager, workManagers, this); | 
| 221     _onSourcesChangedController = | 236     _onSourcesChangedController = | 
| 222         new StreamController<SourcesChangedEvent>.broadcast(); | 237         new StreamController<SourcesChangedEvent>.broadcast(); | 
|  | 238     _implicitAnalysisEventsController = | 
|  | 239         new StreamController<ImplicitAnalysisEvent>.broadcast(); | 
| 223   } | 240   } | 
| 224 | 241 | 
| 225   @override | 242   @override | 
| 226   AnalysisCache get analysisCache => _cache; | 243   AnalysisCache get analysisCache => _cache; | 
| 227 | 244 | 
| 228   @override | 245   @override | 
| 229   AnalysisOptions get analysisOptions => _options; | 246   AnalysisOptions get analysisOptions => _options; | 
| 230 | 247 | 
| 231   @override | 248   @override | 
| 232   void set analysisOptions(AnalysisOptions options) { | 249   void set analysisOptions(AnalysisOptions options) { | 
| 233     bool needsRecompute = this._options.analyzeFunctionBodiesPredicate != | 250     bool needsRecompute = this._options.analyzeFunctionBodiesPredicate != | 
| 234             options.analyzeFunctionBodiesPredicate || | 251             options.analyzeFunctionBodiesPredicate || | 
| 235         this._options.generateImplicitErrors != | 252         this._options.generateImplicitErrors != | 
| 236             options.generateImplicitErrors || | 253             options.generateImplicitErrors || | 
| 237         this._options.generateSdkErrors != options.generateSdkErrors || | 254         this._options.generateSdkErrors != options.generateSdkErrors || | 
| 238         this._options.dart2jsHint != options.dart2jsHint || | 255         this._options.dart2jsHint != options.dart2jsHint || | 
| 239         (this._options.hint && !options.hint) || | 256         (this._options.hint && !options.hint) || | 
| 240         (this._options.lint && !options.lint) || | 257         (this._options.lint && !options.lint) || | 
| 241         this._options.preserveComments != options.preserveComments || | 258         this._options.preserveComments != options.preserveComments || | 
| 242         this._options.enableStrictCallChecks != options.enableStrictCallChecks; | 259         this._options.strongMode != options.strongMode || | 
|  | 260         this._options.enableStrictCallChecks != | 
|  | 261             options.enableStrictCallChecks || | 
|  | 262         this._options.enableSuperMixins != options.enableSuperMixins; | 
| 243     int cacheSize = options.cacheSize; | 263     int cacheSize = options.cacheSize; | 
| 244     if (this._options.cacheSize != cacheSize) { | 264     if (this._options.cacheSize != cacheSize) { | 
| 245       this._options.cacheSize = cacheSize; | 265       this._options.cacheSize = cacheSize; | 
| 246     } | 266     } | 
| 247     this._options.analyzeFunctionBodiesPredicate = | 267     this._options.analyzeFunctionBodiesPredicate = | 
| 248         options.analyzeFunctionBodiesPredicate; | 268         options.analyzeFunctionBodiesPredicate; | 
| 249     this._options.generateImplicitErrors = options.generateImplicitErrors; | 269     this._options.generateImplicitErrors = options.generateImplicitErrors; | 
| 250     this._options.generateSdkErrors = options.generateSdkErrors; | 270     this._options.generateSdkErrors = options.generateSdkErrors; | 
| 251     this._options.dart2jsHint = options.dart2jsHint; | 271     this._options.dart2jsHint = options.dart2jsHint; | 
| 252     this._options.enableStrictCallChecks = options.enableStrictCallChecks; | 272     this._options.enableStrictCallChecks = options.enableStrictCallChecks; | 
|  | 273     this._options.enableSuperMixins = options.enableSuperMixins; | 
| 253     this._options.hint = options.hint; | 274     this._options.hint = options.hint; | 
| 254     this._options.incremental = options.incremental; | 275     this._options.incremental = options.incremental; | 
| 255     this._options.incrementalApi = options.incrementalApi; | 276     this._options.incrementalApi = options.incrementalApi; | 
| 256     this._options.incrementalValidation = options.incrementalValidation; | 277     this._options.incrementalValidation = options.incrementalValidation; | 
| 257     this._options.lint = options.lint; | 278     this._options.lint = options.lint; | 
| 258     this._options.preserveComments = options.preserveComments; | 279     this._options.preserveComments = options.preserveComments; | 
|  | 280     this._options.strongMode = options.strongMode; | 
| 259     if (needsRecompute) { | 281     if (needsRecompute) { | 
| 260       dartWorkManager.onAnalysisOptionsChanged(); | 282       for (WorkManager workManager in workManagers) { | 
| 261       htmlWorkManager.onAnalysisOptionsChanged(); | 283         workManager.onAnalysisOptionsChanged(); | 
|  | 284       } | 
| 262     } | 285     } | 
| 263   } | 286   } | 
| 264 | 287 | 
| 265   @override | 288   @override | 
| 266   void set analysisPriorityOrder(List<Source> sources) { | 289   void set analysisPriorityOrder(List<Source> sources) { | 
| 267     if (sources == null || sources.isEmpty) { | 290     if (sources == null || sources.isEmpty) { | 
| 268       _priorityOrder = Source.EMPTY_LIST; | 291       _priorityOrder = Source.EMPTY_LIST; | 
| 269     } else { | 292     } else { | 
| 270       while (sources.remove(null)) { | 293       while (sources.remove(null)) { | 
| 271         // Nothing else to do. | 294         // Nothing else to do. | 
| 272       } | 295       } | 
| 273       if (sources.isEmpty) { | 296       if (sources.isEmpty) { | 
| 274         _priorityOrder = Source.EMPTY_LIST; | 297         _priorityOrder = Source.EMPTY_LIST; | 
| 275       } else { | 298       } else { | 
| 276         _priorityOrder = sources; | 299         _priorityOrder = sources; | 
| 277       } | 300       } | 
| 278     } | 301     } | 
| 279     dartWorkManager.applyPriorityTargets(_priorityOrder); | 302     for (WorkManager workManager in workManagers) { | 
| 280     htmlWorkManager.applyPriorityTargets(_priorityOrder); | 303       workManager.applyPriorityTargets(_priorityOrder); | 
|  | 304     } | 
|  | 305     driver.reset(); | 
| 281   } | 306   } | 
| 282 | 307 | 
| 283   @override | 308   @override | 
| 284   set contentCache(ContentCache value) { | 309   set contentCache(ContentCache value) { | 
| 285     _contentCache = value; | 310     _contentCache = value; | 
| 286   } | 311   } | 
| 287 | 312 | 
| 288   @override | 313   @override | 
| 289   DeclaredVariables get declaredVariables => _declaredVariables; | 314   DeclaredVariables get declaredVariables => _declaredVariables; | 
| 290 | 315 | 
| 291   @override | 316   @override | 
| 292   List<AnalysisTarget> get explicitTargets { | 317   List<AnalysisTarget> get explicitTargets { | 
| 293     List<AnalysisTarget> targets = <AnalysisTarget>[]; | 318     List<AnalysisTarget> targets = <AnalysisTarget>[]; | 
| 294     MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator(); | 319     MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator(); | 
| 295     while (iterator.moveNext()) { | 320     while (iterator.moveNext()) { | 
| 296       if (iterator.value.explicitlyAdded) { | 321       if (iterator.value.explicitlyAdded) { | 
| 297         targets.add(iterator.key); | 322         targets.add(iterator.key); | 
| 298       } | 323       } | 
| 299     } | 324     } | 
| 300     return targets; | 325     return targets; | 
| 301   } | 326   } | 
| 302 | 327 | 
| 303   @override | 328   @override | 
| 304   List<Source> get htmlSources => _getSources(SourceKind.HTML); | 329   List<Source> get htmlSources => _getSources(SourceKind.HTML); | 
| 305 | 330 | 
| 306   @override | 331   @override | 
|  | 332   Stream<ImplicitAnalysisEvent> get implicitAnalysisEvents => | 
|  | 333       _implicitAnalysisEventsController.stream; | 
|  | 334 | 
|  | 335   @override | 
| 307   bool get isDisposed => _disposed; | 336   bool get isDisposed => _disposed; | 
| 308 | 337 | 
| 309   @override | 338   @override | 
| 310   List<Source> get launchableClientLibrarySources { | 339   List<Source> get launchableClientLibrarySources { | 
| 311     List<Source> sources = <Source>[]; | 340     List<Source> sources = <Source>[]; | 
| 312     for (Source source in _cache.sources) { | 341     for (Source source in _cache.sources) { | 
| 313       CacheEntry entry = _cache.get(source); | 342       CacheEntry entry = _cache.get(source); | 
| 314       if (entry.getValue(SOURCE_KIND) == SourceKind.LIBRARY && | 343       if (entry.getValue(SOURCE_KIND) == SourceKind.LIBRARY && | 
| 315           !source.isInSystemLibrary && | 344           !source.isInSystemLibrary && | 
| 316           isClientLibrary(source)) { | 345           isClientLibrary(source)) { | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 338   @override | 367   @override | 
| 339   List<Source> get librarySources => _getSources(SourceKind.LIBRARY); | 368   List<Source> get librarySources => _getSources(SourceKind.LIBRARY); | 
| 340 | 369 | 
| 341   @override | 370   @override | 
| 342   Stream<SourcesChangedEvent> get onSourcesChanged => | 371   Stream<SourcesChangedEvent> get onSourcesChanged => | 
| 343       _onSourcesChangedController.stream; | 372       _onSourcesChangedController.stream; | 
| 344 | 373 | 
| 345   /** | 374   /** | 
| 346    * Make _pendingFutureSources available to unit tests. | 375    * Make _pendingFutureSources available to unit tests. | 
| 347    */ | 376    */ | 
| 348   HashMap<AnalysisTarget, List<PendingFuture>> get pendingFutureSources_forTesti
      ng => | 377   HashMap<AnalysisTarget, | 
|  | 378       List<PendingFuture>> get pendingFutureSources_forTesting => | 
| 349       _pendingFutureTargets; | 379       _pendingFutureTargets; | 
| 350 | 380 | 
| 351   @override | 381   @override | 
| 352   List<Source> get prioritySources => _priorityOrder; | 382   List<Source> get prioritySources => _priorityOrder; | 
| 353 | 383 | 
| 354   @override | 384   @override | 
| 355   List<AnalysisTarget> get priorityTargets => prioritySources; | 385   List<AnalysisTarget> get priorityTargets => prioritySources; | 
| 356 | 386 | 
| 357   @override | 387   @override | 
| 358   CachePartition get privateAnalysisCachePartition => _privatePartition; | 388   CachePartition get privateAnalysisCachePartition => _privatePartition; | 
| 359 | 389 | 
| 360   @override | 390   @override | 
| 361   SourceFactory get sourceFactory => _sourceFactory; | 391   SourceFactory get sourceFactory => _sourceFactory; | 
| 362 | 392 | 
| 363   @override | 393   @override | 
| 364   void set sourceFactory(SourceFactory factory) { | 394   void set sourceFactory(SourceFactory factory) { | 
| 365     if (identical(_sourceFactory, factory)) { | 395     if (identical(_sourceFactory, factory)) { | 
| 366       return; | 396       return; | 
| 367     } else if (factory.context != null) { | 397     } else if (factory.context != null) { | 
| 368       throw new IllegalStateException( | 398       throw new IllegalStateException( | 
| 369           "Source factories cannot be shared between contexts"); | 399           "Source factories cannot be shared between contexts"); | 
| 370     } | 400     } | 
| 371     if (_sourceFactory != null) { | 401     if (_sourceFactory != null) { | 
| 372       _sourceFactory.context = null; | 402       _sourceFactory.context = null; | 
| 373     } | 403     } | 
| 374     factory.context = this; | 404     factory.context = this; | 
| 375     _sourceFactory = factory; | 405     _sourceFactory = factory; | 
| 376     _cache = createCacheFromSourceFactory(factory); | 406     _cache = createCacheFromSourceFactory(factory); | 
| 377     dartWorkManager.onSourceFactoryChanged(); | 407     for (WorkManager workManager in workManagers) { | 
| 378     htmlWorkManager.onSourceFactoryChanged(); | 408       workManager.onSourceFactoryChanged(); | 
|  | 409     } | 
| 379   } | 410   } | 
| 380 | 411 | 
| 381   @override | 412   @override | 
| 382   List<Source> get sources { | 413   List<Source> get sources { | 
| 383     return _cache.sources.toList(); | 414     return _cache.sources.toList(); | 
| 384   } | 415   } | 
| 385 | 416 | 
| 386   /** | 417   /** | 
| 387    * Return a list of the sources that would be processed by | 418    * Return a list of the sources that would be processed by | 
| 388    * [performAnalysisTask]. This method duplicates, and must therefore be kept | 419    * [performAnalysisTask]. This method duplicates, and must therefore be kept | 
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 448   } | 479   } | 
| 449 | 480 | 
| 450   /** | 481   /** | 
| 451    * Sets the [TypeProvider] for this context. | 482    * Sets the [TypeProvider] for this context. | 
| 452    */ | 483    */ | 
| 453   void set typeProvider(TypeProvider typeProvider) { | 484   void set typeProvider(TypeProvider typeProvider) { | 
| 454     _typeProvider = typeProvider; | 485     _typeProvider = typeProvider; | 
| 455   } | 486   } | 
| 456 | 487 | 
| 457   @override | 488   @override | 
|  | 489   TypeSystem get typeSystem { | 
|  | 490     if (_typeSystem == null) { | 
|  | 491       _typeSystem = TypeSystem.create(this); | 
|  | 492     } | 
|  | 493     return _typeSystem; | 
|  | 494   } | 
|  | 495 | 
|  | 496   @override | 
| 458   void addListener(AnalysisListener listener) { | 497   void addListener(AnalysisListener listener) { | 
| 459     if (!_listeners.contains(listener)) { | 498     if (!_listeners.contains(listener)) { | 
| 460       _listeners.add(listener); | 499       _listeners.add(listener); | 
| 461     } | 500     } | 
| 462   } | 501   } | 
| 463 | 502 | 
| 464   @override | 503   @override | 
| 465   void applyAnalysisDelta(AnalysisDelta delta) { | 504   void applyAnalysisDelta(AnalysisDelta delta) { | 
| 466     ChangeSet changeSet = new ChangeSet(); | 505     ChangeSet changeSet = new ChangeSet(); | 
| 467     delta.analysisLevels.forEach((Source source, AnalysisLevel level) { | 506     delta.analysisLevels.forEach((Source source, AnalysisLevel level) { | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 509         .forEach((Source source, ChangeSet_ContentChange change) { | 548         .forEach((Source source, ChangeSet_ContentChange change) { | 
| 510       _contentRangeChanged(source, change.contents, change.offset, | 549       _contentRangeChanged(source, change.contents, change.offset, | 
| 511           change.oldLength, change.newLength); | 550           change.oldLength, change.newLength); | 
| 512     }); | 551     }); | 
| 513     for (Source source in changeSet.deletedSources) { | 552     for (Source source in changeSet.deletedSources) { | 
| 514       _sourceDeleted(source); | 553       _sourceDeleted(source); | 
| 515     } | 554     } | 
| 516     for (Source source in removedSources) { | 555     for (Source source in removedSources) { | 
| 517       _sourceRemoved(source); | 556       _sourceRemoved(source); | 
| 518     } | 557     } | 
| 519     dartWorkManager.applyChange( | 558     for (WorkManager workManager in workManagers) { | 
| 520         changeSet.addedSources, changeSet.changedSources, removedSources); | 559       workManager.applyChange( | 
| 521     htmlWorkManager.applyChange( | 560           changeSet.addedSources, changeSet.changedSources, removedSources); | 
| 522         changeSet.addedSources, changeSet.changedSources, removedSources); | 561     } | 
| 523     _onSourcesChangedController.add(new SourcesChangedEvent(changeSet)); | 562     _onSourcesChangedController.add(new SourcesChangedEvent(changeSet)); | 
| 524   } | 563   } | 
| 525 | 564 | 
| 526   @override | 565   @override | 
| 527   String computeDocumentationComment(Element element) { | 566   String computeDocumentationComment(Element element) { | 
| 528     if (element == null) { | 567     if (element == null) { | 
| 529       return null; | 568       return null; | 
| 530     } | 569     } | 
| 531     Source source = element.source; | 570     Source source = element.source; | 
| 532     if (source == null) { | 571     if (source == null) { | 
| 533       return null; | 572       return null; | 
| 534     } | 573     } | 
| 535     CompilationUnit unit = parseCompilationUnit(source); | 574     SourceRange docRange = element.docRange; | 
| 536     if (unit == null) { | 575     if (docRange == null) { | 
| 537       return null; | 576       return null; | 
| 538     } | 577     } | 
| 539     NodeLocator locator = new NodeLocator(element.nameOffset); | 578     String code = getContents(source).data; | 
| 540     AstNode nameNode = locator.searchWithin(unit); | 579     String comment = code.substring(docRange.offset, docRange.end); | 
| 541     while (nameNode != null) { | 580     return comment.replaceAll('\r\n', '\n'); | 
| 542       if (nameNode is AnnotatedNode) { |  | 
| 543         Comment comment = nameNode.documentationComment; |  | 
| 544         if (comment == null) { |  | 
| 545           return null; |  | 
| 546         } |  | 
| 547         StringBuffer buffer = new StringBuffer(); |  | 
| 548         List<Token> tokens = comment.tokens; |  | 
| 549         for (int i = 0; i < tokens.length; i++) { |  | 
| 550           if (i > 0) { |  | 
| 551             buffer.write("\n"); |  | 
| 552           } |  | 
| 553           buffer.write(tokens[i].lexeme); |  | 
| 554         } |  | 
| 555         return buffer.toString(); |  | 
| 556       } |  | 
| 557       nameNode = nameNode.parent; |  | 
| 558     } |  | 
| 559     return null; |  | 
| 560   } | 581   } | 
| 561 | 582 | 
| 562   @override | 583   @override | 
| 563   List<AnalysisError> computeErrors(Source source) { | 584   List<AnalysisError> computeErrors(Source source) { | 
| 564     String name = source.shortName; | 585     String name = source.shortName; | 
| 565     if (AnalysisEngine.isDartFileName(name)) { | 586     if (AnalysisEngine.isDartFileName(name)) { | 
| 566       return computeResult(source, DART_ERRORS); | 587       return computeResult(source, DART_ERRORS); | 
| 567     } else if (AnalysisEngine.isHtmlFileName(name)) { | 588     } else if (AnalysisEngine.isHtmlFileName(name)) { | 
| 568       return computeResult(source, HTML_ERRORS); | 589       return computeResult(source, HTML_ERRORS); | 
| 569     } | 590     } | 
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 613   } | 634   } | 
| 614 | 635 | 
| 615   @override | 636   @override | 
| 616   CancelableFuture<CompilationUnit> computeResolvedCompilationUnitAsync( | 637   CancelableFuture<CompilationUnit> computeResolvedCompilationUnitAsync( | 
| 617       Source unitSource, Source librarySource) { | 638       Source unitSource, Source librarySource) { | 
| 618     if (!AnalysisEngine.isDartFileName(unitSource.shortName) || | 639     if (!AnalysisEngine.isDartFileName(unitSource.shortName) || | 
| 619         !AnalysisEngine.isDartFileName(librarySource.shortName)) { | 640         !AnalysisEngine.isDartFileName(librarySource.shortName)) { | 
| 620       return new CancelableFuture.error(new AnalysisNotScheduledError()); | 641       return new CancelableFuture.error(new AnalysisNotScheduledError()); | 
| 621     } | 642     } | 
| 622     var unitTarget = new LibrarySpecificUnit(librarySource, unitSource); | 643     var unitTarget = new LibrarySpecificUnit(librarySource, unitSource); | 
| 623     return new _AnalysisFutureHelper<CompilationUnit>(this).computeAsync( | 644     return new _AnalysisFutureHelper<CompilationUnit>(this) | 
| 624         unitTarget, (CacheEntry entry) { | 645         .computeAsync(unitTarget, (CacheEntry entry) { | 
| 625       CacheState state = entry.getState(RESOLVED_UNIT); | 646       CacheState state = entry.getState(RESOLVED_UNIT); | 
| 626       if (state == CacheState.ERROR) { | 647       if (state == CacheState.ERROR) { | 
| 627         throw entry.exception; | 648         throw entry.exception; | 
| 628       } else if (state == CacheState.INVALID) { | 649       } else if (state == CacheState.INVALID) { | 
| 629         return null; | 650         return null; | 
| 630       } | 651       } | 
| 631       return entry.getValue(RESOLVED_UNIT); | 652       return entry.getValue(RESOLVED_UNIT); | 
| 632     }, () { | 653     }, () { | 
| 633       dartWorkManager.addPriorityResult(unitTarget, RESOLVED_UNIT); | 654       dartWorkManager.addPriorityResult(unitTarget, RESOLVED_UNIT); | 
| 634     }); | 655     }); | 
| 635   } | 656   } | 
| 636 | 657 | 
|  | 658   @override | 
| 637   Object /*V*/ computeResult( | 659   Object /*V*/ computeResult( | 
| 638       AnalysisTarget target, ResultDescriptor /*<V>*/ descriptor) { | 660       AnalysisTarget target, ResultDescriptor /*<V>*/ descriptor) { | 
| 639     CacheEntry entry = getCacheEntry(target); | 661     CacheEntry entry = getCacheEntry(target); | 
| 640     CacheState state = entry.getState(descriptor); | 662     CacheState state = entry.getState(descriptor); | 
| 641     if (state == CacheState.FLUSHED || state == CacheState.INVALID) { | 663     if (state == CacheState.FLUSHED || state == CacheState.INVALID) { | 
| 642       driver.computeResult(target, descriptor); | 664       driver.computeResult(target, descriptor); | 
| 643     } | 665     } | 
| 644     state = entry.getState(descriptor); | 666     state = entry.getState(descriptor); | 
| 645     if (state == CacheState.ERROR) { | 667     if (state == CacheState.ERROR) { | 
| 646       throw new AnalysisException( | 668       throw new AnalysisException( | 
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 679   } | 701   } | 
| 680 | 702 | 
| 681   @override | 703   @override | 
| 682   List<CompilationUnit> ensureResolvedDartUnits(Source unitSource) { | 704   List<CompilationUnit> ensureResolvedDartUnits(Source unitSource) { | 
| 683     // Check every library. | 705     // Check every library. | 
| 684     List<CompilationUnit> units = <CompilationUnit>[]; | 706     List<CompilationUnit> units = <CompilationUnit>[]; | 
| 685     List<Source> containingLibraries = getLibrariesContaining(unitSource); | 707     List<Source> containingLibraries = getLibrariesContaining(unitSource); | 
| 686     for (Source librarySource in containingLibraries) { | 708     for (Source librarySource in containingLibraries) { | 
| 687       LibrarySpecificUnit target = | 709       LibrarySpecificUnit target = | 
| 688           new LibrarySpecificUnit(librarySource, unitSource); | 710           new LibrarySpecificUnit(librarySource, unitSource); | 
| 689       CompilationUnit unit = _cache.getValue(target, RESOLVED_UNIT); | 711       CompilationUnit unit = getResult(target, RESOLVED_UNIT); | 
| 690       if (unit == null) { | 712       if (unit == null) { | 
| 691         units = null; | 713         units = null; | 
| 692         break; | 714         break; | 
| 693       } | 715       } | 
| 694       units.add(unit); | 716       units.add(unit); | 
| 695     } | 717     } | 
| 696     // If we have results, then we're done. | 718     // If we have results, then we're done. | 
| 697     if (units != null) { | 719     if (units != null) { | 
| 698       return units; | 720       return units; | 
| 699     } | 721     } | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 721 | 743 | 
| 722   @override | 744   @override | 
| 723   CacheEntry getCacheEntry(AnalysisTarget target) { | 745   CacheEntry getCacheEntry(AnalysisTarget target) { | 
| 724     CacheEntry entry = _cache.get(target); | 746     CacheEntry entry = _cache.get(target); | 
| 725     if (entry == null) { | 747     if (entry == null) { | 
| 726       entry = new CacheEntry(target); | 748       entry = new CacheEntry(target); | 
| 727       if (target is Source) { | 749       if (target is Source) { | 
| 728         entry.modificationTime = getModificationStamp(target); | 750         entry.modificationTime = getModificationStamp(target); | 
| 729       } | 751       } | 
| 730       _cache.put(entry); | 752       _cache.put(entry); | 
|  | 753       if (target is Source) { | 
|  | 754         _implicitAnalysisEventsController | 
|  | 755             .add(new ImplicitAnalysisEvent(target, true)); | 
|  | 756       } | 
| 731     } | 757     } | 
| 732     return entry; | 758     return entry; | 
| 733   } | 759   } | 
| 734 | 760 | 
| 735   @override | 761   @override | 
| 736   CompilationUnitElement getCompilationUnitElement( | 762   CompilationUnitElement getCompilationUnitElement( | 
| 737       Source unitSource, Source librarySource) { | 763       Source unitSource, Source librarySource) { | 
| 738     AnalysisTarget target = new LibrarySpecificUnit(librarySource, unitSource); | 764     AnalysisTarget target = new LibrarySpecificUnit(librarySource, unitSource); | 
| 739     return _cache.getValue(target, COMPILATION_UNIT_ELEMENT); | 765     return getResult(target, COMPILATION_UNIT_ELEMENT); | 
| 740   } | 766   } | 
| 741 | 767 | 
| 742   @override | 768   @override | 
| 743   TimestampedData<String> getContents(Source source) { | 769   TimestampedData<String> getContents(Source source) { | 
| 744     String contents = _contentCache.getContents(source); | 770     String contents = _contentCache.getContents(source); | 
| 745     if (contents != null) { | 771     if (contents != null) { | 
| 746       return new TimestampedData<String>( | 772       return new TimestampedData<String>( | 
| 747           _contentCache.getModificationStamp(source), contents); | 773           _contentCache.getModificationStamp(source), contents); | 
| 748     } | 774     } | 
| 749     return source.contents; | 775     return source.contents; | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 775     } catch (exception) { | 801     } catch (exception) { | 
| 776       // If the location cannot be decoded for some reason then the underlying | 802       // If the location cannot be decoded for some reason then the underlying | 
| 777       // cause should have been logged already and we can fall though to return | 803       // cause should have been logged already and we can fall though to return | 
| 778       // null. | 804       // null. | 
| 779     } | 805     } | 
| 780     return null; | 806     return null; | 
| 781   } | 807   } | 
| 782 | 808 | 
| 783   @override | 809   @override | 
| 784   AnalysisErrorInfo getErrors(Source source) { | 810   AnalysisErrorInfo getErrors(Source source) { | 
| 785     String name = source.shortName; | 811     List<AnalysisError> allErrors = <AnalysisError>[]; | 
| 786     if (AnalysisEngine.isDartFileName(name) || source is DartScript) { | 812     for (WorkManager workManager in workManagers) { | 
| 787       return dartWorkManager.getErrors(source); | 813       List<AnalysisError> errors = workManager.getErrors(source); | 
| 788     } else if (AnalysisEngine.isHtmlFileName(name)) { | 814       allErrors.addAll(errors); | 
| 789       return htmlWorkManager.getErrors(source); |  | 
| 790     } | 815     } | 
| 791     return new AnalysisErrorInfoImpl(AnalysisError.NO_ERRORS, null); | 816     LineInfo lineInfo = getLineInfo(source); | 
|  | 817     return new AnalysisErrorInfoImpl(allErrors, lineInfo); | 
| 792   } | 818   } | 
| 793 | 819 | 
| 794   @override | 820   @override | 
| 795   @deprecated | 821   @deprecated | 
| 796   HtmlElement getHtmlElement(Source source) { | 822   HtmlElement getHtmlElement(Source source) { | 
| 797     // TODO(brianwilkerson) Remove this method after switching to the new task | 823     // TODO(brianwilkerson) Remove this method after switching to the new task | 
| 798     // model. | 824     // model. | 
| 799     throw new UnimplementedError('Not supported in the new task model'); | 825     throw new UnimplementedError('Not supported in the new task model'); | 
| 800   } | 826   } | 
| 801 | 827 | 
| 802   @override | 828   @override | 
| 803   List<Source> getHtmlFilesReferencing(Source source) { | 829   List<Source> getHtmlFilesReferencing(Source source) { | 
| 804     if (!AnalysisEngine.isDartFileName(source.shortName)) { | 830     if (!AnalysisEngine.isDartFileName(source.shortName)) { | 
| 805       return Source.EMPTY_LIST; | 831       return Source.EMPTY_LIST; | 
| 806     } | 832     } | 
| 807     List<Source> htmlSources = <Source>[]; | 833     List<Source> htmlSources = <Source>[]; | 
| 808     List<Source> librarySources = getLibrariesContaining(source); | 834     List<Source> librarySources = getLibrariesContaining(source); | 
| 809     for (Source source in _cache.sources) { | 835     for (Source source in _cache.sources) { | 
| 810       if (AnalysisEngine.isHtmlFileName(source.shortName)) { | 836       if (AnalysisEngine.isHtmlFileName(source.shortName)) { | 
| 811         List<Source> referencedLibraries = | 837         List<Source> referencedLibraries = | 
| 812             analysisCache.getValue(source, REFERENCED_LIBRARIES); | 838             getResult(source, REFERENCED_LIBRARIES); | 
| 813         if (_containsAny(referencedLibraries, librarySources)) { | 839         if (_containsAny(referencedLibraries, librarySources)) { | 
| 814           htmlSources.add(source); | 840           htmlSources.add(source); | 
| 815         } | 841         } | 
| 816       } | 842       } | 
| 817     } | 843     } | 
| 818     if (htmlSources.isEmpty) { | 844     if (htmlSources.isEmpty) { | 
| 819       return Source.EMPTY_LIST; | 845       return Source.EMPTY_LIST; | 
| 820     } | 846     } | 
| 821     return htmlSources; | 847     return htmlSources; | 
| 822   } | 848   } | 
| 823 | 849 | 
| 824   @override | 850   @override | 
| 825   SourceKind getKindOf(Source source) { | 851   SourceKind getKindOf(Source source) { | 
| 826     String name = source.shortName; | 852     String name = source.shortName; | 
| 827     if (AnalysisEngine.isDartFileName(name)) { | 853     if (AnalysisEngine.isDartFileName(name)) { | 
| 828       return _cache.getValue(source, SOURCE_KIND); | 854       return getResult(source, SOURCE_KIND); | 
| 829     } else if (AnalysisEngine.isHtmlFileName(name)) { | 855     } else if (AnalysisEngine.isHtmlFileName(name)) { | 
| 830       return SourceKind.HTML; | 856       return SourceKind.HTML; | 
| 831     } | 857     } | 
| 832     return SourceKind.UNKNOWN; | 858     return SourceKind.UNKNOWN; | 
| 833   } | 859   } | 
| 834 | 860 | 
| 835   @override | 861   @override | 
| 836   List<Source> getLibrariesContaining(Source source) { | 862   List<Source> getLibrariesContaining(Source source) { | 
| 837     SourceKind kind = getKindOf(source); | 863     SourceKind kind = getKindOf(source); | 
| 838     if (kind == SourceKind.LIBRARY) { | 864     if (kind == SourceKind.LIBRARY) { | 
| (...skipping 26 matching lines...) Expand all  Loading... | 
| 865   List<Source> getLibrariesReferencedFromHtml(Source htmlSource) { | 891   List<Source> getLibrariesReferencedFromHtml(Source htmlSource) { | 
| 866     CacheEntry entry = _cache.get(htmlSource); | 892     CacheEntry entry = _cache.get(htmlSource); | 
| 867     if (entry != null) { | 893     if (entry != null) { | 
| 868       return entry.getValue(REFERENCED_LIBRARIES); | 894       return entry.getValue(REFERENCED_LIBRARIES); | 
| 869     } | 895     } | 
| 870     return Source.EMPTY_LIST; | 896     return Source.EMPTY_LIST; | 
| 871   } | 897   } | 
| 872 | 898 | 
| 873   @override | 899   @override | 
| 874   LibraryElement getLibraryElement(Source source) => | 900   LibraryElement getLibraryElement(Source source) => | 
| 875       _cache.getValue(source, LIBRARY_ELEMENT); | 901       getResult(source, LIBRARY_ELEMENT); | 
| 876 | 902 | 
| 877   @override | 903   @override | 
| 878   LineInfo getLineInfo(Source source) => _cache.getValue(source, LINE_INFO); | 904   LineInfo getLineInfo(Source source) => getResult(source, LINE_INFO); | 
| 879 | 905 | 
| 880   @override | 906   @override | 
| 881   int getModificationStamp(Source source) { | 907   int getModificationStamp(Source source) { | 
| 882     int stamp = _contentCache.getModificationStamp(source); | 908     int stamp = _contentCache.getModificationStamp(source); | 
| 883     if (stamp != null) { | 909     if (stamp != null) { | 
| 884       return stamp; | 910       return stamp; | 
| 885     } | 911     } | 
| 886     return source.modificationStamp; | 912     return source.modificationStamp; | 
| 887   } | 913   } | 
| 888 | 914 | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 919     return getResolvedCompilationUnit2(unitSource, library.source); | 945     return getResolvedCompilationUnit2(unitSource, library.source); | 
| 920   } | 946   } | 
| 921 | 947 | 
| 922   @override | 948   @override | 
| 923   CompilationUnit getResolvedCompilationUnit2( | 949   CompilationUnit getResolvedCompilationUnit2( | 
| 924       Source unitSource, Source librarySource) { | 950       Source unitSource, Source librarySource) { | 
| 925     if (!AnalysisEngine.isDartFileName(unitSource.shortName) || | 951     if (!AnalysisEngine.isDartFileName(unitSource.shortName) || | 
| 926         !AnalysisEngine.isDartFileName(librarySource.shortName)) { | 952         !AnalysisEngine.isDartFileName(librarySource.shortName)) { | 
| 927       return null; | 953       return null; | 
| 928     } | 954     } | 
| 929     return _cache.getValue( | 955     return getResult( | 
| 930         new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT); | 956         new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT); | 
| 931   } | 957   } | 
| 932 | 958 | 
| 933   @override | 959   @override | 
| 934   @deprecated | 960   @deprecated | 
| 935   ht.HtmlUnit getResolvedHtmlUnit(Source htmlSource) { | 961   ht.HtmlUnit getResolvedHtmlUnit(Source htmlSource) { | 
| 936     // TODO(brianwilkerson) Remove this method after switching to the new task | 962     // TODO(brianwilkerson) Remove this method after switching to the new task | 
| 937     // model. | 963     // model. | 
| 938     throw new UnimplementedError('Not supported in the new task model'); | 964     throw new UnimplementedError('Not supported in the new task model'); | 
| 939   } | 965   } | 
| 940 | 966 | 
| 941   @override | 967   @override | 
|  | 968   Object getResult(AnalysisTarget target, ResultDescriptor result) { | 
|  | 969     return _cache.getValue(target, result); | 
|  | 970   } | 
|  | 971 | 
|  | 972   @override | 
| 942   List<Source> getSourcesWithFullName(String path) { | 973   List<Source> getSourcesWithFullName(String path) { | 
| 943     return analysisCache.getSourcesWithFullName(path); | 974     return analysisCache.getSourcesWithFullName(path); | 
| 944   } | 975   } | 
| 945 | 976 | 
| 946   @override | 977   @override | 
| 947   bool handleContentsChanged( | 978   bool handleContentsChanged( | 
| 948       Source source, String originalContents, String newContents, bool notify) { | 979       Source source, String originalContents, String newContents, bool notify) { | 
| 949     CacheEntry entry = _cache.get(source); | 980     CacheEntry entry = _cache.get(source); | 
| 950     if (entry == null) { | 981     if (entry == null) { | 
| 951       return false; | 982       return false; | 
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 985     } | 1016     } | 
| 986     if (notify && changed) { | 1017     if (notify && changed) { | 
| 987       _onSourcesChangedController | 1018       _onSourcesChangedController | 
| 988           .add(new SourcesChangedEvent.changedContent(source, newContents)); | 1019           .add(new SourcesChangedEvent.changedContent(source, newContents)); | 
| 989     } | 1020     } | 
| 990     return changed; | 1021     return changed; | 
| 991   } | 1022   } | 
| 992 | 1023 | 
| 993   @override | 1024   @override | 
| 994   void invalidateLibraryHints(Source librarySource) { | 1025   void invalidateLibraryHints(Source librarySource) { | 
| 995     List<Source> sources = _cache.getValue(librarySource, UNITS); | 1026     List<Source> sources = getResult(librarySource, UNITS); | 
| 996     if (sources != null) { | 1027     if (sources != null) { | 
| 997       for (Source source in sources) { | 1028       for (Source source in sources) { | 
| 998         getCacheEntry(source).setState(HINTS, CacheState.INVALID); | 1029         getCacheEntry(source).setState(HINTS, CacheState.INVALID); | 
| 999       } | 1030       } | 
| 1000     } | 1031     } | 
| 1001   } | 1032   } | 
| 1002 | 1033 | 
| 1003   @override | 1034   @override | 
| 1004   bool isClientLibrary(Source librarySource) { | 1035   bool isClientLibrary(Source librarySource) { | 
| 1005     CacheEntry entry = _cache.get(librarySource); | 1036     CacheEntry entry = _cache.get(librarySource); | 
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1100       entry.setState(RESOLVE_TYPE_NAMES_ERRORS, CacheState.FLUSHED); | 1131       entry.setState(RESOLVE_TYPE_NAMES_ERRORS, CacheState.FLUSHED); | 
| 1101       setValue(SCAN_ERRORS, AnalysisError.NO_ERRORS); | 1132       setValue(SCAN_ERRORS, AnalysisError.NO_ERRORS); | 
| 1102       setValue(SOURCE_KIND, SourceKind.LIBRARY); | 1133       setValue(SOURCE_KIND, SourceKind.LIBRARY); | 
| 1103       entry.setState(TOKEN_STREAM, CacheState.FLUSHED); | 1134       entry.setState(TOKEN_STREAM, CacheState.FLUSHED); | 
| 1104       setValue(UNITS, <Source>[librarySource]); | 1135       setValue(UNITS, <Source>[librarySource]); | 
| 1105 | 1136 | 
| 1106       LibrarySpecificUnit unit = | 1137       LibrarySpecificUnit unit = | 
| 1107           new LibrarySpecificUnit(librarySource, librarySource); | 1138           new LibrarySpecificUnit(librarySource, librarySource); | 
| 1108       entry = getCacheEntry(unit); | 1139       entry = getCacheEntry(unit); | 
| 1109       setValue(HINTS, AnalysisError.NO_ERRORS); | 1140       setValue(HINTS, AnalysisError.NO_ERRORS); | 
| 1110       // dartEntry.setValue(LINTS, AnalysisError.NO_ERRORS); | 1141       setValue(LINTS, AnalysisError.NO_ERRORS); | 
| 1111       entry.setState(RESOLVE_REFERENCES_ERRORS, CacheState.FLUSHED); | 1142       setValue(LIBRARY_UNIT_ERRORS, AnalysisError.NO_ERRORS); | 
|  | 1143       setValue(RESOLVE_TYPE_NAMES_ERRORS, AnalysisError.NO_ERRORS); | 
|  | 1144       setValue(RESOLVE_UNIT_ERRORS, AnalysisError.NO_ERRORS); | 
| 1112       entry.setState(RESOLVED_UNIT, CacheState.FLUSHED); | 1145       entry.setState(RESOLVED_UNIT, CacheState.FLUSHED); | 
| 1113       entry.setState(RESOLVED_UNIT1, CacheState.FLUSHED); | 1146       entry.setState(RESOLVED_UNIT1, CacheState.FLUSHED); | 
| 1114       entry.setState(RESOLVED_UNIT2, CacheState.FLUSHED); | 1147       entry.setState(RESOLVED_UNIT2, CacheState.FLUSHED); | 
| 1115       entry.setState(RESOLVED_UNIT3, CacheState.FLUSHED); | 1148       entry.setState(RESOLVED_UNIT3, CacheState.FLUSHED); | 
| 1116       entry.setState(RESOLVED_UNIT4, CacheState.FLUSHED); | 1149       entry.setState(RESOLVED_UNIT4, CacheState.FLUSHED); | 
| 1117       entry.setState(RESOLVED_UNIT5, CacheState.FLUSHED); | 1150       entry.setState(RESOLVED_UNIT5, CacheState.FLUSHED); | 
|  | 1151       entry.setState(RESOLVED_UNIT6, CacheState.FLUSHED); | 
|  | 1152       entry.setState(RESOLVED_UNIT7, CacheState.FLUSHED); | 
|  | 1153       entry.setState(RESOLVED_UNIT8, CacheState.FLUSHED); | 
|  | 1154       entry.setState(RESOLVED_UNIT9, CacheState.FLUSHED); | 
| 1118       // USED_IMPORTED_ELEMENTS | 1155       // USED_IMPORTED_ELEMENTS | 
| 1119       // USED_LOCAL_ELEMENTS | 1156       // USED_LOCAL_ELEMENTS | 
|  | 1157       setValue(VARIABLE_REFERENCE_ERRORS, AnalysisError.NO_ERRORS); | 
| 1120       setValue(VERIFY_ERRORS, AnalysisError.NO_ERRORS); | 1158       setValue(VERIFY_ERRORS, AnalysisError.NO_ERRORS); | 
| 1121     }); | 1159     }); | 
| 1122 | 1160 | 
| 1123     CacheEntry entry = getCacheEntry(AnalysisContextTarget.request); | 1161     CacheEntry entry = getCacheEntry(AnalysisContextTarget.request); | 
| 1124     entry.setValue(TYPE_PROVIDER, typeProvider, TargetedResult.EMPTY_LIST); | 1162     entry.setValue(TYPE_PROVIDER, typeProvider, TargetedResult.EMPTY_LIST); | 
| 1125   } | 1163   } | 
| 1126 | 1164 | 
| 1127   @override | 1165   @override | 
| 1128   void removeListener(AnalysisListener listener) { | 1166   void removeListener(AnalysisListener listener) { | 
| 1129     _listeners.remove(listener); | 1167     _listeners.remove(listener); | 
| 1130   } | 1168   } | 
| 1131 | 1169 | 
| 1132   @override | 1170   @override | 
| 1133   CompilationUnit resolveCompilationUnit( | 1171   CompilationUnit resolveCompilationUnit( | 
| 1134       Source unitSource, LibraryElement library) { | 1172       Source unitSource, LibraryElement library) { | 
| 1135     if (library == null) { | 1173     if (library == null) { | 
| 1136       return null; | 1174       return null; | 
| 1137     } | 1175     } | 
| 1138     return resolveCompilationUnit2(unitSource, library.source); | 1176     return resolveCompilationUnit2(unitSource, library.source); | 
| 1139   } | 1177   } | 
| 1140 | 1178 | 
| 1141   @override | 1179   @override | 
| 1142   CompilationUnit resolveCompilationUnit2( | 1180   CompilationUnit resolveCompilationUnit2( | 
| 1143       Source unitSource, Source librarySource) { | 1181       Source unitSource, Source librarySource) { | 
| 1144     if (!AnalysisEngine.isDartFileName(unitSource.shortName) || |  | 
| 1145         !AnalysisEngine.isDartFileName(librarySource.shortName)) { |  | 
| 1146       return null; |  | 
| 1147     } |  | 
| 1148     return computeResult( | 1182     return computeResult( | 
| 1149         new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT); | 1183         new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT); | 
| 1150   } | 1184   } | 
| 1151 | 1185 | 
| 1152   @override | 1186   @override | 
| 1153   @deprecated | 1187   @deprecated | 
| 1154   ht.HtmlUnit resolveHtmlUnit(Source htmlSource) { | 1188   ht.HtmlUnit resolveHtmlUnit(Source htmlSource) { | 
| 1155     // TODO(brianwilkerson) Remove this method after switching to the new task | 1189     // TODO(brianwilkerson) Remove this method after switching to the new task | 
| 1156     // model. | 1190     // model. | 
| 1157     throw new UnimplementedError('Not supported in the new task model'); | 1191     throw new UnimplementedError('Not supported in the new task model'); | 
| (...skipping 27 matching lines...) Expand all  Loading... | 
| 1185 | 1219 | 
| 1186   @override | 1220   @override | 
| 1187   void test_flushAstStructures(Source source) { | 1221   void test_flushAstStructures(Source source) { | 
| 1188     CacheEntry entry = getCacheEntry(source); | 1222     CacheEntry entry = getCacheEntry(source); | 
| 1189     entry.setState(PARSED_UNIT, CacheState.FLUSHED); | 1223     entry.setState(PARSED_UNIT, CacheState.FLUSHED); | 
| 1190     entry.setState(RESOLVED_UNIT1, CacheState.FLUSHED); | 1224     entry.setState(RESOLVED_UNIT1, CacheState.FLUSHED); | 
| 1191     entry.setState(RESOLVED_UNIT2, CacheState.FLUSHED); | 1225     entry.setState(RESOLVED_UNIT2, CacheState.FLUSHED); | 
| 1192     entry.setState(RESOLVED_UNIT3, CacheState.FLUSHED); | 1226     entry.setState(RESOLVED_UNIT3, CacheState.FLUSHED); | 
| 1193     entry.setState(RESOLVED_UNIT4, CacheState.FLUSHED); | 1227     entry.setState(RESOLVED_UNIT4, CacheState.FLUSHED); | 
| 1194     entry.setState(RESOLVED_UNIT5, CacheState.FLUSHED); | 1228     entry.setState(RESOLVED_UNIT5, CacheState.FLUSHED); | 
|  | 1229     entry.setState(RESOLVED_UNIT6, CacheState.FLUSHED); | 
|  | 1230     entry.setState(RESOLVED_UNIT7, CacheState.FLUSHED); | 
|  | 1231     entry.setState(RESOLVED_UNIT8, CacheState.FLUSHED); | 
|  | 1232     entry.setState(RESOLVED_UNIT9, CacheState.FLUSHED); | 
| 1195     entry.setState(RESOLVED_UNIT, CacheState.FLUSHED); | 1233     entry.setState(RESOLVED_UNIT, CacheState.FLUSHED); | 
| 1196   } | 1234   } | 
| 1197 | 1235 | 
| 1198   @override | 1236   @override | 
| 1199   bool validateCacheConsistency() { | 1237   bool validateCacheConsistency() { | 
| 1200     int consistencyCheckStart = JavaSystem.nanoTime(); | 1238     int consistencyCheckStart = JavaSystem.nanoTime(); | 
| 1201     HashSet<Source> changedSources = new HashSet<Source>(); | 1239     HashSet<Source> changedSources = new HashSet<Source>(); | 
| 1202     HashSet<Source> missingSources = new HashSet<Source>(); | 1240     HashSet<Source> missingSources = new HashSet<Source>(); | 
| 1203     for (Source source in _cache.sources) { | 1241     for (Source source in _cache.sources) { | 
| 1204       CacheEntry entry = _cache.get(source); | 1242       CacheEntry entry = _cache.get(source); | 
| 1205       int sourceTime = getModificationStamp(source); | 1243       int sourceTime = getModificationStamp(source); | 
| 1206       if (sourceTime != entry.modificationTime) { | 1244       if (sourceTime != entry.modificationTime) { | 
| 1207         changedSources.add(source); | 1245         changedSources.add(source); | 
| 1208       } | 1246       } | 
| 1209       if (entry.exception != null) { | 1247       if (entry.exception != null) { | 
| 1210         if (!exists(source)) { | 1248         if (!exists(source)) { | 
| 1211           missingSources.add(source); | 1249           missingSources.add(source); | 
| 1212         } | 1250         } | 
| 1213       } | 1251       } | 
| 1214     } | 1252     } | 
| 1215     for (Source source in changedSources) { | 1253     for (Source source in changedSources) { | 
| 1216       _sourceChanged(source); | 1254       _sourceChanged(source); | 
| 1217     } | 1255     } | 
| 1218     int removalCount = 0; | 1256     int removalCount = 0; | 
| 1219     for (Source source in missingSources) { | 1257     for (Source source in missingSources) { | 
| 1220       if (getLibrariesContaining(source).isEmpty && | 1258       if (getLibrariesContaining(source).isEmpty && | 
| 1221           getLibrariesDependingOn(source).isEmpty) { | 1259           getLibrariesDependingOn(source).isEmpty) { | 
| 1222         _cache.remove(source); | 1260         _removeFromCache(source); | 
| 1223         removalCount++; | 1261         removalCount++; | 
| 1224       } | 1262       } | 
| 1225     } | 1263     } | 
| 1226     int consistencyCheckEnd = JavaSystem.nanoTime(); | 1264     int consistencyCheckEnd = JavaSystem.nanoTime(); | 
| 1227     if (changedSources.length > 0 || missingSources.length > 0) { | 1265     if (changedSources.length > 0 || missingSources.length > 0) { | 
| 1228       StringBuffer buffer = new StringBuffer(); | 1266       StringBuffer buffer = new StringBuffer(); | 
| 1229       buffer.write("Consistency check took "); | 1267       buffer.write("Consistency check took "); | 
| 1230       buffer.write((consistencyCheckEnd - consistencyCheckStart) / 1000000.0); | 1268       buffer.write((consistencyCheckEnd - consistencyCheckStart) / 1000000.0); | 
| 1231       buffer.writeln(" ms and found"); | 1269       buffer.writeln(" ms and found"); | 
| 1232       buffer.write("  "); | 1270       buffer.write("  "); | 
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1420   /** | 1458   /** | 
| 1421    * Create a cache entry for the given [source]. The source was explicitly | 1459    * Create a cache entry for the given [source]. The source was explicitly | 
| 1422    * added to this context if [explicitlyAdded] is `true`. Return the cache | 1460    * added to this context if [explicitlyAdded] is `true`. Return the cache | 
| 1423    * entry that was created. | 1461    * entry that was created. | 
| 1424    */ | 1462    */ | 
| 1425   CacheEntry _createCacheEntry(Source source, bool explicitlyAdded) { | 1463   CacheEntry _createCacheEntry(Source source, bool explicitlyAdded) { | 
| 1426     CacheEntry entry = new CacheEntry(source); | 1464     CacheEntry entry = new CacheEntry(source); | 
| 1427     entry.modificationTime = getModificationStamp(source); | 1465     entry.modificationTime = getModificationStamp(source); | 
| 1428     entry.explicitlyAdded = explicitlyAdded; | 1466     entry.explicitlyAdded = explicitlyAdded; | 
| 1429     _cache.put(entry); | 1467     _cache.put(entry); | 
|  | 1468     if (!explicitlyAdded) { | 
|  | 1469       _implicitAnalysisEventsController | 
|  | 1470           .add(new ImplicitAnalysisEvent(source, true)); | 
|  | 1471     } | 
| 1430     return entry; | 1472     return entry; | 
| 1431   } | 1473   } | 
| 1432 | 1474 | 
| 1433   /** | 1475   /** | 
| 1434    * Return a list containing all of the cache entries for targets associated | 1476    * Return a list containing all of the cache entries for targets associated | 
| 1435    * with the given [source]. | 1477    * with the given [source]. | 
| 1436    */ | 1478    */ | 
| 1437   List<CacheEntry> _entriesFor(Source source) { | 1479   List<CacheEntry> _entriesFor(Source source) { | 
| 1438     List<CacheEntry> entries = <CacheEntry>[]; | 1480     List<CacheEntry> entries = <CacheEntry>[]; | 
| 1439     MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator(); | 1481     MapIterator<AnalysisTarget, CacheEntry> iterator = _cache.iterator(); | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1500       return Source.EMPTY_LIST; | 1542       return Source.EMPTY_LIST; | 
| 1501     } | 1543     } | 
| 1502     return sources; | 1544     return sources; | 
| 1503   } | 1545   } | 
| 1504 | 1546 | 
| 1505   /** | 1547   /** | 
| 1506    * Look at the given [source] to see whether a task needs to be performed | 1548    * Look at the given [source] to see whether a task needs to be performed | 
| 1507    * related to it. If so, add the source to the set of sources that need to be | 1549    * related to it. If so, add the source to the set of sources that need to be | 
| 1508    * processed. This method is intended to be used for testing purposes only. | 1550    * processed. This method is intended to be used for testing purposes only. | 
| 1509    */ | 1551    */ | 
| 1510   void _getSourcesNeedingProcessing(Source source, CacheEntry entry, | 1552   void _getSourcesNeedingProcessing( | 
| 1511       bool isPriority, bool hintsEnabled, bool lintsEnabled, | 1553       Source source, | 
|  | 1554       CacheEntry entry, | 
|  | 1555       bool isPriority, | 
|  | 1556       bool hintsEnabled, | 
|  | 1557       bool lintsEnabled, | 
| 1512       HashSet<Source> sources) { | 1558       HashSet<Source> sources) { | 
| 1513     CacheState state = entry.getState(CONTENT); | 1559     CacheState state = entry.getState(CONTENT); | 
| 1514     if (state == CacheState.INVALID || | 1560     if (state == CacheState.INVALID || | 
| 1515         (isPriority && state == CacheState.FLUSHED)) { | 1561         (isPriority && state == CacheState.FLUSHED)) { | 
| 1516       sources.add(source); | 1562       sources.add(source); | 
| 1517       return; | 1563       return; | 
| 1518     } else if (state == CacheState.ERROR) { | 1564     } else if (state == CacheState.ERROR) { | 
| 1519       return; | 1565       return; | 
| 1520     } | 1566     } | 
| 1521     state = entry.getState(SOURCE_KIND); | 1567     state = entry.getState(SOURCE_KIND); | 
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1582           if (hintsEnabled) { | 1628           if (hintsEnabled) { | 
| 1583             state = unitEntry.getState(HINTS); | 1629             state = unitEntry.getState(HINTS); | 
| 1584             if (state == CacheState.INVALID || | 1630             if (state == CacheState.INVALID || | 
| 1585                 (isPriority && state == CacheState.FLUSHED)) { | 1631                 (isPriority && state == CacheState.FLUSHED)) { | 
| 1586               sources.add(source); | 1632               sources.add(source); | 
| 1587               return; | 1633               return; | 
| 1588             } else if (state == CacheState.ERROR) { | 1634             } else if (state == CacheState.ERROR) { | 
| 1589               return; | 1635               return; | 
| 1590             } | 1636             } | 
| 1591           } | 1637           } | 
| 1592 //          if (lintsEnabled) { | 1638           if (lintsEnabled) { | 
| 1593 //            state = unitEntry.getState(LINTS); | 1639             state = unitEntry.getState(LINTS); | 
| 1594 //            if (state == CacheState.INVALID || | 1640             if (state == CacheState.INVALID || | 
| 1595 //                (isPriority && state == CacheState.FLUSHED)) { | 1641                 (isPriority && state == CacheState.FLUSHED)) { | 
| 1596 //              sources.add(source); | 1642               sources.add(source); | 
| 1597 //              return; | 1643               return; | 
| 1598 //            } else if (state == CacheState.ERROR) { | 1644             } else if (state == CacheState.ERROR) { | 
| 1599 //              return; | 1645               return; | 
| 1600 //            } | 1646             } | 
| 1601 //          } | 1647           } | 
| 1602         } | 1648         } | 
| 1603       } | 1649       } | 
| 1604 //    } else if (kind == SourceKind.HTML) { | 1650 //    } else if (kind == SourceKind.HTML) { | 
| 1605 //      CacheState parsedUnitState = entry.getState(HtmlEntry.PARSED_UNIT); | 1651 //      CacheState parsedUnitState = entry.getState(HtmlEntry.PARSED_UNIT); | 
| 1606 //      if (parsedUnitState == CacheState.INVALID || | 1652 //      if (parsedUnitState == CacheState.INVALID || | 
| 1607 //          (isPriority && parsedUnitState == CacheState.FLUSHED)) { | 1653 //          (isPriority && parsedUnitState == CacheState.FLUSHED)) { | 
| 1608 //        sources.add(source); | 1654 //        sources.add(source); | 
| 1609 //        return; | 1655 //        return; | 
| 1610 //      } | 1656 //      } | 
| 1611 //      CacheState resolvedUnitState = | 1657 //      CacheState resolvedUnitState = | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
| 1630    * given [source] has been updated to the given [errors]. | 1676    * given [source] has been updated to the given [errors]. | 
| 1631    */ | 1677    */ | 
| 1632   void _notifyErrors( | 1678   void _notifyErrors( | 
| 1633       Source source, List<AnalysisError> errors, LineInfo lineInfo) { | 1679       Source source, List<AnalysisError> errors, LineInfo lineInfo) { | 
| 1634     int count = _listeners.length; | 1680     int count = _listeners.length; | 
| 1635     for (int i = 0; i < count; i++) { | 1681     for (int i = 0; i < count; i++) { | 
| 1636       _listeners[i].computedErrors(this, source, errors, lineInfo); | 1682       _listeners[i].computedErrors(this, source, errors, lineInfo); | 
| 1637     } | 1683     } | 
| 1638   } | 1684   } | 
| 1639 | 1685 | 
|  | 1686   void _removeFromCache(Source source) { | 
|  | 1687     CacheEntry entry = _cache.remove(source); | 
|  | 1688     if (entry != null && !entry.explicitlyAdded) { | 
|  | 1689       _implicitAnalysisEventsController | 
|  | 1690           .add(new ImplicitAnalysisEvent(source, false)); | 
|  | 1691     } | 
|  | 1692   } | 
|  | 1693 | 
| 1640   /** | 1694   /** | 
| 1641    * Remove the given [source] from the priority order if it is in the list. | 1695    * Remove the given [source] from the priority order if it is in the list. | 
| 1642    */ | 1696    */ | 
| 1643   void _removeFromPriorityOrder(Source source) { | 1697   void _removeFromPriorityOrder(Source source) { | 
| 1644     int count = _priorityOrder.length; | 1698     int count = _priorityOrder.length; | 
| 1645     List<Source> newOrder = <Source>[]; | 1699     List<Source> newOrder = <Source>[]; | 
| 1646     for (int i = 0; i < count; i++) { | 1700     for (int i = 0; i < count; i++) { | 
| 1647       if (_priorityOrder[i] != source) { | 1701       if (_priorityOrder[i] != source) { | 
| 1648         newOrder.add(_priorityOrder[i]); | 1702         newOrder.add(_priorityOrder[i]); | 
| 1649       } | 1703       } | 
| 1650     } | 1704     } | 
| 1651     if (newOrder.length < count) { | 1705     if (newOrder.length < count) { | 
| 1652       analysisPriorityOrder = newOrder; | 1706       analysisPriorityOrder = newOrder; | 
| 1653     } | 1707     } | 
| 1654   } | 1708   } | 
| 1655 | 1709 | 
| 1656   /** | 1710   /** | 
| 1657    * Create an entry for the newly added [source] and invalidate any sources | 1711    * Create an entry for the newly added [source] and invalidate any sources | 
| 1658    * that referenced the source before it existed. | 1712    * that referenced the source before it existed. | 
| 1659    */ | 1713    */ | 
| 1660   void _sourceAvailable(Source source) { | 1714   void _sourceAvailable(Source source) { | 
|  | 1715     // TODO(brianwilkerson) This method needs to check whether the source was | 
|  | 1716     // previously being implicitly analyzed. If so, the cache entry needs to be | 
|  | 1717     // update to reflect the new status and an event needs to be generated to | 
|  | 1718     // inform clients that it is no longer being implicitly analyzed. | 
| 1661     CacheEntry entry = _cache.get(source); | 1719     CacheEntry entry = _cache.get(source); | 
| 1662     if (entry == null) { | 1720     if (entry == null) { | 
| 1663       _createCacheEntry(source, true); | 1721       _createCacheEntry(source, true); | 
| 1664     } else { | 1722     } else { | 
| 1665       entry.modificationTime = getModificationStamp(source); | 1723       entry.modificationTime = getModificationStamp(source); | 
| 1666       entry.setState(CONTENT, CacheState.INVALID); | 1724       entry.setState(CONTENT, CacheState.INVALID); | 
| 1667     } | 1725     } | 
| 1668   } | 1726   } | 
| 1669 | 1727 | 
| 1670   /** | 1728   /** | 
| (...skipping 13 matching lines...) Expand all  Loading... | 
| 1684       entry.setState(CONTENT, CacheState.FLUSHED); | 1742       entry.setState(CONTENT, CacheState.FLUSHED); | 
| 1685       try { | 1743       try { | 
| 1686         TimestampedData<String> fileContents = getContents(source); | 1744         TimestampedData<String> fileContents = getContents(source); | 
| 1687         if (fileContents.data == sourceContent) { | 1745         if (fileContents.data == sourceContent) { | 
| 1688           int time = fileContents.modificationTime; | 1746           int time = fileContents.modificationTime; | 
| 1689           for (CacheEntry entry in _entriesFor(source)) { | 1747           for (CacheEntry entry in _entriesFor(source)) { | 
| 1690             entry.modificationTime = time; | 1748             entry.modificationTime = time; | 
| 1691           } | 1749           } | 
| 1692           return; | 1750           return; | 
| 1693         } | 1751         } | 
| 1694       } catch (e) {} | 1752       } catch (e) { | 
|  | 1753         entry.modificationTime = -1; | 
|  | 1754       } | 
| 1695     } | 1755     } | 
| 1696     // We need to invalidate the cache. | 1756     // We need to invalidate the cache. | 
| 1697     { | 1757     { | 
| 1698       Object delta = null; | 1758       Object delta = null; | 
| 1699       if (AnalysisEngine.instance.limitInvalidationInTaskModel && | 1759       if (AnalysisEngine.instance.limitInvalidationInTaskModel && | 
| 1700           AnalysisEngine.isDartFileName(source.fullName)) { | 1760           AnalysisEngine.isDartFileName(source.fullName)) { | 
| 1701         // TODO(scheglov) Incorrect implementation in general. | 1761         // TODO(scheglov) Incorrect implementation in general. | 
| 1702         entry.setState(TOKEN_STREAM, CacheState.FLUSHED); | 1762         entry.setState(TOKEN_STREAM, CacheState.FLUSHED); | 
| 1703         entry.setState(PARSED_UNIT, CacheState.FLUSHED); | 1763         entry.setState(PARSED_UNIT, CacheState.FLUSHED); | 
| 1704         List<Source> librarySources = getLibrariesContaining(source); | 1764         List<Source> librarySources = getLibrariesContaining(source); | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 1721 //                  'dartDelta: add=${dartDelta.addedNames} remove=${dartDelta.r
      emovedNames}'); | 1781 //                  'dartDelta: add=${dartDelta.addedNames} remove=${dartDelta.r
      emovedNames}'); | 
| 1722               delta = dartDelta; | 1782               delta = dartDelta; | 
| 1723               entry.setState(CONTENT, CacheState.INVALID, delta: delta); | 1783               entry.setState(CONTENT, CacheState.INVALID, delta: delta); | 
| 1724               return; | 1784               return; | 
| 1725             } | 1785             } | 
| 1726           } | 1786           } | 
| 1727         } | 1787         } | 
| 1728       } | 1788       } | 
| 1729       entry.setState(CONTENT, CacheState.INVALID); | 1789       entry.setState(CONTENT, CacheState.INVALID); | 
| 1730     } | 1790     } | 
| 1731     dartWorkManager.applyChange( | 1791     for (WorkManager workManager in workManagers) { | 
| 1732         Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST); | 1792       workManager.applyChange( | 
| 1733     htmlWorkManager.applyChange( | 1793           Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST); | 
| 1734         Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST); | 1794     } | 
| 1735   } | 1795   } | 
| 1736 | 1796 | 
| 1737   /** | 1797   /** | 
| 1738    * Record that the give [source] has been deleted. | 1798    * Record that the give [source] has been deleted. | 
| 1739    */ | 1799    */ | 
| 1740   void _sourceDeleted(Source source) { | 1800   void _sourceDeleted(Source source) { | 
| 1741     // TODO(brianwilkerson) Implement this. | 1801     // TODO(brianwilkerson) Implement or remove this. | 
| 1742 //    SourceEntry sourceEntry = _cache.get(source); | 1802 //    SourceEntry sourceEntry = _cache.get(source); | 
| 1743 //    if (sourceEntry is HtmlEntry) { | 1803 //    if (sourceEntry is HtmlEntry) { | 
| 1744 //      HtmlEntry htmlEntry = sourceEntry; | 1804 //      HtmlEntry htmlEntry = sourceEntry; | 
| 1745 //      htmlEntry.recordContentError(new CaughtException( | 1805 //      htmlEntry.recordContentError(new CaughtException( | 
| 1746 //          new AnalysisException("This source was marked as being deleted"), | 1806 //          new AnalysisException("This source was marked as being deleted"), | 
| 1747 //          null)); | 1807 //          null)); | 
| 1748 //    } else if (sourceEntry is DartEntry) { | 1808 //    } else if (sourceEntry is DartEntry) { | 
| 1749 //      DartEntry dartEntry = sourceEntry; | 1809 //      DartEntry dartEntry = sourceEntry; | 
| 1750 //      HashSet<Source> libraries = new HashSet<Source>(); | 1810 //      HashSet<Source> libraries = new HashSet<Source>(); | 
| 1751 //      for (Source librarySource in getLibrariesContaining(source)) { | 1811 //      for (Source librarySource in getLibrariesContaining(source)) { | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 1762 //          new AnalysisException("This source was marked as being deleted"), | 1822 //          new AnalysisException("This source was marked as being deleted"), | 
| 1763 //          null)); | 1823 //          null)); | 
| 1764 //    } | 1824 //    } | 
| 1765     _removeFromPriorityOrder(source); | 1825     _removeFromPriorityOrder(source); | 
| 1766   } | 1826   } | 
| 1767 | 1827 | 
| 1768   /** | 1828   /** | 
| 1769    * Record that the given [source] has been removed. | 1829    * Record that the given [source] has been removed. | 
| 1770    */ | 1830    */ | 
| 1771   void _sourceRemoved(Source source) { | 1831   void _sourceRemoved(Source source) { | 
| 1772     _cache.remove(source); | 1832     _removeFromCache(source); | 
| 1773     _removeFromPriorityOrder(source); | 1833     _removeFromPriorityOrder(source); | 
| 1774   } | 1834   } | 
| 1775 | 1835 | 
| 1776   /** | 1836   /** | 
| 1777    * TODO(scheglov) A hackish, limited incremental resolution implementation. | 1837    * TODO(scheglov) A hackish, limited incremental resolution implementation. | 
| 1778    */ | 1838    */ | 
| 1779   bool _tryPoorMansIncrementalResolution(Source unitSource, String newCode) { | 1839   bool _tryPoorMansIncrementalResolution(Source unitSource, String newCode) { | 
| 1780     return PerformanceStatistics.incrementalAnalysis.makeCurrentWhile(() { | 1840     return PerformanceStatistics.incrementalAnalysis.makeCurrentWhile(() { | 
| 1781       incrementalResolutionValidation_lastUnitSource = null; | 1841       incrementalResolutionValidation_lastUnitSource = null; | 
| 1782       incrementalResolutionValidation_lastLibrarySource = null; | 1842       incrementalResolutionValidation_lastLibrarySource = null; | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 1804       } | 1864       } | 
| 1805       // prepare the existing unit | 1865       // prepare the existing unit | 
| 1806       CompilationUnit oldUnit = | 1866       CompilationUnit oldUnit = | 
| 1807           getResolvedCompilationUnit2(unitSource, librarySource); | 1867           getResolvedCompilationUnit2(unitSource, librarySource); | 
| 1808       if (oldUnit == null) { | 1868       if (oldUnit == null) { | 
| 1809         return false; | 1869         return false; | 
| 1810       } | 1870       } | 
| 1811       // do resolution | 1871       // do resolution | 
| 1812       Stopwatch perfCounter = new Stopwatch()..start(); | 1872       Stopwatch perfCounter = new Stopwatch()..start(); | 
| 1813       PoorMansIncrementalResolver resolver = new PoorMansIncrementalResolver( | 1873       PoorMansIncrementalResolver resolver = new PoorMansIncrementalResolver( | 
| 1814           typeProvider, unitSource, null, sourceEntry, unitEntry, oldUnit, | 1874           typeProvider, | 
| 1815           analysisOptions.incrementalApi, analysisOptions); | 1875           unitSource, | 
|  | 1876           null, | 
|  | 1877           sourceEntry, | 
|  | 1878           unitEntry, | 
|  | 1879           oldUnit, | 
|  | 1880           analysisOptions.incrementalApi); | 
| 1816       bool success = resolver.resolve(newCode); | 1881       bool success = resolver.resolve(newCode); | 
| 1817       AnalysisEngine.instance.instrumentationService.logPerformance( | 1882       AnalysisEngine.instance.instrumentationService.logPerformance( | 
| 1818           AnalysisPerformanceKind.INCREMENTAL, perfCounter, | 1883           AnalysisPerformanceKind.INCREMENTAL, | 
|  | 1884           perfCounter, | 
| 1819           'success=$success,context_id=$_id,code_length=${newCode.length}'); | 1885           'success=$success,context_id=$_id,code_length=${newCode.length}'); | 
| 1820       if (!success) { | 1886       if (!success) { | 
| 1821         return false; | 1887         return false; | 
| 1822       } | 1888       } | 
| 1823       // if validation, remember the result, but throw it away | 1889       // if validation, remember the result, but throw it away | 
| 1824       if (analysisOptions.incrementalValidation) { | 1890       if (analysisOptions.incrementalValidation) { | 
| 1825         incrementalResolutionValidation_lastUnitSource = oldUnit.element.source; | 1891         incrementalResolutionValidation_lastUnitSource = oldUnit.element.source; | 
| 1826         incrementalResolutionValidation_lastLibrarySource = | 1892         incrementalResolutionValidation_lastLibrarySource = | 
| 1827             oldUnit.element.library.source; | 1893             oldUnit.element.library.source; | 
| 1828         incrementalResolutionValidation_lastUnit = oldUnit; | 1894         incrementalResolutionValidation_lastUnit = oldUnit; | 
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2022         new PendingFuture<T>(_context, target, computeValue); | 2088         new PendingFuture<T>(_context, target, computeValue); | 
| 2023     if (!pendingFuture.evaluate(entry)) { | 2089     if (!pendingFuture.evaluate(entry)) { | 
| 2024       _context._pendingFutureTargets | 2090       _context._pendingFutureTargets | 
| 2025           .putIfAbsent(target, () => <PendingFuture>[]) | 2091           .putIfAbsent(target, () => <PendingFuture>[]) | 
| 2026           .add(pendingFuture); | 2092           .add(pendingFuture); | 
| 2027       scheduleComputation(); | 2093       scheduleComputation(); | 
| 2028     } | 2094     } | 
| 2029     return pendingFuture.future; | 2095     return pendingFuture.future; | 
| 2030   } | 2096   } | 
| 2031 } | 2097 } | 
| OLD | NEW | 
|---|