| Index: pkg/analyzer/lib/src/context/context.dart
|
| diff --git a/pkg/analyzer/lib/src/context/context.dart b/pkg/analyzer/lib/src/context/context.dart
|
| index f9a2b9d3679c1591335e68465bdd23b5871778f9..067af95865feaaa461d93f1b06f9043db6d8a5de 100644
|
| --- a/pkg/analyzer/lib/src/context/context.dart
|
| +++ b/pkg/analyzer/lib/src/context/context.dart
|
| @@ -35,6 +35,7 @@ import 'package:analyzer/src/task/dart_work_manager.dart';
|
| import 'package:analyzer/src/task/driver.dart';
|
| import 'package:analyzer/src/task/html.dart';
|
| import 'package:analyzer/src/task/html_work_manager.dart';
|
| +import 'package:analyzer/src/task/incremental_element_builder.dart';
|
| import 'package:analyzer/src/task/manager.dart';
|
| import 'package:analyzer/task/dart.dart';
|
| import 'package:analyzer/task/general.dart';
|
| @@ -1720,7 +1721,31 @@ class AnalysisContextImpl implements InternalAnalysisContext {
|
| } catch (e) {}
|
| }
|
| // We need to invalidate the cache.
|
| - entry.setState(CONTENT, CacheState.INVALID);
|
| + {
|
| + Object delta = null;
|
| + if (AnalysisEngine.instance.limitInvalidationInTaskModel &&
|
| + AnalysisEngine.isDartFileName(source.fullName)) {
|
| + // TODO(scheglov) Incorrect implementation in general.
|
| + entry.setState(TOKEN_STREAM, CacheState.FLUSHED);
|
| + entry.setState(SCAN_ERRORS, CacheState.FLUSHED);
|
| + entry.setState(PARSED_UNIT, CacheState.FLUSHED);
|
| + entry.setState(PARSE_ERRORS, CacheState.FLUSHED);
|
| + CompilationUnit oldUnit = getResolvedCompilationUnit2(source, source);
|
| + if (oldUnit != null) {
|
| + CompilationUnit newUnit = parseCompilationUnit(source);
|
| + IncrementalCompilationUnitElementBuilder builder =
|
| + new IncrementalCompilationUnitElementBuilder(oldUnit, newUnit);
|
| + builder.build();
|
| + CompilationUnitElementDelta unitDelta = builder.unitDelta;
|
| + DartDelta dartDelta = new DartDelta(source);
|
| + dartDelta.hasDirectiveChange = unitDelta.hasDirectiveChange;
|
| + unitDelta.addedDeclarations.forEach(dartDelta.elementAdded);
|
| + unitDelta.removedDeclarations.forEach(dartDelta.elementRemoved);
|
| + delta = dartDelta;
|
| + }
|
| + }
|
| + entry.setState(CONTENT, CacheState.INVALID, delta: delta);
|
| + }
|
| dartWorkManager.applyChange(
|
| Source.EMPTY_LIST, <Source>[source], Source.EMPTY_LIST);
|
| htmlWorkManager.applyChange(
|
| @@ -1770,6 +1795,9 @@ class AnalysisContextImpl implements InternalAnalysisContext {
|
| * TODO(scheglov) A hackish, limited incremental resolution implementation.
|
| */
|
| bool _tryPoorMansIncrementalResolution(Source unitSource, String newCode) {
|
| + if (AnalysisEngine.instance.limitInvalidationInTaskModel) {
|
| + return false;
|
| + }
|
| return PerformanceStatistics.incrementalAnalysis.makeCurrentWhile(() {
|
| incrementalResolutionValidation_lastUnitSource = null;
|
| incrementalResolutionValidation_lastLibrarySource = null;
|
|
|