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

Unified Diff: pkg/analyzer/lib/src/task/dart.dart

Issue 1218503003: Don't remove ResultData(s) for incrementally updated results. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Disable 'limitInvalidationInTaskModel' 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analyzer/lib/src/task/dart.dart
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index 62fed3be1866d76cfc386fb077736ee9e2474424..04baefa1a3c857ec68765cb33837a7fc6fd5cd0e 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -1923,12 +1923,35 @@ class DartDelta extends Delta {
invalidatedSources.add(source);
}
+ void elementAdded(Element element) {
+ addedNames.add(element.name);
+ }
+
+ void elementChanged(Element element) {
+ changedNames.add(element.name);
+ }
+
+ void elementRemoved(Element element) {
+ removedNames.add(element.name);
+ }
+
+ bool isNameAffected(String name) {
+ return addedNames.contains(name) ||
+ changedNames.contains(name) ||
+ removedNames.contains(name);
+ }
+
+ bool nameChanged(String name) {
+ return changedNames.add(name);
+ }
+
@override
- bool affects(InternalAnalysisContext context, AnalysisTarget target,
+ DeltaResult validate(InternalAnalysisContext context, AnalysisTarget target,
ResultDescriptor descriptor) {
if (hasDirectiveChange) {
- return true;
+ return DeltaResult.INVALIDATE;
}
+ // Prepare target source.
Source targetSource = null;
if (target is Source) {
targetSource = target;
@@ -1939,9 +1962,25 @@ class DartDelta extends Delta {
if (target is Element) {
targetSource = target.source;
}
+ // Keep results that are updated incrementally.
+ // If we want to analyze only some references to the source being changed,
+ // we need to keep the same instances of CompilationUnitElement and
+ // LibraryElement.
if (targetSource == source) {
- return true;
+ if (ParseDartTask.DESCRIPTOR.results.contains(descriptor)) {
+ return DeltaResult.KEEP_CONTINUE;
+ }
+ if (BuildCompilationUnitElementTask.DESCRIPTOR.results
+ .contains(descriptor)) {
+ return DeltaResult.KEEP_CONTINUE;
+ }
+ if (BuildLibraryElementTask.DESCRIPTOR.results.contains(descriptor)) {
+ return DeltaResult.KEEP_CONTINUE;
+ }
+ return DeltaResult.INVALIDATE;
}
+ // Use the target library dependency information to decide whether
+ // the delta affects the library.
if (targetSource != null) {
List<Source> librarySources =
context.getLibrariesContaining(targetSource);
@@ -1950,38 +1989,17 @@ class DartDelta extends Delta {
ReferencedNames referencedNames =
cache.getValue(librarySource, REFERENCED_NAMES);
if (referencedNames == null) {
- return true;
+ return DeltaResult.INVALIDATE;
}
referencedNames.addChangedElements(this);
if (referencedNames.isAffectedBy(this)) {
- return true;
+ return DeltaResult.INVALIDATE;
}
}
- return false;
+ return DeltaResult.STOP;
}
- return true;
- }
-
- void elementAdded(Element element) {
- addedNames.add(element.name);
- }
-
- void elementChanged(Element element) {
- changedNames.add(element.name);
- }
-
- void elementRemoved(Element element) {
- removedNames.add(element.name);
- }
-
- bool isNameAffected(String name) {
- return addedNames.contains(name) ||
- changedNames.contains(name) ||
- removedNames.contains(name);
- }
-
- bool nameChanged(String name) {
- return changedNames.add(name);
+ // We don't know what to do with the given target, invalidate it.
+ return DeltaResult.INVALIDATE;
}
}

Powered by Google App Engine
This is Rietveld 408576698