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

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

Issue 1130263002: Some clean ups for cache partitions. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | pkg/analyzer/test/src/context/cache_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.cache; 5 library analyzer.src.context.cache;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import 'package:analyzer/src/generated/engine.dart' 9 import 'package:analyzer/src/generated/engine.dart'
10 show AnalysisEngine, CacheState, InternalAnalysisContext, RetentionPriority; 10 show AnalysisEngine, CacheState, InternalAnalysisContext, RetentionPriority;
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 // } 58 // }
59 // return data; 59 // return data;
60 // } 60 // }
61 61
62 /** 62 /**
63 * Return the entry associated with the given [target]. 63 * Return the entry associated with the given [target].
64 */ 64 */
65 CacheEntry get(AnalysisTarget target) { 65 CacheEntry get(AnalysisTarget target) {
66 int count = _partitions.length; 66 int count = _partitions.length;
67 for (int i = 0; i < count; i++) { 67 for (int i = 0; i < count; i++) {
68 if (_partitions[i].contains(target)) { 68 CachePartition partition = _partitions[i];
69 return _partitions[i].get(target); 69 if (partition.isResponsibleFor(target)) {
70 return partition.get(target);
70 } 71 }
71 } 72 }
72 // 73 //
73 // We should never get to this point because the last partition should 74 // We should never get to this point because the last partition should
74 // always be a universal partition, except in the case of the SDK context, 75 // always be a universal partition, except in the case of the SDK context,
75 // in which case the target should always be part of the SDK. 76 // in which case the target should always be part of the SDK.
76 // 77 //
77 return null; 78 return null;
78 } 79 }
79 80
80 /** 81 /**
81 * Return the context to which the given [target] was explicitly added. 82 * Return the context to which the given [target] was explicitly added.
82 */ 83 */
83 InternalAnalysisContext getContextFor(AnalysisTarget target) { 84 InternalAnalysisContext getContextFor(AnalysisTarget target) {
84 int count = _partitions.length; 85 int count = _partitions.length;
85 for (int i = 0; i < count; i++) { 86 for (int i = 0; i < count; i++) {
86 if (_partitions[i].contains(target)) { 87 CachePartition partition = _partitions[i];
87 return _partitions[i].context; 88 if (partition.isResponsibleFor(target)) {
89 return partition.context;
88 } 90 }
89 } 91 }
90 // 92 //
91 // We should never get to this point because the last partition should 93 // We should never get to this point because the last partition should
92 // always be a universal partition, except in the case of the SDK context, 94 // always be a universal partition, except in the case of the SDK context,
93 // in which case the target should always be part of the SDK. 95 // in which case the target should always be part of the SDK.
94 // 96 //
95 // TODO(brianwilkerson) Throw an exception here. 97 // TODO(brianwilkerson) Throw an exception here.
96 AnalysisEngine.instance.logger.logInformation( 98 AnalysisEngine.instance.logger.logInformation(
97 'Could not find context for $target', 99 'Could not find context for $target',
(...skipping 14 matching lines...) Expand all
112 return new MultipleMapIterator<AnalysisTarget, CacheEntry>(maps); 114 return new MultipleMapIterator<AnalysisTarget, CacheEntry>(maps);
113 } 115 }
114 116
115 /** 117 /**
116 * Associate the given [entry] with the given [target]. 118 * Associate the given [entry] with the given [target].
117 */ 119 */
118 void put(AnalysisTarget target, CacheEntry entry) { 120 void put(AnalysisTarget target, CacheEntry entry) {
119 entry.fixExceptionState(); 121 entry.fixExceptionState();
120 int count = _partitions.length; 122 int count = _partitions.length;
121 for (int i = 0; i < count; i++) { 123 for (int i = 0; i < count; i++) {
122 if (_partitions[i].contains(target)) { 124 CachePartition partition = _partitions[i];
125 if (partition.isResponsibleFor(target)) {
123 if (_TRACE_CHANGES) { 126 if (_TRACE_CHANGES) {
124 CacheEntry oldEntry = _partitions[i].get(target); 127 CacheEntry oldEntry = partition.get(target);
125 if (oldEntry == null) { 128 if (oldEntry == null) {
126 AnalysisEngine.instance.logger 129 AnalysisEngine.instance.logger
127 .logInformation('Added a cache entry for $target.'); 130 .logInformation('Added a cache entry for $target.');
128 } else { 131 } else {
129 AnalysisEngine.instance.logger 132 AnalysisEngine.instance.logger
130 .logInformation('Modified the cache entry for $target.'); 133 .logInformation('Modified the cache entry for $target.');
131 // 'Diff = ${entry.getDiff(oldEntry)}'); 134 // 'Diff = ${entry.getDiff(oldEntry)}');
132 } 135 }
133 } 136 }
134 _partitions[i].put(target, entry); 137 partition.put(target, entry);
135 return; 138 return;
136 } 139 }
137 } 140 }
138 // TODO(brianwilkerson) Handle the case where no partition was found, 141 // TODO(brianwilkerson) Handle the case where no partition was found,
139 // possibly by throwing an exception. 142 // possibly by throwing an exception.
140 } 143 }
141 144
142 /** 145 /**
143 * Remove all information related to the given [target] from this cache. 146 * Remove all information related to the given [target] from this cache.
144 */ 147 */
145 void remove(AnalysisTarget target) { 148 void remove(AnalysisTarget target) {
146 int count = _partitions.length; 149 int count = _partitions.length;
147 for (int i = 0; i < count; i++) { 150 for (int i = 0; i < count; i++) {
148 if (_partitions[i].contains(target)) { 151 CachePartition partition = _partitions[i];
152 if (partition.isResponsibleFor(target)) {
149 if (_TRACE_CHANGES) { 153 if (_TRACE_CHANGES) {
150 AnalysisEngine.instance.logger 154 AnalysisEngine.instance.logger
151 .logInformation('Removed the cache entry for $target.'); 155 .logInformation('Removed the cache entry for $target.');
152 } 156 }
153 _partitions[i].remove(target); 157 partition.remove(target);
154 return; 158 return;
155 } 159 }
156 } 160 }
157 } 161 }
158 162
159 /** 163 /**
160 * Return the number of targets that are mapped to cache entries. 164 * Return the number of targets that are mapped to cache entries.
161 */ 165 */
162 int size() { 166 int size() {
163 int size = 0; 167 int size = 0;
164 int count = _partitions.length; 168 int count = _partitions.length;
165 for (int i = 0; i < count; i++) { 169 for (int i = 0; i < count; i++) {
166 size += _partitions[i].size(); 170 size += _partitions[i].size();
167 } 171 }
168 return size; 172 return size;
169 } 173 }
170 174
171 ResultData _getDataFor(TargetedResult result) { 175 ResultData _getDataFor(TargetedResult result) {
172 AnalysisTarget target = result.target; 176 CacheEntry entry = get(result.target);
173 int count = _partitions.length; 177 if (entry != null) {
174 for (int i = 0; i < count; i++) { 178 return entry._getResultData(result.result);
175 if (_partitions[i].contains(target)) {
176 CacheEntry entry = _partitions[i].get(target);
177 return entry._getResultData(result.result);
178 }
179 } 179 }
180 return null; 180 return null;
181 } 181 }
182 } 182 }
183 183
184 /** 184 /**
185 * The information cached by an analysis context about an individual target. 185 * The information cached by an analysis context about an individual target.
186 */ 186 */
187 class CacheEntry { 187 class CacheEntry {
188 /** 188 /**
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 /** 668 /**
669 * Return a table mapping the targets known to the context to the information 669 * Return a table mapping the targets known to the context to the information
670 * known about the target. 670 * known about the target.
671 * 671 *
672 * <b>Note:</b> This method is only visible for use by [AnalysisCache] and 672 * <b>Note:</b> This method is only visible for use by [AnalysisCache] and
673 * should not be used for any other purpose. 673 * should not be used for any other purpose.
674 */ 674 */
675 Map<AnalysisTarget, CacheEntry> get map => _targetMap; 675 Map<AnalysisTarget, CacheEntry> get map => _targetMap;
676 676
677 /** 677 /**
678 * Return `true` if the given [target] is contained in this partition. 678 * Return `true` if this partition is responsible for the given [target].
679 */ 679 */
680 // TODO(brianwilkerson) Rename this to something more meaningful, such as 680 bool isResponsibleFor(AnalysisTarget target);
Brian Wilkerson 2015/05/07 20:03:07 Thanks!
681 // isResponsibleFor.
682 bool contains(AnalysisTarget target);
683 681
684 /** 682 /**
685 * Return the entry associated with the given [target]. 683 * Return the entry associated with the given [target].
686 */ 684 */
687 CacheEntry get(AnalysisTarget target) => _targetMap[target]; 685 CacheEntry get(AnalysisTarget target) => _targetMap[target];
688 686
689 /** 687 /**
690 * Return an iterator returning all of the map entries mapping targets to 688 * Return an iterator returning all of the map entries mapping targets to
691 * cache entries. 689 * cache entries.
692 */ 690 */
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 * A cache partition that contains all of the targets in the SDK. 822 * A cache partition that contains all of the targets in the SDK.
825 */ 823 */
826 class SdkCachePartition extends CachePartition { 824 class SdkCachePartition extends CachePartition {
827 /** 825 /**
828 * Initialize a newly created cache partition, belonging to the given 826 * Initialize a newly created cache partition, belonging to the given
829 * [context]. 827 * [context].
830 */ 828 */
831 SdkCachePartition(InternalAnalysisContext context) : super(context); 829 SdkCachePartition(InternalAnalysisContext context) : super(context);
832 830
833 @override 831 @override
834 bool contains(AnalysisTarget target) { 832 bool isResponsibleFor(AnalysisTarget target) {
835 if (target is AnalysisContextTarget) { 833 if (target is AnalysisContextTarget) {
836 return true; 834 return true;
837 } 835 }
838 Source source = target.source; 836 Source source = target.source;
839 return source != null && source.isInSystemLibrary; 837 return source != null && source.isInSystemLibrary;
840 } 838 }
841 } 839 }
842 840
843 /** 841 /**
844 * A specification of a specific result computed for a specific target. 842 * A specification of a specific result computed for a specific target.
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 * A cache partition that contains all targets not contained in other partitions . 882 * A cache partition that contains all targets not contained in other partitions .
885 */ 883 */
886 class UniversalCachePartition extends CachePartition { 884 class UniversalCachePartition extends CachePartition {
887 /** 885 /**
888 * Initialize a newly created cache partition, belonging to the given 886 * Initialize a newly created cache partition, belonging to the given
889 * [context]. 887 * [context].
890 */ 888 */
891 UniversalCachePartition(InternalAnalysisContext context) : super(context); 889 UniversalCachePartition(InternalAnalysisContext context) : super(context);
892 890
893 @override 891 @override
894 bool contains(AnalysisTarget target) => true; 892 bool isResponsibleFor(AnalysisTarget target) => true;
895 } 893 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/test/src/context/cache_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698