OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 engine.incremental_resolver; | 5 library engine.incremental_resolver; |
6 | 6 |
7 import 'dart:collection'; | 7 import 'dart:collection'; |
8 import 'dart:math' as math; | 8 import 'dart:math' as math; |
9 | 9 |
10 import 'package:analyzer/src/context/cache.dart' | 10 import 'package:analyzer/src/context/cache.dart' |
(...skipping 846 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 @override | 857 @override |
858 DeltaResult validate(InternalAnalysisContext context, AnalysisTarget target, | 858 DeltaResult validate(InternalAnalysisContext context, AnalysisTarget target, |
859 ResultDescriptor descriptor) { | 859 ResultDescriptor descriptor) { |
860 // don't invalidate results of standard Dart tasks | 860 // don't invalidate results of standard Dart tasks |
861 bool isByTask(TaskDescriptor taskDescriptor) { | 861 bool isByTask(TaskDescriptor taskDescriptor) { |
862 return taskDescriptor.results.contains(descriptor); | 862 return taskDescriptor.results.contains(descriptor); |
863 } | 863 } |
864 if (descriptor == CONTENT) { | 864 if (descriptor == CONTENT) { |
865 return DeltaResult.KEEP_CONTINUE; | 865 return DeltaResult.KEEP_CONTINUE; |
866 } | 866 } |
867 if (target is Source && target != source) { | 867 if (target is LibrarySpecificUnit && target.unit != source) { |
868 if (isByTask(DartErrorsTask.DESCRIPTOR) || | 868 if (isByTask(GatherUsedLocalElementsTask.DESCRIPTOR) || |
869 isByTask(LibraryErrorsReadyTask.DESCRIPTOR)) { | 869 isByTask(GatherUsedImportedElementsTask.DESCRIPTOR)) { |
870 return DeltaResult.KEEP_CONTINUE; | 870 return DeltaResult.KEEP_CONTINUE; |
871 } | 871 } |
872 } | 872 } |
873 if (target is LibrarySpecificUnit && | |
874 target.unit != source && | |
875 target.library != source) { | |
876 if (isByTask(GatherUsedLocalElementsTask.DESCRIPTOR) || | |
877 isByTask(GatherUsedImportedElementsTask.DESCRIPTOR) || | |
878 isByTask(GenerateHintsTask.DESCRIPTOR) || | |
879 isByTask(LibraryUnitErrorsTask.DESCRIPTOR)) { | |
880 return DeltaResult.KEEP_CONTINUE; | |
881 } | |
882 } | |
883 if (isByTask(BuildCompilationUnitElementTask.DESCRIPTOR) || | 873 if (isByTask(BuildCompilationUnitElementTask.DESCRIPTOR) || |
884 isByTask(BuildDirectiveElementsTask.DESCRIPTOR) || | 874 isByTask(BuildDirectiveElementsTask.DESCRIPTOR) || |
885 isByTask(BuildEnumMemberElementsTask.DESCRIPTOR) || | 875 isByTask(BuildEnumMemberElementsTask.DESCRIPTOR) || |
886 isByTask(BuildExportNamespaceTask.DESCRIPTOR) || | 876 isByTask(BuildExportNamespaceTask.DESCRIPTOR) || |
887 isByTask(BuildLibraryElementTask.DESCRIPTOR) || | 877 isByTask(BuildLibraryElementTask.DESCRIPTOR) || |
888 isByTask(BuildPublicNamespaceTask.DESCRIPTOR) || | 878 isByTask(BuildPublicNamespaceTask.DESCRIPTOR) || |
889 isByTask(BuildSourceExportClosureTask.DESCRIPTOR) || | 879 isByTask(BuildSourceExportClosureTask.DESCRIPTOR) || |
890 isByTask(BuildSourceImportExportClosureTask.DESCRIPTOR) || | 880 isByTask(BuildSourceImportExportClosureTask.DESCRIPTOR) || |
891 isByTask(ComputeConstantDependenciesTask.DESCRIPTOR) || | 881 isByTask(ComputeConstantDependenciesTask.DESCRIPTOR) || |
892 isByTask(ComputeConstantValueTask.DESCRIPTOR) || | 882 isByTask(ComputeConstantValueTask.DESCRIPTOR) || |
| 883 isByTask(DartErrorsTask.DESCRIPTOR) || |
893 isByTask(EvaluateUnitConstantsTask.DESCRIPTOR) || | 884 isByTask(EvaluateUnitConstantsTask.DESCRIPTOR) || |
| 885 isByTask(GenerateHintsTask.DESCRIPTOR) || |
894 isByTask(InferInstanceMembersInUnitTask.DESCRIPTOR) || | 886 isByTask(InferInstanceMembersInUnitTask.DESCRIPTOR) || |
895 isByTask(InferStaticVariableTypesInUnitTask.DESCRIPTOR) || | 887 isByTask(InferStaticVariableTypesInUnitTask.DESCRIPTOR) || |
| 888 isByTask(LibraryErrorsReadyTask.DESCRIPTOR) || |
| 889 isByTask(LibraryUnitErrorsTask.DESCRIPTOR) || |
896 isByTask(ParseDartTask.DESCRIPTOR) || | 890 isByTask(ParseDartTask.DESCRIPTOR) || |
897 isByTask(PartiallyResolveUnitReferencesTask.DESCRIPTOR) || | 891 isByTask(PartiallyResolveUnitReferencesTask.DESCRIPTOR) || |
898 isByTask(ScanDartTask.DESCRIPTOR) || | 892 isByTask(ScanDartTask.DESCRIPTOR) || |
899 isByTask(ResolveFunctionBodiesInUnitTask.DESCRIPTOR) || | 893 isByTask(ResolveFunctionBodiesInUnitTask.DESCRIPTOR) || |
900 isByTask(ResolveLibraryReferencesTask.DESCRIPTOR) || | 894 isByTask(ResolveLibraryReferencesTask.DESCRIPTOR) || |
901 isByTask(ResolveLibraryTypeNamesTask.DESCRIPTOR) || | 895 isByTask(ResolveLibraryTypeNamesTask.DESCRIPTOR) || |
902 isByTask(ResolveUnitTypeNamesTask.DESCRIPTOR) || | 896 isByTask(ResolveUnitTypeNamesTask.DESCRIPTOR) || |
903 isByTask(ResolveVariableReferencesTask.DESCRIPTOR) || | 897 isByTask(ResolveVariableReferencesTask.DESCRIPTOR) || |
904 isByTask(VerifyUnitTask.DESCRIPTOR)) { | 898 isByTask(VerifyUnitTask.DESCRIPTOR)) { |
905 return DeltaResult.KEEP_CONTINUE; | 899 return DeltaResult.KEEP_CONTINUE; |
906 } | 900 } |
907 // invalidate all the other results | 901 // invalidate all the other results |
908 return DeltaResult.INVALIDATE; | 902 return DeltaResult.INVALIDATE_NO_DELTA; |
909 } | 903 } |
910 } | 904 } |
911 | 905 |
912 /** | 906 /** |
913 * Instances of the class [IncrementalResolver] resolve the smallest portion of | 907 * Instances of the class [IncrementalResolver] resolve the smallest portion of |
914 * an AST structure that we currently know how to resolve. | 908 * an AST structure that we currently know how to resolve. |
915 */ | 909 */ |
916 class IncrementalResolver { | 910 class IncrementalResolver { |
917 /** | 911 /** |
918 * The element of the compilation unit being resolved. | 912 * The element of the compilation unit being resolved. |
(...skipping 368 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1287 void _updateEntry() { | 1281 void _updateEntry() { |
1288 if (oldEntry != null) { | 1282 if (oldEntry != null) { |
1289 _updateEntry_OLD(); | 1283 _updateEntry_OLD(); |
1290 } else { | 1284 } else { |
1291 _updateEntry_NEW(); | 1285 _updateEntry_NEW(); |
1292 } | 1286 } |
1293 } | 1287 } |
1294 | 1288 |
1295 void _updateEntry_NEW() { | 1289 void _updateEntry_NEW() { |
1296 _updateErrors_NEW(INFER_STATIC_VARIABLE_TYPES_ERRORS, _resolveErrors); | 1290 _updateErrors_NEW(INFER_STATIC_VARIABLE_TYPES_ERRORS, _resolveErrors); |
1297 _updateErrors_NEW(LIBRARY_UNIT_ERRORS, _resolveErrors); | |
1298 _updateErrors_NEW(PARTIALLY_RESOLVE_REFERENCES_ERRORS, _resolveErrors); | 1291 _updateErrors_NEW(PARTIALLY_RESOLVE_REFERENCES_ERRORS, _resolveErrors); |
1299 _updateErrors_NEW(RESOLVE_FUNCTION_BODIES_ERRORS, _resolveErrors); | 1292 _updateErrors_NEW(RESOLVE_FUNCTION_BODIES_ERRORS, _resolveErrors); |
1300 _updateErrors_NEW(RESOLVE_TYPE_NAMES_ERRORS, []); | 1293 _updateErrors_NEW(RESOLVE_TYPE_NAMES_ERRORS, []); |
1301 _updateErrors_NEW(VARIABLE_REFERENCE_ERRORS, []); | 1294 _updateErrors_NEW(VARIABLE_REFERENCE_ERRORS, []); |
1302 _updateErrors_NEW(VERIFY_ERRORS, _verifyErrors); | 1295 _updateErrors_NEW(VERIFY_ERRORS, _verifyErrors); |
1303 // invalidate results we don't update incrementally | 1296 // invalidate results we don't update incrementally |
1304 newUnitEntry.setState(USED_IMPORTED_ELEMENTS, CacheState.INVALID); | 1297 newUnitEntry.setState(USED_IMPORTED_ELEMENTS, CacheState.INVALID); |
1305 newUnitEntry.setState(USED_LOCAL_ELEMENTS, CacheState.INVALID); | 1298 newUnitEntry.setState(USED_LOCAL_ELEMENTS, CacheState.INVALID); |
1306 newUnitEntry.setState(HINTS, CacheState.INVALID); | 1299 newUnitEntry.setState(HINTS, CacheState.INVALID); |
1307 } | 1300 } |
(...skipping 24 matching lines...) Expand all Loading... |
1332 } | 1325 } |
1333 } | 1326 } |
1334 // done | 1327 // done |
1335 return errors; | 1328 return errors; |
1336 } | 1329 } |
1337 | 1330 |
1338 void _updateErrors_NEW(ResultDescriptor<List<AnalysisError>> descriptor, | 1331 void _updateErrors_NEW(ResultDescriptor<List<AnalysisError>> descriptor, |
1339 List<AnalysisError> newErrors) { | 1332 List<AnalysisError> newErrors) { |
1340 List<AnalysisError> oldErrors = newUnitEntry.getValue(descriptor); | 1333 List<AnalysisError> oldErrors = newUnitEntry.getValue(descriptor); |
1341 List<AnalysisError> errors = _updateErrors(oldErrors, newErrors); | 1334 List<AnalysisError> errors = _updateErrors(oldErrors, newErrors); |
1342 newUnitEntry.setValueIncremental(descriptor, errors); | 1335 newUnitEntry.setValueIncremental(descriptor, errors, true); |
1343 } | 1336 } |
1344 | 1337 |
1345 void _updateErrors_OLD(DataDescriptor<List<AnalysisError>> descriptor, | 1338 void _updateErrors_OLD(DataDescriptor<List<AnalysisError>> descriptor, |
1346 List<AnalysisError> newErrors) { | 1339 List<AnalysisError> newErrors) { |
1347 List<AnalysisError> oldErrors = | 1340 List<AnalysisError> oldErrors = |
1348 oldEntry.getValueInLibrary(descriptor, _librarySource); | 1341 oldEntry.getValueInLibrary(descriptor, _librarySource); |
1349 List<AnalysisError> errors = _updateErrors(oldErrors, newErrors); | 1342 List<AnalysisError> errors = _updateErrors(oldErrors, newErrors); |
1350 oldEntry.setValueInLibrary(descriptor, _librarySource, errors); | 1343 oldEntry.setValueInLibrary(descriptor, _librarySource, errors); |
1351 } | 1344 } |
1352 | 1345 |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1705 | 1698 |
1706 void _updateEntry() { | 1699 void _updateEntry() { |
1707 if (_oldEntry != null) { | 1700 if (_oldEntry != null) { |
1708 _updateEntry_OLD(); | 1701 _updateEntry_OLD(); |
1709 } else { | 1702 } else { |
1710 _updateEntry_NEW(); | 1703 _updateEntry_NEW(); |
1711 } | 1704 } |
1712 } | 1705 } |
1713 | 1706 |
1714 void _updateEntry_NEW() { | 1707 void _updateEntry_NEW() { |
1715 _newSourceEntry.setState(DART_ERRORS, CacheState.INVALID); | |
1716 // scan results | 1708 // scan results |
1717 List<TargetedResult> scanDeps = <TargetedResult>[ | 1709 _newSourceEntry.setValueIncremental(SCAN_ERRORS, _newScanErrors, true); |
1718 new TargetedResult(_unitSource, CONTENT) | 1710 _newSourceEntry.setValueIncremental(LINE_INFO, _newLineInfo, false); |
1719 ]; | |
1720 _newSourceEntry.setState(SCAN_ERRORS, CacheState.INVALID); | |
1721 _newSourceEntry.setValue(SCAN_ERRORS, _newScanErrors, scanDeps); | |
1722 _newSourceEntry.setValue(LINE_INFO, _newLineInfo, scanDeps); | |
1723 // parse results | 1711 // parse results |
1724 List<TargetedResult> parseDeps = <TargetedResult>[ | 1712 _newSourceEntry.setValueIncremental(PARSE_ERRORS, _newScanErrors, true); |
1725 new TargetedResult(_unitSource, TOKEN_STREAM) | 1713 _newSourceEntry.setValueIncremental(PARSED_UNIT, _newScanErrors, false); |
1726 ]; | |
1727 _newSourceEntry.setState(PARSE_ERRORS, CacheState.INVALID); | |
1728 _newSourceEntry.setValue(PARSE_ERRORS, _newParseErrors, parseDeps); | |
1729 _newSourceEntry.setValue(PARSED_UNIT, _oldUnit, parseDeps); | |
1730 } | 1714 } |
1731 | 1715 |
1732 void _updateEntry_OLD() { | 1716 void _updateEntry_OLD() { |
1733 _oldEntry.setValue(SourceEntry.LINE_INFO, _newLineInfo); | 1717 _oldEntry.setValue(SourceEntry.LINE_INFO, _newLineInfo); |
1734 _oldEntry.setValue(DartEntry.SCAN_ERRORS, _newScanErrors); | 1718 _oldEntry.setValue(DartEntry.SCAN_ERRORS, _newScanErrors); |
1735 _oldEntry.setValue(DartEntry.PARSE_ERRORS, _newParseErrors); | 1719 _oldEntry.setValue(DartEntry.PARSE_ERRORS, _newParseErrors); |
1736 } | 1720 } |
1737 | 1721 |
1738 /** | 1722 /** |
1739 * Checks if [token] has a balanced number of open and closed curly brackets. | 1723 * Checks if [token] has a balanced number of open and closed curly brackets. |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2136 @override | 2120 @override |
2137 String toString() => name; | 2121 String toString() => name; |
2138 } | 2122 } |
2139 | 2123 |
2140 class _TokenPair { | 2124 class _TokenPair { |
2141 final _TokenDifferenceKind kind; | 2125 final _TokenDifferenceKind kind; |
2142 final Token oldToken; | 2126 final Token oldToken; |
2143 final Token newToken; | 2127 final Token newToken; |
2144 _TokenPair(this.kind, this.oldToken, this.newToken); | 2128 _TokenPair(this.kind, this.oldToken, this.newToken); |
2145 } | 2129 } |
OLD | NEW |