| 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'; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 import 'package:analyzer/src/generated/resolver.dart'; | 28 import 'package:analyzer/src/generated/resolver.dart'; |
| 29 import 'package:analyzer/src/generated/scanner.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'; | 36 import 'package:analyzer/src/task/html.dart'; |
| 37 import 'package:analyzer/src/task/html_work_manager.dart'; | 37 import 'package:analyzer/src/task/html_work_manager.dart'; |
| 38 import 'package:analyzer/src/task/incremental_element_builder.dart'; |
| 38 import 'package:analyzer/src/task/manager.dart'; | 39 import 'package:analyzer/src/task/manager.dart'; |
| 39 import 'package:analyzer/task/dart.dart'; | 40 import 'package:analyzer/task/dart.dart'; |
| 40 import 'package:analyzer/task/general.dart'; | 41 import 'package:analyzer/task/general.dart'; |
| 41 import 'package:analyzer/task/html.dart'; | 42 import 'package:analyzer/task/html.dart'; |
| 42 import 'package:analyzer/task/model.dart'; | 43 import 'package:analyzer/task/model.dart'; |
| 43 import 'package:html/dom.dart' show Document; | 44 import 'package:html/dom.dart' show Document; |
| 44 | 45 |
| 45 /** | 46 /** |
| 46 * Type of callback functions used by PendingFuture. Functions of this type | 47 * Type of callback functions used by PendingFuture. Functions of this type |
| 47 * should perform a computation based on the data in [entry] and return it. If | 48 * should perform a computation based on the data in [entry] and return it. If |
| (...skipping 1665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1713 if (fileContents.data == sourceContent) { | 1714 if (fileContents.data == sourceContent) { |
| 1714 int time = fileContents.modificationTime; | 1715 int time = fileContents.modificationTime; |
| 1715 for (CacheEntry entry in _entriesFor(source)) { | 1716 for (CacheEntry entry in _entriesFor(source)) { |
| 1716 entry.modificationTime = time; | 1717 entry.modificationTime = time; |
| 1717 } | 1718 } |
| 1718 return; | 1719 return; |
| 1719 } | 1720 } |
| 1720 } catch (e) {} | 1721 } catch (e) {} |
| 1721 } | 1722 } |
| 1722 // We need to invalidate the cache. | 1723 // We need to invalidate the cache. |
| 1723 entry.setState(CONTENT, CacheState.INVALID); | 1724 { |
| 1725 Object delta = null; |
| 1726 if (AnalysisEngine.instance.limitInvalidationInTaskModel && |
| 1727 AnalysisEngine.isDartFileName(source.fullName)) { |
| 1728 // TODO(scheglov) Incorrect implementation in general. |
| 1729 entry.setState(TOKEN_STREAM, CacheState.FLUSHED); |
| 1730 entry.setState(SCAN_ERRORS, CacheState.FLUSHED); |
| 1731 entry.setState(PARSED_UNIT, CacheState.FLUSHED); |
| 1732 entry.setState(PARSE_ERRORS, CacheState.FLUSHED); |
| 1733 CompilationUnit oldUnit = getResolvedCompilationUnit2(source, source); |
| 1734 if (oldUnit != null) { |
| 1735 CompilationUnit newUnit = parseCompilationUnit(source); |
| 1736 IncrementalCompilationUnitElementBuilder builder = |
| 1737 new IncrementalCompilationUnitElementBuilder(oldUnit, newUnit); |
| 1738 builder.build(); |
| 1739 CompilationUnitElementDelta unitDelta = builder.unitDelta; |
| 1740 DartDelta dartDelta = new DartDelta(source); |
| 1741 dartDelta.hasDirectiveChange = unitDelta.hasDirectiveChange; |
| 1742 unitDelta.addedDeclarations.forEach(dartDelta.elementAdded); |
| 1743 unitDelta.removedDeclarations.forEach(dartDelta.elementRemoved); |
| 1744 delta = dartDelta; |
| 1745 } |
| 1746 } |
| 1747 entry.setState(CONTENT, CacheState.INVALID, delta: delta); |
| 1748 } |
| 1724 dartWorkManager.applyChange( | 1749 dartWorkManager.applyChange( |
| 1725 Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST); | 1750 Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST); |
| 1726 htmlWorkManager.applyChange( | 1751 htmlWorkManager.applyChange( |
| 1727 Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST); | 1752 Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST); |
| 1728 } | 1753 } |
| 1729 | 1754 |
| 1730 /** | 1755 /** |
| 1731 * Record that the give [source] has been deleted. | 1756 * Record that the give [source] has been deleted. |
| 1732 */ | 1757 */ |
| 1733 void _sourceDeleted(Source source) { | 1758 void _sourceDeleted(Source source) { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 1763 */ | 1788 */ |
| 1764 void _sourceRemoved(Source source) { | 1789 void _sourceRemoved(Source source) { |
| 1765 _cache.remove(source); | 1790 _cache.remove(source); |
| 1766 _removeFromPriorityOrder(source); | 1791 _removeFromPriorityOrder(source); |
| 1767 } | 1792 } |
| 1768 | 1793 |
| 1769 /** | 1794 /** |
| 1770 * TODO(scheglov) A hackish, limited incremental resolution implementation. | 1795 * TODO(scheglov) A hackish, limited incremental resolution implementation. |
| 1771 */ | 1796 */ |
| 1772 bool _tryPoorMansIncrementalResolution(Source unitSource, String newCode) { | 1797 bool _tryPoorMansIncrementalResolution(Source unitSource, String newCode) { |
| 1798 if (AnalysisEngine.instance.limitInvalidationInTaskModel) { |
| 1799 return false; |
| 1800 } |
| 1773 return PerformanceStatistics.incrementalAnalysis.makeCurrentWhile(() { | 1801 return PerformanceStatistics.incrementalAnalysis.makeCurrentWhile(() { |
| 1774 incrementalResolutionValidation_lastUnitSource = null; | 1802 incrementalResolutionValidation_lastUnitSource = null; |
| 1775 incrementalResolutionValidation_lastLibrarySource = null; | 1803 incrementalResolutionValidation_lastLibrarySource = null; |
| 1776 incrementalResolutionValidation_lastUnit = null; | 1804 incrementalResolutionValidation_lastUnit = null; |
| 1777 // prepare the entry | 1805 // prepare the entry |
| 1778 CacheEntry sourceEntry = _cache.get(unitSource); | 1806 CacheEntry sourceEntry = _cache.get(unitSource); |
| 1779 if (sourceEntry == null) { | 1807 if (sourceEntry == null) { |
| 1780 return false; | 1808 return false; |
| 1781 } | 1809 } |
| 1782 // prepare the (only) library source | 1810 // prepare the (only) library source |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2015 new PendingFuture<T>(_context, target, computeValue); | 2043 new PendingFuture<T>(_context, target, computeValue); |
| 2016 if (!pendingFuture.evaluate(entry)) { | 2044 if (!pendingFuture.evaluate(entry)) { |
| 2017 _context._pendingFutureTargets | 2045 _context._pendingFutureTargets |
| 2018 .putIfAbsent(target, () => <PendingFuture>[]) | 2046 .putIfAbsent(target, () => <PendingFuture>[]) |
| 2019 .add(pendingFuture); | 2047 .add(pendingFuture); |
| 2020 scheduleComputation(); | 2048 scheduleComputation(); |
| 2021 } | 2049 } |
| 2022 return pendingFuture.future; | 2050 return pendingFuture.future; |
| 2023 } | 2051 } |
| 2024 } | 2052 } |
| OLD | NEW |