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

Side by Side Diff: pkg/analyzer/lib/src/context/context.dart

Issue 1311773005: Extension point for WorkManagerFactory(s). (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Move classes as by review comments. Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library 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/scanner.dart';
30 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; 31 import 'package:analyzer/src/generated/sdk.dart' show DartSdk;
31 import 'package:analyzer/src/generated/source.dart'; 32 import 'package:analyzer/src/generated/source.dart';
32 import 'package:analyzer/src/generated/utilities_collection.dart'; 33 import 'package:analyzer/src/generated/utilities_collection.dart';
33 import 'package:analyzer/src/task/dart.dart'; 34 import 'package:analyzer/src/task/dart.dart';
34 import 'package:analyzer/src/task/dart_work_manager.dart'; 35 import 'package:analyzer/src/task/dart_work_manager.dart';
35 import 'package:analyzer/src/task/driver.dart'; 36 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'; 37 import 'package:analyzer/src/task/incremental_element_builder.dart';
39 import 'package:analyzer/src/task/manager.dart'; 38 import 'package:analyzer/src/task/manager.dart';
40 import 'package:analyzer/task/dart.dart'; 39 import 'package:analyzer/task/dart.dart';
41 import 'package:analyzer/task/general.dart'; 40 import 'package:analyzer/task/general.dart';
42 import 'package:analyzer/task/html.dart'; 41 import 'package:analyzer/task/html.dart';
43 import 'package:analyzer/task/model.dart'; 42 import 'package:analyzer/task/model.dart';
44 import 'package:html/dom.dart' show Document; 43 import 'package:html/dom.dart' show Document;
45 44
46 /** 45 /**
47 * Type of callback functions used by PendingFuture. Functions of this type 46 * Type of callback functions used by PendingFuture. Functions of this type
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 * are stored. 114 * are stored.
116 */ 115 */
117 AnalysisCache _cache; 116 AnalysisCache _cache;
118 117
119 /** 118 /**
120 * The task manager used to manage the tasks used to analyze code. 119 * The task manager used to manage the tasks used to analyze code.
121 */ 120 */
122 TaskManager _taskManager; 121 TaskManager _taskManager;
123 122
124 /** 123 /**
124 * A list of all [WorkManager]s used by this context.
125 */
126 final List<WorkManager> workManagers = <WorkManager>[];
127
128 /**
125 * The [DartWorkManager] instance that performs Dart specific scheduling. 129 * The [DartWorkManager] instance that performs Dart specific scheduling.
126 */ 130 */
127 DartWorkManager dartWorkManager; 131 DartWorkManager dartWorkManager;
128 132
129 /** 133 /**
130 * The work manager that performs HTML specific scheduling.
131 */
132 HtmlWorkManager htmlWorkManager;
133
134 /**
135 * The analysis driver used to perform analysis. 134 * The analysis driver used to perform analysis.
136 */ 135 */
137 AnalysisDriver driver; 136 AnalysisDriver driver;
138 137
139 /** 138 /**
140 * A list containing sources for which data should not be flushed. 139 * A list containing sources for which data should not be flushed.
141 */ 140 */
142 List<Source> _priorityOrder = <Source>[]; 141 List<Source> _priorityOrder = <Source>[];
143 142
144 /** 143 /**
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 */ 211 */
213 LibraryResolverFactory libraryResolverFactory; 212 LibraryResolverFactory libraryResolverFactory;
214 213
215 /** 214 /**
216 * Initialize a newly created analysis context. 215 * Initialize a newly created analysis context.
217 */ 216 */
218 AnalysisContextImpl() { 217 AnalysisContextImpl() {
219 _privatePartition = new UniversalCachePartition(this); 218 _privatePartition = new UniversalCachePartition(this);
220 _cache = createCacheFromSourceFactory(null); 219 _cache = createCacheFromSourceFactory(null);
221 _taskManager = AnalysisEngine.instance.taskManager; 220 _taskManager = AnalysisEngine.instance.taskManager;
222 // TODO(scheglov) Get WorkManager(Factory)(s) from plugins. 221 for (WorkManagerFactory factory
223 dartWorkManager = new DartWorkManager(this); 222 in AnalysisEngine.instance.enginePlugin.workManagerFactories) {
224 htmlWorkManager = new HtmlWorkManager(this); 223 WorkManager workManager = factory(this);
225 driver = new AnalysisDriver( 224 if (workManager != null) {
226 _taskManager, <WorkManager>[dartWorkManager, htmlWorkManager], this); 225 workManagers.add(workManager);
226 if (workManager is DartWorkManager) {
227 dartWorkManager = workManager;
228 }
229 }
230 }
231 driver = new AnalysisDriver(_taskManager, workManagers, this);
227 _onSourcesChangedController = 232 _onSourcesChangedController =
228 new StreamController<SourcesChangedEvent>.broadcast(); 233 new StreamController<SourcesChangedEvent>.broadcast();
229 _implicitAnalysisEventsController = 234 _implicitAnalysisEventsController =
230 new StreamController<ImplicitAnalysisEvent>.broadcast(); 235 new StreamController<ImplicitAnalysisEvent>.broadcast();
231 } 236 }
232 237
233 @override 238 @override
234 AnalysisCache get analysisCache => _cache; 239 AnalysisCache get analysisCache => _cache;
235 240
236 @override 241 @override
(...skipping 24 matching lines...) Expand all
261 this._options.dart2jsHint = options.dart2jsHint; 266 this._options.dart2jsHint = options.dart2jsHint;
262 this._options.enableStrictCallChecks = options.enableStrictCallChecks; 267 this._options.enableStrictCallChecks = options.enableStrictCallChecks;
263 this._options.enableSuperMixins = options.enableSuperMixins; 268 this._options.enableSuperMixins = options.enableSuperMixins;
264 this._options.hint = options.hint; 269 this._options.hint = options.hint;
265 this._options.incremental = options.incremental; 270 this._options.incremental = options.incremental;
266 this._options.incrementalApi = options.incrementalApi; 271 this._options.incrementalApi = options.incrementalApi;
267 this._options.incrementalValidation = options.incrementalValidation; 272 this._options.incrementalValidation = options.incrementalValidation;
268 this._options.lint = options.lint; 273 this._options.lint = options.lint;
269 this._options.preserveComments = options.preserveComments; 274 this._options.preserveComments = options.preserveComments;
270 if (needsRecompute) { 275 if (needsRecompute) {
271 dartWorkManager.onAnalysisOptionsChanged(); 276 for (WorkManager workManager in workManagers) {
272 htmlWorkManager.onAnalysisOptionsChanged(); 277 workManager.onAnalysisOptionsChanged();
278 }
273 } 279 }
274 } 280 }
275 281
276 @override 282 @override
277 void set analysisPriorityOrder(List<Source> sources) { 283 void set analysisPriorityOrder(List<Source> sources) {
278 if (sources == null || sources.isEmpty) { 284 if (sources == null || sources.isEmpty) {
279 _priorityOrder = Source.EMPTY_LIST; 285 _priorityOrder = Source.EMPTY_LIST;
280 } else { 286 } else {
281 while (sources.remove(null)) { 287 while (sources.remove(null)) {
282 // Nothing else to do. 288 // Nothing else to do.
283 } 289 }
284 if (sources.isEmpty) { 290 if (sources.isEmpty) {
285 _priorityOrder = Source.EMPTY_LIST; 291 _priorityOrder = Source.EMPTY_LIST;
286 } else { 292 } else {
287 _priorityOrder = sources; 293 _priorityOrder = sources;
288 } 294 }
289 } 295 }
290 dartWorkManager.applyPriorityTargets(_priorityOrder); 296 for (WorkManager workManager in workManagers) {
291 htmlWorkManager.applyPriorityTargets(_priorityOrder); 297 workManager.applyPriorityTargets(_priorityOrder);
298 }
292 } 299 }
293 300
294 @override 301 @override
295 set contentCache(ContentCache value) { 302 set contentCache(ContentCache value) {
296 _contentCache = value; 303 _contentCache = value;
297 } 304 }
298 305
299 @override 306 @override
300 DeclaredVariables get declaredVariables => _declaredVariables; 307 DeclaredVariables get declaredVariables => _declaredVariables;
301 308
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 @override 360 @override
354 List<Source> get librarySources => _getSources(SourceKind.LIBRARY); 361 List<Source> get librarySources => _getSources(SourceKind.LIBRARY);
355 362
356 @override 363 @override
357 Stream<SourcesChangedEvent> get onSourcesChanged => 364 Stream<SourcesChangedEvent> get onSourcesChanged =>
358 _onSourcesChangedController.stream; 365 _onSourcesChangedController.stream;
359 366
360 /** 367 /**
361 * Make _pendingFutureSources available to unit tests. 368 * Make _pendingFutureSources available to unit tests.
362 */ 369 */
363 HashMap<AnalysisTarget, List<PendingFuture>> get pendingFutureSources_forTesti ng => 370 HashMap<AnalysisTarget,
371 List<PendingFuture>> get pendingFutureSources_forTesting =>
364 _pendingFutureTargets; 372 _pendingFutureTargets;
365 373
366 @override 374 @override
367 List<Source> get prioritySources => _priorityOrder; 375 List<Source> get prioritySources => _priorityOrder;
368 376
369 @override 377 @override
370 List<AnalysisTarget> get priorityTargets => prioritySources; 378 List<AnalysisTarget> get priorityTargets => prioritySources;
371 379
372 @override 380 @override
373 CachePartition get privateAnalysisCachePartition => _privatePartition; 381 CachePartition get privateAnalysisCachePartition => _privatePartition;
374 382
375 @override 383 @override
376 SourceFactory get sourceFactory => _sourceFactory; 384 SourceFactory get sourceFactory => _sourceFactory;
377 385
378 @override 386 @override
379 void set sourceFactory(SourceFactory factory) { 387 void set sourceFactory(SourceFactory factory) {
380 if (identical(_sourceFactory, factory)) { 388 if (identical(_sourceFactory, factory)) {
381 return; 389 return;
382 } else if (factory.context != null) { 390 } else if (factory.context != null) {
383 throw new IllegalStateException( 391 throw new IllegalStateException(
384 "Source factories cannot be shared between contexts"); 392 "Source factories cannot be shared between contexts");
385 } 393 }
386 if (_sourceFactory != null) { 394 if (_sourceFactory != null) {
387 _sourceFactory.context = null; 395 _sourceFactory.context = null;
388 } 396 }
389 factory.context = this; 397 factory.context = this;
390 _sourceFactory = factory; 398 _sourceFactory = factory;
391 _cache = createCacheFromSourceFactory(factory); 399 _cache = createCacheFromSourceFactory(factory);
392 dartWorkManager.onSourceFactoryChanged(); 400 for (WorkManager workManager in workManagers) {
393 htmlWorkManager.onSourceFactoryChanged(); 401 workManager.onSourceFactoryChanged();
402 }
394 } 403 }
395 404
396 @override 405 @override
397 List<Source> get sources { 406 List<Source> get sources {
398 return _cache.sources.toList(); 407 return _cache.sources.toList();
399 } 408 }
400 409
401 /** 410 /**
402 * Return a list of the sources that would be processed by 411 * Return a list of the sources that would be processed by
403 * [performAnalysisTask]. This method duplicates, and must therefore be kept 412 * [performAnalysisTask]. This method duplicates, and must therefore be kept
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
524 .forEach((Source source, ChangeSet_ContentChange change) { 533 .forEach((Source source, ChangeSet_ContentChange change) {
525 _contentRangeChanged(source, change.contents, change.offset, 534 _contentRangeChanged(source, change.contents, change.offset,
526 change.oldLength, change.newLength); 535 change.oldLength, change.newLength);
527 }); 536 });
528 for (Source source in changeSet.deletedSources) { 537 for (Source source in changeSet.deletedSources) {
529 _sourceDeleted(source); 538 _sourceDeleted(source);
530 } 539 }
531 for (Source source in removedSources) { 540 for (Source source in removedSources) {
532 _sourceRemoved(source); 541 _sourceRemoved(source);
533 } 542 }
534 dartWorkManager.applyChange( 543 for (WorkManager workManager in workManagers) {
535 changeSet.addedSources, changeSet.changedSources, removedSources); 544 workManager.applyChange(
536 htmlWorkManager.applyChange( 545 changeSet.addedSources, changeSet.changedSources, removedSources);
537 changeSet.addedSources, changeSet.changedSources, removedSources); 546 }
538 _onSourcesChangedController.add(new SourcesChangedEvent(changeSet)); 547 _onSourcesChangedController.add(new SourcesChangedEvent(changeSet));
539 } 548 }
540 549
541 @override 550 @override
542 String computeDocumentationComment(Element element) { 551 String computeDocumentationComment(Element element) {
543 if (element == null) { 552 if (element == null) {
544 return null; 553 return null;
545 } 554 }
546 Source source = element.source; 555 Source source = element.source;
547 if (source == null) { 556 if (source == null) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
628 } 637 }
629 638
630 @override 639 @override
631 CancelableFuture<CompilationUnit> computeResolvedCompilationUnitAsync( 640 CancelableFuture<CompilationUnit> computeResolvedCompilationUnitAsync(
632 Source unitSource, Source librarySource) { 641 Source unitSource, Source librarySource) {
633 if (!AnalysisEngine.isDartFileName(unitSource.shortName) || 642 if (!AnalysisEngine.isDartFileName(unitSource.shortName) ||
634 !AnalysisEngine.isDartFileName(librarySource.shortName)) { 643 !AnalysisEngine.isDartFileName(librarySource.shortName)) {
635 return new CancelableFuture.error(new AnalysisNotScheduledError()); 644 return new CancelableFuture.error(new AnalysisNotScheduledError());
636 } 645 }
637 var unitTarget = new LibrarySpecificUnit(librarySource, unitSource); 646 var unitTarget = new LibrarySpecificUnit(librarySource, unitSource);
638 return new _AnalysisFutureHelper<CompilationUnit>(this).computeAsync( 647 return new _AnalysisFutureHelper<CompilationUnit>(this)
639 unitTarget, (CacheEntry entry) { 648 .computeAsync(unitTarget, (CacheEntry entry) {
640 CacheState state = entry.getState(RESOLVED_UNIT); 649 CacheState state = entry.getState(RESOLVED_UNIT);
641 if (state == CacheState.ERROR) { 650 if (state == CacheState.ERROR) {
642 throw entry.exception; 651 throw entry.exception;
643 } else if (state == CacheState.INVALID) { 652 } else if (state == CacheState.INVALID) {
644 return null; 653 return null;
645 } 654 }
646 return entry.getValue(RESOLVED_UNIT); 655 return entry.getValue(RESOLVED_UNIT);
647 }, () { 656 }, () {
648 dartWorkManager.addPriorityResult(unitTarget, RESOLVED_UNIT); 657 dartWorkManager.addPriorityResult(unitTarget, RESOLVED_UNIT);
649 }); 658 });
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 } catch (exception) { 803 } catch (exception) {
795 // If the location cannot be decoded for some reason then the underlying 804 // If the location cannot be decoded for some reason then the underlying
796 // cause should have been logged already and we can fall though to return 805 // cause should have been logged already and we can fall though to return
797 // null. 806 // null.
798 } 807 }
799 return null; 808 return null;
800 } 809 }
801 810
802 @override 811 @override
803 AnalysisErrorInfo getErrors(Source source) { 812 AnalysisErrorInfo getErrors(Source source) {
804 String name = source.shortName; 813 List<AnalysisError> allErrors = <AnalysisError>[];
805 if (AnalysisEngine.isDartFileName(name) || source is DartScript) { 814 for (WorkManager workManager in workManagers) {
806 return dartWorkManager.getErrors(source); 815 List<AnalysisError> errors = workManager.getErrors(source);
807 } else if (AnalysisEngine.isHtmlFileName(name)) { 816 allErrors.addAll(errors);
808 return htmlWorkManager.getErrors(source);
809 } 817 }
810 return new AnalysisErrorInfoImpl(AnalysisError.NO_ERRORS, null); 818 LineInfo lineInfo = getLineInfo(source);
819 return new AnalysisErrorInfoImpl(allErrors, lineInfo);
811 } 820 }
812 821
813 @override 822 @override
814 @deprecated 823 @deprecated
815 HtmlElement getHtmlElement(Source source) { 824 HtmlElement getHtmlElement(Source source) {
816 // TODO(brianwilkerson) Remove this method after switching to the new task 825 // TODO(brianwilkerson) Remove this method after switching to the new task
817 // model. 826 // model.
818 throw new UnimplementedError('Not supported in the new task model'); 827 throw new UnimplementedError('Not supported in the new task model');
819 } 828 }
820 829
(...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after
1523 return Source.EMPTY_LIST; 1532 return Source.EMPTY_LIST;
1524 } 1533 }
1525 return sources; 1534 return sources;
1526 } 1535 }
1527 1536
1528 /** 1537 /**
1529 * Look at the given [source] to see whether a task needs to be performed 1538 * Look at the given [source] to see whether a task needs to be performed
1530 * related to it. If so, add the source to the set of sources that need to be 1539 * related to it. If so, add the source to the set of sources that need to be
1531 * processed. This method is intended to be used for testing purposes only. 1540 * processed. This method is intended to be used for testing purposes only.
1532 */ 1541 */
1533 void _getSourcesNeedingProcessing(Source source, CacheEntry entry, 1542 void _getSourcesNeedingProcessing(
1534 bool isPriority, bool hintsEnabled, bool lintsEnabled, 1543 Source source,
1544 CacheEntry entry,
1545 bool isPriority,
1546 bool hintsEnabled,
1547 bool lintsEnabled,
1535 HashSet<Source> sources) { 1548 HashSet<Source> sources) {
1536 CacheState state = entry.getState(CONTENT); 1549 CacheState state = entry.getState(CONTENT);
1537 if (state == CacheState.INVALID || 1550 if (state == CacheState.INVALID ||
1538 (isPriority && state == CacheState.FLUSHED)) { 1551 (isPriority && state == CacheState.FLUSHED)) {
1539 sources.add(source); 1552 sources.add(source);
1540 return; 1553 return;
1541 } else if (state == CacheState.ERROR) { 1554 } else if (state == CacheState.ERROR) {
1542 return; 1555 return;
1543 } 1556 }
1544 state = entry.getState(SOURCE_KIND); 1557 state = entry.getState(SOURCE_KIND);
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
1756 // 'dartDelta: add=${dartDelta.addedNames} remove=${dartDelta.r emovedNames}'); 1769 // 'dartDelta: add=${dartDelta.addedNames} remove=${dartDelta.r emovedNames}');
1757 delta = dartDelta; 1770 delta = dartDelta;
1758 entry.setState(CONTENT, CacheState.INVALID, delta: delta); 1771 entry.setState(CONTENT, CacheState.INVALID, delta: delta);
1759 return; 1772 return;
1760 } 1773 }
1761 } 1774 }
1762 } 1775 }
1763 } 1776 }
1764 entry.setState(CONTENT, CacheState.INVALID); 1777 entry.setState(CONTENT, CacheState.INVALID);
1765 } 1778 }
1766 dartWorkManager.applyChange( 1779 for (WorkManager workManager in workManagers) {
1767 Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST); 1780 workManager.applyChange(
1768 htmlWorkManager.applyChange( 1781 Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST);
1769 Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST); 1782 }
1770 } 1783 }
1771 1784
1772 /** 1785 /**
1773 * Record that the give [source] has been deleted. 1786 * Record that the give [source] has been deleted.
1774 */ 1787 */
1775 void _sourceDeleted(Source source) { 1788 void _sourceDeleted(Source source) {
1776 // TODO(brianwilkerson) Implement or remove this. 1789 // TODO(brianwilkerson) Implement or remove this.
1777 // SourceEntry sourceEntry = _cache.get(source); 1790 // SourceEntry sourceEntry = _cache.get(source);
1778 // if (sourceEntry is HtmlEntry) { 1791 // if (sourceEntry is HtmlEntry) {
1779 // HtmlEntry htmlEntry = sourceEntry; 1792 // HtmlEntry htmlEntry = sourceEntry;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1839 } 1852 }
1840 // prepare the existing unit 1853 // prepare the existing unit
1841 CompilationUnit oldUnit = 1854 CompilationUnit oldUnit =
1842 getResolvedCompilationUnit2(unitSource, librarySource); 1855 getResolvedCompilationUnit2(unitSource, librarySource);
1843 if (oldUnit == null) { 1856 if (oldUnit == null) {
1844 return false; 1857 return false;
1845 } 1858 }
1846 // do resolution 1859 // do resolution
1847 Stopwatch perfCounter = new Stopwatch()..start(); 1860 Stopwatch perfCounter = new Stopwatch()..start();
1848 PoorMansIncrementalResolver resolver = new PoorMansIncrementalResolver( 1861 PoorMansIncrementalResolver resolver = new PoorMansIncrementalResolver(
1849 typeProvider, unitSource, null, sourceEntry, unitEntry, oldUnit, 1862 typeProvider,
1850 analysisOptions.incrementalApi, analysisOptions); 1863 unitSource,
1864 null,
1865 sourceEntry,
1866 unitEntry,
1867 oldUnit,
1868 analysisOptions.incrementalApi,
1869 analysisOptions);
1851 bool success = resolver.resolve(newCode); 1870 bool success = resolver.resolve(newCode);
1852 AnalysisEngine.instance.instrumentationService.logPerformance( 1871 AnalysisEngine.instance.instrumentationService.logPerformance(
1853 AnalysisPerformanceKind.INCREMENTAL, perfCounter, 1872 AnalysisPerformanceKind.INCREMENTAL,
1873 perfCounter,
1854 'success=$success,context_id=$_id,code_length=${newCode.length}'); 1874 'success=$success,context_id=$_id,code_length=${newCode.length}');
1855 if (!success) { 1875 if (!success) {
1856 return false; 1876 return false;
1857 } 1877 }
1858 // if validation, remember the result, but throw it away 1878 // if validation, remember the result, but throw it away
1859 if (analysisOptions.incrementalValidation) { 1879 if (analysisOptions.incrementalValidation) {
1860 incrementalResolutionValidation_lastUnitSource = oldUnit.element.source; 1880 incrementalResolutionValidation_lastUnitSource = oldUnit.element.source;
1861 incrementalResolutionValidation_lastLibrarySource = 1881 incrementalResolutionValidation_lastLibrarySource =
1862 oldUnit.element.library.source; 1882 oldUnit.element.library.source;
1863 incrementalResolutionValidation_lastUnit = oldUnit; 1883 incrementalResolutionValidation_lastUnit = oldUnit;
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
2057 new PendingFuture<T>(_context, target, computeValue); 2077 new PendingFuture<T>(_context, target, computeValue);
2058 if (!pendingFuture.evaluate(entry)) { 2078 if (!pendingFuture.evaluate(entry)) {
2059 _context._pendingFutureTargets 2079 _context._pendingFutureTargets
2060 .putIfAbsent(target, () => <PendingFuture>[]) 2080 .putIfAbsent(target, () => <PendingFuture>[])
2061 .add(pendingFuture); 2081 .add(pendingFuture);
2062 scheduleComputation(); 2082 scheduleComputation();
2063 } 2083 }
2064 return pendingFuture.future; 2084 return pendingFuture.future;
2065 } 2085 }
2066 } 2086 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698