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

Side by Side Diff: pkg/analyzer/lib/src/generated/engine.dart

Issue 1195183002: Move cache consistency validation into Analysis Server. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 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) 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 // This code was auto-generated, is not intended to be edited, and is subject to 5 // This code was auto-generated, is not intended to be edited, and is subject to
6 // significant change. Please see the README file for more information. 6 // significant change. Please see the README file for more information.
7 7
8 library engine; 8 library engine;
9 9
10 import 'dart:async'; 10 import 'dart:async';
(...skipping 1194 matching lines...) Expand 10 before | Expand all | Expand 10 after
1205 // DartEntry dartEntry = (DartEntry) sourceEntry; 1205 // DartEntry dartEntry = (DartEntry) sourceEntry;
1206 // if (dartEntry.getValue(DartEntry.IS_LAUNCHABLE) && dartEntry.getValu e(DartEntry.IS_CLIENT)) { 1206 // if (dartEntry.getValue(DartEntry.IS_LAUNCHABLE) && dartEntry.getValu e(DartEntry.IS_CLIENT)) {
1207 sources.add(source); 1207 sources.add(source);
1208 // } 1208 // }
1209 } 1209 }
1210 } 1210 }
1211 return sources; 1211 return sources;
1212 } 1212 }
1213 1213
1214 @override 1214 @override
1215 bool validateSourceCacheConsistency(Source source) {
1216 SourceEntry entry = _cache.get(source);
1217 if (entry != null) {
1218 int sourceTime = getModificationStamp(source);
1219 if (sourceTime != entry.modificationTime) {
1220 _sourceChanged(source);
1221 return true;
1222 }
1223 if (entry.exception != null) {
1224 if (!exists(source)) {
1225 if (getLibrariesContaining(source).isEmpty &&
1226 getLibrariesDependingOn(source).isEmpty) {
1227 _cache.remove(source);
1228 }
1229 }
1230 }
1231 }
1232 return false;
1233 }
1234
1235 @override
1215 List<Source> get launchableServerLibrarySources { 1236 List<Source> get launchableServerLibrarySources {
1216 // TODO(brianwilkerson) This needs to filter out libraries that reference 1237 // TODO(brianwilkerson) This needs to filter out libraries that reference
1217 // dart:html, either directly or indirectly. 1238 // dart:html, either directly or indirectly.
1218 List<Source> sources = new List<Source>(); 1239 List<Source> sources = new List<Source>();
1219 MapIterator<Source, SourceEntry> iterator = _cache.iterator(); 1240 MapIterator<Source, SourceEntry> iterator = _cache.iterator();
1220 while (iterator.moveNext()) { 1241 while (iterator.moveNext()) {
1221 Source source = iterator.key; 1242 Source source = iterator.key;
1222 SourceEntry sourceEntry = iterator.value; 1243 SourceEntry sourceEntry = iterator.value;
1223 if (sourceEntry.kind == SourceKind.LIBRARY && !source.isInSystemLibrary) { 1244 if (sourceEntry.kind == SourceKind.LIBRARY && !source.isInSystemLibrary) {
1224 // DartEntry dartEntry = (DartEntry) sourceEntry; 1245 // DartEntry dartEntry = (DartEntry) sourceEntry;
(...skipping 1037 matching lines...) Expand 10 before | Expand all | Expand 10 after
2262 @override 2283 @override
2263 AnalysisResult performAnalysisTask() { 2284 AnalysisResult performAnalysisTask() {
2264 if (_TRACE_PERFORM_TASK) { 2285 if (_TRACE_PERFORM_TASK) {
2265 print("----------------------------------------"); 2286 print("----------------------------------------");
2266 } 2287 }
2267 return PerformanceStatistics.performAnaysis.makeCurrentWhile(() { 2288 return PerformanceStatistics.performAnaysis.makeCurrentWhile(() {
2268 int getStart = JavaSystem.currentTimeMillis(); 2289 int getStart = JavaSystem.currentTimeMillis();
2269 AnalysisTask task = PerformanceStatistics.nextTask 2290 AnalysisTask task = PerformanceStatistics.nextTask
2270 .makeCurrentWhile(() => nextAnalysisTask); 2291 .makeCurrentWhile(() => nextAnalysisTask);
2271 int getEnd = JavaSystem.currentTimeMillis(); 2292 int getEnd = JavaSystem.currentTimeMillis();
2272 if (task == null && _validateCacheConsistency()) {
2273 task = nextAnalysisTask;
2274 }
2275 if (task == null) { 2293 if (task == null) {
2276 _validateLastIncrementalResolutionResult(); 2294 _validateLastIncrementalResolutionResult();
2277 if (_performAnalysisTaskStopwatch != null) { 2295 if (_performAnalysisTaskStopwatch != null) {
2278 AnalysisEngine.instance.instrumentationService.logPerformance( 2296 AnalysisEngine.instance.instrumentationService.logPerformance(
2279 AnalysisPerformanceKind.FULL, _performAnalysisTaskStopwatch, 2297 AnalysisPerformanceKind.FULL, _performAnalysisTaskStopwatch,
2280 'context_id=$_id'); 2298 'context_id=$_id');
2281 _performAnalysisTaskStopwatch = null; 2299 _performAnalysisTaskStopwatch = null;
2282 } 2300 }
2283 return new AnalysisResult( 2301 return new AnalysisResult(
2284 _getChangeNotices(true), getEnd - getStart, null, -1); 2302 _getChangeNotices(true), getEnd - getStart, null, -1);
(...skipping 1734 matching lines...) Expand 10 before | Expand all | Expand 10 after
4019 return true; 4037 return true;
4020 } 4038 }
4021 } 4039 }
4022 return false; 4040 return false;
4023 } 4041 }
4024 4042
4025 bool _isTooBigHtmlSourceEntry(Source source, SourceEntry sourceEntry) => 4043 bool _isTooBigHtmlSourceEntry(Source source, SourceEntry sourceEntry) =>
4026 false; 4044 false;
4027 4045
4028 /** 4046 /**
4029 * Log the given debugging [message].
4030 */
4031 void _logInformation(String message) {
4032 AnalysisEngine.instance.logger.logInformation(message);
4033 }
4034
4035 /**
4036 * Notify all of the analysis listeners that a task is about to be performed. 4047 * Notify all of the analysis listeners that a task is about to be performed.
4037 */ 4048 */
4038 void _notifyAboutToPerformTask(String taskDescription) { 4049 void _notifyAboutToPerformTask(String taskDescription) {
4039 int count = _listeners.length; 4050 int count = _listeners.length;
4040 for (int i = 0; i < count; i++) { 4051 for (int i = 0; i < count; i++) {
4041 _listeners[i].aboutToPerformTask(this, taskDescription); 4052 _listeners[i].aboutToPerformTask(this, taskDescription);
4042 } 4053 }
4043 } 4054 }
4044 4055
4045 // /** 4056 // /**
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after
4724 LineInfo lineInfo = getLineInfo(unitSource); 4735 LineInfo lineInfo = getLineInfo(unitSource);
4725 ChangeNoticeImpl notice = getNotice(unitSource); 4736 ChangeNoticeImpl notice = getNotice(unitSource);
4726 notice.resolvedDartUnit = oldUnit; 4737 notice.resolvedDartUnit = oldUnit;
4727 notice.setErrors(dartEntry.allErrors, lineInfo); 4738 notice.setErrors(dartEntry.allErrors, lineInfo);
4728 } 4739 }
4729 // OK 4740 // OK
4730 return true; 4741 return true;
4731 }); 4742 });
4732 } 4743 }
4733 4744
4734 /**
4735 * Check the cache for any invalid entries (entries whose modification time
4736 * does not match the modification time of the source associated with the
4737 * entry). Invalid entries will be marked as invalid so that the source will
4738 * be re-analyzed. Return `true` if at least one entry was invalid.
4739 */
4740 bool _validateCacheConsistency() {
4741 int consistencyCheckStart = JavaSystem.nanoTime();
4742 List<Source> changedSources = new List<Source>();
4743 List<Source> missingSources = new List<Source>();
4744 MapIterator<Source, SourceEntry> iterator = _cache.iterator();
4745 while (iterator.moveNext()) {
4746 Source source = iterator.key;
4747 SourceEntry sourceEntry = iterator.value;
4748 int sourceTime = getModificationStamp(source);
4749 if (sourceTime != sourceEntry.modificationTime) {
4750 changedSources.add(source);
4751 }
4752 if (sourceEntry.exception != null) {
4753 if (!exists(source)) {
4754 missingSources.add(source);
4755 }
4756 }
4757 }
4758 int count = changedSources.length;
4759 for (int i = 0; i < count; i++) {
4760 _sourceChanged(changedSources[i]);
4761 }
4762 int removalCount = 0;
4763 for (Source source in missingSources) {
4764 if (getLibrariesContaining(source).isEmpty &&
4765 getLibrariesDependingOn(source).isEmpty) {
4766 _cache.remove(source);
4767 removalCount++;
4768 }
4769 }
4770 int consistencyCheckEnd = JavaSystem.nanoTime();
4771 if (changedSources.length > 0 || missingSources.length > 0) {
4772 StringBuffer buffer = new StringBuffer();
4773 buffer.write("Consistency check took ");
4774 buffer.write((consistencyCheckEnd - consistencyCheckStart) / 1000000.0);
4775 buffer.writeln(" ms and found");
4776 buffer.write(" ");
4777 buffer.write(changedSources.length);
4778 buffer.writeln(" inconsistent entries");
4779 buffer.write(" ");
4780 buffer.write(missingSources.length);
4781 buffer.write(" missing sources (");
4782 buffer.write(removalCount);
4783 buffer.writeln(" removed");
4784 for (Source source in missingSources) {
4785 buffer.write(" ");
4786 buffer.writeln(source.fullName);
4787 }
4788 _logInformation(buffer.toString());
4789 }
4790 return changedSources.length > 0;
4791 }
4792
4793 void _validateLastIncrementalResolutionResult() { 4745 void _validateLastIncrementalResolutionResult() {
4794 if (incrementalResolutionValidation_lastUnitSource == null || 4746 if (incrementalResolutionValidation_lastUnitSource == null ||
4795 incrementalResolutionValidation_lastLibrarySource == null || 4747 incrementalResolutionValidation_lastLibrarySource == null ||
4796 incrementalResolutionValidation_lastUnit == null) { 4748 incrementalResolutionValidation_lastUnit == null) {
4797 return; 4749 return;
4798 } 4750 }
4799 CompilationUnit fullUnit = getResolvedCompilationUnit2( 4751 CompilationUnit fullUnit = getResolvedCompilationUnit2(
4800 incrementalResolutionValidation_lastUnitSource, 4752 incrementalResolutionValidation_lastUnitSource,
4801 incrementalResolutionValidation_lastLibrarySource); 4753 incrementalResolutionValidation_lastLibrarySource);
4802 if (fullUnit != null) { 4754 if (fullUnit != null) {
(...skipping 4382 matching lines...) Expand 10 before | Expand all | Expand 10 after
9185 * Returns a statistics about this context. 9137 * Returns a statistics about this context.
9186 */ 9138 */
9187 AnalysisContextStatistics get statistics; 9139 AnalysisContextStatistics get statistics;
9188 9140
9189 /** 9141 /**
9190 * Sets the [TypeProvider] for this context. 9142 * Sets the [TypeProvider] for this context.
9191 */ 9143 */
9192 void set typeProvider(TypeProvider typeProvider); 9144 void set typeProvider(TypeProvider typeProvider);
9193 9145
9194 /** 9146 /**
9147 * Check whether the cache entry for the given [source] is valid, i.e. the
9148 * entry modification time matches the modification time of the [source].
9149 * If not, the entry is marked as invalid so that the source will be
9150 * re-analyzed, and `true` is returned.
9151 */
9152 bool validateSourceCacheConsistency(Source source);
9153
9154 /**
9195 * A factory to override how [TypeResolverVisitor] is created. 9155 * A factory to override how [TypeResolverVisitor] is created.
9196 */ 9156 */
9197 TypeResolverVisitorFactory get typeResolverVisitorFactory; 9157 TypeResolverVisitorFactory get typeResolverVisitorFactory;
9198 9158
9199 /** 9159 /**
9200 * Return a list containing the sources of the libraries that are exported by 9160 * Return a list containing the sources of the libraries that are exported by
9201 * the library with the given [source]. The list will be empty if the given 9161 * the library with the given [source]. The list will be empty if the given
9202 * source is invalid, if the given source does not represent a library, or if 9162 * source is invalid, if the given source does not represent a library, or if
9203 * the library does not export any other libraries. 9163 * the library does not export any other libraries.
9204 * 9164 *
(...skipping 2615 matching lines...) Expand 10 before | Expand all | Expand 10 after
11820 PendingFuture pendingFuture = 11780 PendingFuture pendingFuture =
11821 new PendingFuture<T>(_context, source, computeValue); 11781 new PendingFuture<T>(_context, source, computeValue);
11822 if (!pendingFuture.evaluate(sourceEntry)) { 11782 if (!pendingFuture.evaluate(sourceEntry)) {
11823 _context._pendingFutureSources 11783 _context._pendingFutureSources
11824 .putIfAbsent(source, () => <PendingFuture>[]) 11784 .putIfAbsent(source, () => <PendingFuture>[])
11825 .add(pendingFuture); 11785 .add(pendingFuture);
11826 } 11786 }
11827 return pendingFuture.future; 11787 return pendingFuture.future;
11828 } 11788 }
11829 } 11789 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698