Issue 36212. Fix for updated part without library.
R=brianwilkerson@google.com
Bug: https://github.com/dart-lang/sdk/issues/36212
Change-Id: Ib0c43685c0b9f167591232d384a7fc5e426c07d5
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/97007
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/services/available_declarations.dart b/pkg/analyzer/lib/src/services/available_declarations.dart
index 4ec0123..aaed6fe 100644
--- a/pkg/analyzer/lib/src/services/available_declarations.dart
+++ b/pkg/analyzer/lib/src/services/available_declarations.dart
@@ -624,6 +624,7 @@
var isLibrary = file.isLibrary;
var library = isLibrary ? file : file.library;
+ if (library == null) return;
if (isLibrary) {
file.refresh(containingContext);
diff --git a/pkg/analyzer/test/src/services/available_declarations_test.dart b/pkg/analyzer/test/src/services/available_declarations_test.dart
index 2fe5b77..e82719f 100644
--- a/pkg/analyzer/test/src/services/available_declarations_test.dart
+++ b/pkg/analyzer/test/src/services/available_declarations_test.dart
@@ -348,6 +348,19 @@
]);
}
+ test_added_part_withoutLibrary() async {
+ var b = convertPath('/home/test/lib/b.dart');
+
+ newFile(b, content: r'''
+part of 'a.dart';
+''');
+ tracker.changeFile(b);
+ await _doAllTrackerWork();
+
+ _assertHasNoLibrary('package:test/a.dart');
+ _assertHasNoLibrary('package:test/b.dart');
+ }
+
test_chooseContext_inAnalysisRoot() async {
var homePath = convertPath('/home');
var testPath = convertPath('/home/test');
@@ -536,6 +549,30 @@
_assertHasLibrary('package:test/b.dart');
}
+ test_deleted_library_ofPart() async {
+ var a = convertPath('/home/test/lib/a.dart');
+ var b = convertPath('/home/test/lib/b.dart');
+
+ newFile(a, content: r'''
+part 'b.dart';
+''');
+ newFile(b, content: r'''
+part of 'a.dart';
+''');
+ tracker.addContext(testAnalysisContext);
+
+ await _doAllTrackerWork();
+ _assertHasLibrary('package:test/a.dart');
+ _assertHasNoLibrary('package:test/b.dart');
+
+ deleteFile(a);
+ tracker.changeFile(a);
+ await _doAllTrackerWork();
+
+ _assertHasNoLibrary('package:test/a.dart');
+ _assertHasNoLibrary('package:test/b.dart');
+ }
+
test_deleted_part() async {
var a = convertPath('/home/test/lib/a.dart');
var b = convertPath('/home/test/lib/b.dart');
@@ -575,6 +612,19 @@
]);
}
+ test_deleted_part_withoutLibrary() async {
+ var b = convertPath('/home/test/lib/b.dart');
+
+ newFile(b, content: r'''
+part of 'a.dart';
+''');
+ tracker.addContext(testAnalysisContext);
+
+ await _doAllTrackerWork();
+ _assertHasNoLibrary('package:test/a.dart');
+ _assertHasNoLibrary('package:test/b.dart');
+ }
+
test_updated_exported() async {
var a = convertPath('/home/test/lib/a.dart');
var b = convertPath('/home/test/lib/b.dart');
@@ -713,6 +763,30 @@
_ExpectedDeclaration.class_('C'),
]);
}
+
+ test_updated_part_withoutLibrary() async {
+ var b = convertPath('/home/test/lib/b.dart');
+
+ newFile(b, content: r'''
+part of 'a.dart';
+class B {}
+''');
+ tracker.addContext(testAnalysisContext);
+
+ await _doAllTrackerWork();
+ _assertHasNoLibrary('package:test/a.dart');
+ _assertHasNoLibrary('package:test/b.dart');
+
+ newFile(b, content: r'''
+part of 'a.dart';
+class B2 {}
+''');
+ tracker.changeFile(b);
+
+ await _doAllTrackerWork();
+ _assertHasNoLibrary('package:test/a.dart');
+ _assertHasNoLibrary('package:test/b.dart');
+ }
}
@reflectiveTest