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

Unified Diff: pkg/analyzer/test/src/context/context_test.dart

Issue 2099053002: Keep more analysis results that don't change when a source is changed. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 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
« pkg/analyzer/lib/src/task/dart.dart ('K') | « pkg/analyzer/lib/src/task/dart.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/test/src/context/context_test.dart
diff --git a/pkg/analyzer/test/src/context/context_test.dart b/pkg/analyzer/test/src/context/context_test.dart
index 5e230337a8ea0728f2498f376d06ec1c79bb2eac..090b3a38a42c4b679194a9a0570b5c61633534e8 100644
--- a/pkg/analyzer/test/src/context/context_test.dart
+++ b/pkg/analyzer/test/src/context/context_test.dart
@@ -2709,6 +2709,8 @@ class A {
}
class B extends A {}
''');
+ _assertValidForChangedLibrary(a);
+ _assertValidForDependentLibrary(b);
_assertInvalid(a, LIBRARY_ERRORS_READY);
_assertInvalid(b, LIBRARY_ERRORS_READY);
}
@@ -2755,7 +2757,10 @@ class A {
void set _privateSetter2(_) {}
}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
+ _assertValidForDependentLibrary(b);
+ _assertValidAllLibraryUnitResults(b);
_assertValid(b, LIBRARY_ERRORS_READY);
}
@@ -2785,7 +2790,10 @@ main() {
class _A2 {}
class _B {}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
+ _assertValidForDependentLibrary(b);
+ _assertValidAllLibraryUnitResults(b);
_assertValid(b, LIBRARY_ERRORS_READY);
}
@@ -2811,7 +2819,10 @@ main() {
r'''
int _V = 2;
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
+ _assertValidForDependentLibrary(b);
+ _assertValidAllLibraryUnitResults(b);
_assertValid(b, LIBRARY_ERRORS_READY);
}
@@ -2843,9 +2854,11 @@ class A {}
class B {}
class C2 {}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
+ _assertValidForDependentLibrary(b);
_assertInvalid(b, LIBRARY_ERRORS_READY);
- _assertUnitInvalid(b, RESOLVED_UNIT);
+ _assertInvalidUnits(b, RESOLVED_UNIT4);
// Now b.dart is analyzed and the error is fixed.
_performPendingAnalysisTasks();
expect(context.getErrors(b).errors, hasLength(0));
@@ -2858,8 +2871,11 @@ class A {}
class B {}
class C {}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
+ _assertValidForDependentLibrary(b);
_assertInvalid(b, LIBRARY_ERRORS_READY);
+ _assertInvalidUnits(b, RESOLVED_UNIT4);
// Now b.dart is analyzed and it again has the error.
_performPendingAnalysisTasks();
expect(context.getErrors(b).errors, hasLength(1));
@@ -2902,8 +2918,11 @@ class B {
B();
}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
- _assertValid(b, LIBRARY_ELEMENT);
+ _assertValidForDependentLibrary(b);
+ _assertValidAllLibraryUnitResults(b);
+ _assertValid(b, LIBRARY_ERRORS_READY);
// The a.dart's unit and element are updated incrementally.
// They are the same instances as initially.
// So, all the references from other units are still valid.
@@ -2937,8 +2956,11 @@ class B {
B();
}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
- _assertInvalid(b, LIBRARY_ELEMENT);
+ _assertValidForDependentLibrary(b);
+ _assertInvalid(b, LIBRARY_ERRORS_READY);
+ _assertInvalidUnits(b, RESOLVED_UNIT4);
// The a.dart's unit and element are the same.
{
LibrarySpecificUnit target = new LibrarySpecificUnit(a, a);
@@ -2982,6 +3004,7 @@ main() {
class A {}
class B2 {}
''');
+ _assertValidAllLibraryUnitResults(b);
_assertValid(b, LIBRARY_ERRORS_READY);
}
@@ -3014,12 +3037,12 @@ class A {}
class B2 {}
class C {}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
- _assertValid(a, LINE_INFO);
- _assertUnitValid(a, RESOLVED_UNIT1);
_assertUnitInvalid(a, RESOLVED_UNIT);
+ _assertValidForDependentLibrary(b);
+ _assertValidAllLibraryUnitResults(b);
_assertValid(b, LIBRARY_ERRORS_READY);
- _assertUnitValid(b, RESOLVED_UNIT);
}
void test_usedName_class_name_asHole_inBody() {
@@ -3049,10 +3072,11 @@ class A {}
class B {}
class C2 {}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
+ _assertValidForDependentLibrary(b);
_assertInvalid(b, LIBRARY_ERRORS_READY);
- _assertInvalidUnits(b, RESOLVED_UNIT2);
- _assertInvalidLibraryElements(b, LIBRARY_ELEMENT2);
+ _assertInvalidUnits(b, RESOLVED_UNIT4);
}
void test_usedName_class_name_asSuper() {
@@ -3075,10 +3099,11 @@ class B extends A {}
r'''
class A2 {}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
+ _assertValidForDependentLibrary(b);
_assertInvalid(b, LIBRARY_ERRORS_READY);
- _assertInvalidUnits(b, RESOLVED_UNIT2);
- _assertInvalidLibraryElements(b, LIBRARY_ELEMENT2);
+ _assertInvalidUnits(b, RESOLVED_UNIT4);
}
void test_usedName_class_name_asTypeBound() {
@@ -3103,10 +3128,11 @@ class B<T extends A> {
r'''
class A2 {}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
+ _assertValidForDependentLibrary(b);
_assertInvalid(b, LIBRARY_ERRORS_READY);
- _assertInvalidUnits(b, RESOLVED_UNIT2);
- _assertInvalidLibraryElements(b, LIBRARY_ELEMENT2);
+ _assertInvalidUnits(b, RESOLVED_UNIT4);
}
void test_usedName_class_name_inBody() {
@@ -3136,10 +3162,11 @@ class A {}
class B {}
class C2 {}
''');
+ _assertValidForChangedLibrary(a);
+ _assertValidForDependentLibrary(b);
_assertInvalid(a, LIBRARY_ERRORS_READY);
_assertInvalid(b, LIBRARY_ERRORS_READY);
- _assertInvalidUnits(b, RESOLVED_UNIT2);
- _assertInvalidLibraryElements(b, LIBRARY_ELEMENT2);
+ _assertInvalidUnits(b, RESOLVED_UNIT4);
}
void test_usedName_classMethod_name_inBody() {
@@ -3169,10 +3196,12 @@ class A {
m2() {}
}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
+ _assertValidForDependentLibrary(b);
+ _assertInvalidLibraryElements(b, LIBRARY_ELEMENT4);
+ _assertInvalidUnits(b, RESOLVED_UNIT4);
_assertInvalid(b, LIBRARY_ERRORS_READY);
- _assertInvalidUnits(b, RESOLVED_UNIT2);
- _assertInvalidLibraryElements(b, LIBRARY_ELEMENT2);
}
void test_usedName_indirect_classMethod_name_inBody() {
@@ -3209,13 +3238,18 @@ class A {
m2() {}
}
''');
+ _assertValidForChangedLibrary(a);
_assertInvalid(a, LIBRARY_ERRORS_READY);
+
+ _assertValidForDependentLibrary(b);
+ _assertInvalidLibraryElements(b, LIBRARY_ELEMENT4);
+ _assertInvalidUnits(b, RESOLVED_UNIT4);
_assertInvalid(b, LIBRARY_ERRORS_READY);
- _assertInvalid(c, LIBRARY_ERRORS_READY);
- _assertInvalidUnits(b, RESOLVED_UNIT2);
- _assertInvalidLibraryElements(b, LIBRARY_ELEMENT2);
- _assertInvalidUnits(c, RESOLVED_UNIT4);
+
+ _assertValidForDependentLibrary(c);
_assertInvalidLibraryElements(c, LIBRARY_ELEMENT5);
+ _assertInvalidUnits(c, RESOLVED_UNIT4);
+ _assertInvalid(c, LIBRARY_ERRORS_READY);
}
void test_usedName_indirect_classMethod_returnType_inBody() {
@@ -3257,14 +3291,18 @@ class A {
}
''');
_assertInvalid(a, LIBRARY_ERRORS_READY);
- _assertInvalid(b, LIBRARY_ERRORS_READY);
- _assertInvalid(c, LIBRARY_ERRORS_READY);
+
// TODO(scheglov) In theory b.dart is not affected, because it does not
// call A.m, does not override it, etc.
- _assertInvalidUnits(b, RESOLVED_UNIT2);
- _assertInvalidLibraryElements(b, LIBRARY_ELEMENT2);
- _assertInvalidUnits(c, RESOLVED_UNIT4);
+ _assertValidForDependentLibrary(b);
+ _assertInvalidLibraryElements(b, LIBRARY_ELEMENT4);
+ _assertInvalidUnits(b, RESOLVED_UNIT4);
+ _assertInvalid(b, LIBRARY_ERRORS_READY);
+
+ _assertValidForDependentLibrary(c);
_assertInvalidLibraryElements(c, LIBRARY_ELEMENT5);
+ _assertInvalidUnits(c, RESOLVED_UNIT4);
+ _assertInvalid(c, LIBRARY_ERRORS_READY);
}
void _assertInvalid(AnalysisTarget target, ResultDescriptor descriptor) {
@@ -3314,9 +3352,62 @@ class A {
new LibrarySpecificUnit(librarySource, unitSource), descriptor);
}
+ void _assertUnitValidTaskResults(Source unitSource, TaskDescriptor descriptor,
+ {Source librarySource}) {
+ librarySource ??= unitSource;
+ for (ResultDescriptor result in descriptor.results) {
+ _assertUnitValid(unitSource, result, librarySource: librarySource);
+ }
+ }
+
void _assertValid(AnalysisTarget target, ResultDescriptor descriptor) {
CacheState state = analysisCache.getState(target, descriptor);
- expect(state, CacheState.VALID, reason: '$descriptor in $target');
+ expect(state, isIn([CacheState.VALID, CacheState.FLUSHED]),
+ reason: '$descriptor in $target');
+ }
+
+ void _assertValidAllLibraryUnitResults(Source source, {Source library}) {
+ for (ResultDescriptor<LibraryElement> result in LIBRARY_ELEMENT_RESULTS) {
+ _assertValid(source, result);
+ }
+ library ??= source;
+ LibrarySpecificUnit target = new LibrarySpecificUnit(library, source);
+ for (ResultDescriptor<CompilationUnit> result in RESOLVED_UNIT_RESULTS) {
+ _assertValid(target, result);
+ }
+ }
+
+ void _assertValidForAnyLibrary(Source source) {
+ // Source results.
+ _assertValidTaskResults(source, ScanDartTask.DESCRIPTOR);
+ // Library results.
+ _assertValidTaskResults(source, BuildLibraryElementTask.DESCRIPTOR);
+ _assertValidTaskResults(source, BuildDirectiveElementsTask.DESCRIPTOR);
+ _assertValidTaskResults(source, BuildSourceExportClosureTask.DESCRIPTOR);
+ _assertValidTaskResults(source, ReadyLibraryElement2Task.DESCRIPTOR);
+ // Unit results.
+ _assertUnitValidTaskResults(
+ source, BuildCompilationUnitElementTask.DESCRIPTOR);
+ _assertUnitValidTaskResults(
+ source, ResolveDirectiveElementsTask.DESCRIPTOR);
+ _assertUnitValidTaskResults(source, BuildEnumMemberElementsTask.DESCRIPTOR);
+ _assertUnitValidTaskResults(source, ComputeLibraryCycleTask.DESCRIPTOR);
+ }
+
+ void _assertValidForChangedLibrary(Source source) {
+ _assertValidForAnyLibrary(source);
+ }
+
+ void _assertValidForDependentLibrary(Source source) {
+ _assertValidForAnyLibrary(source);
+ // Library results.
+ _assertValidTaskResults(source, BuildPublicNamespaceTask.DESCRIPTOR);
+ }
+
+ void _assertValidTaskResults(AnalysisTarget target, TaskDescriptor task) {
+ for (ResultDescriptor result in task.results) {
+ _assertValid(target, result);
+ }
}
void _performPendingAnalysisTasks([int maxTasks = 512]) {
« pkg/analyzer/lib/src/task/dart.dart ('K') | « pkg/analyzer/lib/src/task/dart.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698