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/dart/ast/ast.dart'; | 10 import 'package:analyzer/dart/ast/ast.dart'; |
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 @override | 674 @override |
675 Object/*=V*/ computeResult/*<V>*/( | 675 Object/*=V*/ computeResult/*<V>*/( |
676 AnalysisTarget target, ResultDescriptor/*<V>*/ descriptor) { | 676 AnalysisTarget target, ResultDescriptor/*<V>*/ descriptor) { |
677 // Make sure we are not trying to invoke the task model in a reentrant | 677 // Make sure we are not trying to invoke the task model in a reentrant |
678 // fashion. | 678 // fashion. |
679 assert(!driver.isTaskRunning); | 679 assert(!driver.isTaskRunning); |
680 CacheEntry entry = getCacheEntry(target); | 680 CacheEntry entry = getCacheEntry(target); |
681 CacheState state = entry.getState(descriptor); | 681 CacheState state = entry.getState(descriptor); |
682 if (state == CacheState.FLUSHED || state == CacheState.INVALID) { | 682 if (state == CacheState.FLUSHED || state == CacheState.INVALID) { |
683 driver.computeResult(target, descriptor); | 683 driver.computeResult(target, descriptor); |
| 684 entry = getCacheEntry(target); |
684 } | 685 } |
685 state = entry.getState(descriptor); | 686 state = entry.getState(descriptor); |
686 if (state == CacheState.ERROR) { | 687 if (state == CacheState.ERROR) { |
687 throw new AnalysisException( | 688 throw new AnalysisException( |
688 'Cannot compute $descriptor for $target', entry.exception); | 689 'Cannot compute $descriptor for $target', entry.exception); |
689 } | 690 } |
690 return entry.getValue(descriptor); | 691 return entry.getValue(descriptor); |
691 } | 692 } |
692 | 693 |
693 /** | 694 /** |
(...skipping 27 matching lines...) Expand all Loading... |
721 } | 722 } |
722 }); | 723 }); |
723 return cache; | 724 return cache; |
724 } | 725 } |
725 | 726 |
726 /** | 727 /** |
727 * Create a minimalistic mock dart:async library | 728 * Create a minimalistic mock dart:async library |
728 * to stand in for a real one if one does not exist | 729 * to stand in for a real one if one does not exist |
729 * facilitating creation a type provider without dart:async. | 730 * facilitating creation a type provider without dart:async. |
730 */ | 731 */ |
731 LibraryElement createMockAsyncLib(LibraryElement coreLibrary, Source asyncSour
ce) { | 732 LibraryElement createMockAsyncLib( |
| 733 LibraryElement coreLibrary, Source asyncSource) { |
732 InterfaceType objType = coreLibrary.getType('Object').type; | 734 InterfaceType objType = coreLibrary.getType('Object').type; |
733 | 735 |
734 ClassElement _classElement(String typeName, [List<String> parameterNames]) { | 736 ClassElement _classElement(String typeName, [List<String> parameterNames]) { |
735 ClassElementImpl element = | 737 ClassElementImpl element = |
736 new ClassElementImpl.forNode(AstFactory.identifier3(typeName)); | 738 new ClassElementImpl.forNode(AstFactory.identifier3(typeName)); |
737 element.supertype = objType; | 739 element.supertype = objType; |
738 if (parameterNames != null) { | 740 if (parameterNames != null) { |
739 int count = parameterNames.length; | 741 int count = parameterNames.length; |
740 if (count > 0) { | 742 if (count > 0) { |
741 List<TypeParameterElementImpl> typeParameters = | 743 List<TypeParameterElementImpl> typeParameters = |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1049 @override | 1051 @override |
1050 bool handleContentsChanged( | 1052 bool handleContentsChanged( |
1051 Source source, String originalContents, String newContents, bool notify) { | 1053 Source source, String originalContents, String newContents, bool notify) { |
1052 CacheEntry entry = _cache.get(source); | 1054 CacheEntry entry = _cache.get(source); |
1053 if (entry == null) { | 1055 if (entry == null) { |
1054 return false; | 1056 return false; |
1055 } | 1057 } |
1056 bool changed = newContents != originalContents; | 1058 bool changed = newContents != originalContents; |
1057 if (newContents != null) { | 1059 if (newContents != null) { |
1058 if (changed) { | 1060 if (changed) { |
| 1061 entry.modificationTime = _contentCache.getModificationStamp(source); |
1059 if (!analysisOptions.incremental || | 1062 if (!analysisOptions.incremental || |
1060 !_tryPoorMansIncrementalResolution(source, newContents)) { | 1063 !_tryPoorMansIncrementalResolution(source, newContents)) { |
1061 // Don't compare with old contents because the cache has already been | 1064 // Don't compare with old contents because the cache has already been |
1062 // updated, and we know at this point that it changed. | 1065 // updated, and we know at this point that it changed. |
1063 _sourceChanged(source, compareWithOld: false); | 1066 _sourceChanged(source, compareWithOld: false); |
1064 } | 1067 } |
1065 entry.modificationTime = _contentCache.getModificationStamp(source); | |
1066 entry.setValue(CONTENT, newContents, TargetedResult.EMPTY_LIST); | 1068 entry.setValue(CONTENT, newContents, TargetedResult.EMPTY_LIST); |
1067 } else { | 1069 } else { |
1068 entry.modificationTime = _contentCache.getModificationStamp(source); | 1070 entry.modificationTime = _contentCache.getModificationStamp(source); |
1069 } | 1071 } |
1070 } else if (originalContents != null) { | 1072 } else if (originalContents != null) { |
1071 // We are removing the overlay for the file, check if the file's | 1073 // We are removing the overlay for the file, check if the file's |
1072 // contents is the same as it was in the overlay. | 1074 // contents is the same as it was in the overlay. |
1073 try { | 1075 try { |
1074 TimestampedData<String> fileContents = getContents(source); | 1076 TimestampedData<String> fileContents = getContents(source); |
1075 newContents = fileContents.data; | 1077 newContents = fileContents.data; |
(...skipping 1145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2221 } | 2223 } |
2222 DartSdk sdk = factory.dartSdk; | 2224 DartSdk sdk = factory.dartSdk; |
2223 if (sdk == null) { | 2225 if (sdk == null) { |
2224 throw new IllegalArgumentException( | 2226 throw new IllegalArgumentException( |
2225 "The source factory for an SDK analysis context must have a DartUriRes
olver"); | 2227 "The source factory for an SDK analysis context must have a DartUriRes
olver"); |
2226 } | 2228 } |
2227 return new AnalysisCache( | 2229 return new AnalysisCache( |
2228 <CachePartition>[AnalysisEngine.instance.partitionManager.forSdk(sdk)]); | 2230 <CachePartition>[AnalysisEngine.instance.partitionManager.forSdk(sdk)]); |
2229 } | 2231 } |
2230 } | 2232 } |
OLD | NEW |