| 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.cache; | 5 library analyzer.src.context.cache; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 | 9 |
| 10 import 'package:analyzer/src/generated/engine.dart' | 10 import 'package:analyzer/src/generated/engine.dart' |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 ResultData data = getResultData(descriptor); | 486 ResultData data = getResultData(descriptor); |
| 487 _setDependedOnResults(data, thisResult, dependedOn); | 487 _setDependedOnResults(data, thisResult, dependedOn); |
| 488 data.state = CacheState.VALID; | 488 data.state = CacheState.VALID; |
| 489 data.value = value == null ? descriptor.defaultValue : value; | 489 data.value = value == null ? descriptor.defaultValue : value; |
| 490 } | 490 } |
| 491 | 491 |
| 492 /** | 492 /** |
| 493 * Set the value of the result represented by the given [descriptor] to the | 493 * Set the value of the result represented by the given [descriptor] to the |
| 494 * given [value], keep its dependency, invalidate all the dependent result. | 494 * given [value], keep its dependency, invalidate all the dependent result. |
| 495 */ | 495 */ |
| 496 void setValueIncremental(ResultDescriptor descriptor, dynamic value) { | 496 void setValueIncremental( |
| 497 ResultDescriptor descriptor, dynamic value, bool invalidateDependent) { |
| 497 ResultData data = getResultData(descriptor); | 498 ResultData data = getResultData(descriptor); |
| 498 _invalidateDependentResults(null, data, null, 0); | |
| 499 data.state = CacheState.VALID; | 499 data.state = CacheState.VALID; |
| 500 data.value = value; | 500 data.value = value; |
| 501 if (invalidateDependent) { |
| 502 _invalidateDependentResults(null, data, null, 0); |
| 503 } |
| 501 } | 504 } |
| 502 | 505 |
| 503 @override | 506 @override |
| 504 String toString() { | 507 String toString() { |
| 505 StringBuffer buffer = new StringBuffer(); | 508 StringBuffer buffer = new StringBuffer(); |
| 506 _writeOn(buffer); | 509 _writeOn(buffer); |
| 507 return buffer.toString(); | 510 return buffer.toString(); |
| 508 } | 511 } |
| 509 | 512 |
| 510 /** | 513 /** |
| (...skipping 19 matching lines...) Expand all Loading... |
| 530 thisData.invalidateId = id; | 533 thisData.invalidateId = id; |
| 531 } | 534 } |
| 532 // Ask the delta to validate. | 535 // Ask the delta to validate. |
| 533 DeltaResult deltaResult = null; | 536 DeltaResult deltaResult = null; |
| 534 if (delta != null) { | 537 if (delta != null) { |
| 535 deltaResult = delta.validate(_partition.context, target, descriptor); | 538 deltaResult = delta.validate(_partition.context, target, descriptor); |
| 536 if (deltaResult == DeltaResult.STOP) { | 539 if (deltaResult == DeltaResult.STOP) { |
| 537 return; | 540 return; |
| 538 } | 541 } |
| 539 } | 542 } |
| 540 if (deltaResult == null || deltaResult == DeltaResult.INVALIDATE) { | 543 if (deltaResult == DeltaResult.INVALIDATE_NO_DELTA) { |
| 544 delta = null; |
| 545 } |
| 546 if (deltaResult == null || |
| 547 deltaResult == DeltaResult.INVALIDATE || |
| 548 deltaResult == DeltaResult.INVALIDATE_NO_DELTA) { |
| 541 _resultMap.remove(descriptor); | 549 _resultMap.remove(descriptor); |
| 542 // { | 550 // { |
| 543 // String indent = ' ' * level; | 551 // String indent = ' ' * level; |
| 544 // print('[$id]$indent invalidate $descriptor for $target'); | 552 // print('[$id]$indent invalidate $descriptor for $target'); |
| 545 // } | 553 // } |
| 546 } | 554 } |
| 547 // Stop depending on other results. | 555 // Stop depending on other results. |
| 548 TargetedResult thisResult = new TargetedResult(target, descriptor); | 556 TargetedResult thisResult = new TargetedResult(target, descriptor); |
| 549 for (TargetedResult dependedOnResult in thisData.dependedOnResults) { | 557 for (TargetedResult dependedOnResult in thisData.dependedOnResults) { |
| 550 ResultData data = _partition._getDataFor(dependedOnResult); | 558 ResultData data = _partition._getDataFor(dependedOnResult); |
| (...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1028 */ | 1036 */ |
| 1029 DeltaResult validate(InternalAnalysisContext context, AnalysisTarget target, | 1037 DeltaResult validate(InternalAnalysisContext context, AnalysisTarget target, |
| 1030 ResultDescriptor descriptor) { | 1038 ResultDescriptor descriptor) { |
| 1031 return DeltaResult.INVALIDATE; | 1039 return DeltaResult.INVALIDATE; |
| 1032 } | 1040 } |
| 1033 } | 1041 } |
| 1034 | 1042 |
| 1035 /** | 1043 /** |
| 1036 * The possible results of validating analysis results againt a [Delta]. | 1044 * The possible results of validating analysis results againt a [Delta]. |
| 1037 */ | 1045 */ |
| 1038 enum DeltaResult { INVALIDATE, KEEP_CONTINUE, STOP } | 1046 enum DeltaResult { |
| 1047 /** |
| 1048 * Invalidate this result and continue visiting dependent results |
| 1049 * with this [Delta]. |
| 1050 */ |
| 1051 INVALIDATE, |
| 1052 |
| 1053 /** |
| 1054 * Invalidate this result and stop using this [Delta], so unconditionally |
| 1055 * invalidate all the dependent results. |
| 1056 */ |
| 1057 INVALIDATE_NO_DELTA, |
| 1058 |
| 1059 /** |
| 1060 * Keep this result and continue validating dependent results |
| 1061 * with this [Delta]. |
| 1062 */ |
| 1063 KEEP_CONTINUE, |
| 1064 |
| 1065 /** |
| 1066 * Keep this result and stop visiting results that depend on this one. |
| 1067 */ |
| 1068 STOP |
| 1069 } |
| 1039 | 1070 |
| 1040 /** | 1071 /** |
| 1041 * [InvalidatedResult] describes an invalidated result. | 1072 * [InvalidatedResult] describes an invalidated result. |
| 1042 */ | 1073 */ |
| 1043 class InvalidatedResult { | 1074 class InvalidatedResult { |
| 1044 /** | 1075 /** |
| 1045 * The target in which the result was invalidated. | 1076 * The target in which the result was invalidated. |
| 1046 */ | 1077 */ |
| 1047 final CacheEntry entry; | 1078 final CacheEntry entry; |
| 1048 | 1079 |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1194 void resultAccessed(TargetedResult result) {} | 1225 void resultAccessed(TargetedResult result) {} |
| 1195 | 1226 |
| 1196 @override | 1227 @override |
| 1197 List<TargetedResult> resultStored(TargetedResult newResult, newValue) { | 1228 List<TargetedResult> resultStored(TargetedResult newResult, newValue) { |
| 1198 return TargetedResult.EMPTY_LIST; | 1229 return TargetedResult.EMPTY_LIST; |
| 1199 } | 1230 } |
| 1200 | 1231 |
| 1201 @override | 1232 @override |
| 1202 void targetRemoved(AnalysisTarget target) {} | 1233 void targetRemoved(AnalysisTarget target) {} |
| 1203 } | 1234 } |
| OLD | NEW |