[dart fix] Support for fixes when only part files have diagnostics.

Fixes https://github.com/dart-lang/sdk/issues/55520

Change-Id: Ibebe155e00758a6bf36e0327c130be70f2910238
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/374100
Commit-Queue: Keerti Parthasarathy <keertip@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index 58e72ce..2ad2101 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -485,9 +485,17 @@
         }
 
         var library = await context.currentSession.getResolvedLibrary(path);
+
         if (isCancelled) {
           break;
         }
+        if (library is NotLibraryButPartResult) {
+          var unit = await context.currentSession.getResolvedUnit(path);
+          if (unit is ResolvedUnitResult) {
+            library = await context.currentSession
+                .getResolvedLibraryByElement(unit.libraryElement);
+          }
+        }
         if (library is ResolvedLibraryResult) {
           await _fixErrorsInLibrary(library, stopAfterFirst: stopAfterFirst);
           if (isCancelled || (stopAfterFirst && changeMap.hasFixes)) {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/bulk_fix_processor_test.dart b/pkg/analysis_server/test/src/services/correction/fix/bulk_fix_processor_test.dart
index 0aafb4a..53a4070 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/bulk_fix_processor_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/bulk_fix_processor_test.dart
@@ -88,6 +88,59 @@
     expect(await computeHasFixes(), isTrue);
   }
 
+  Future<void> test_hasFixes_in_part() async {
+    createAnalysisOptionsFile(experiments: experiments, lints: [
+      LintNames.unnecessary_new,
+    ]);
+
+    newFile('$testPackageLibPath/a.dart', '''
+part of 'test.dart';
+
+class A { }
+
+var a = new A();
+''');
+
+    await resolveTestCode('''
+part 'a.dart';
+''');
+
+    expect(await computeHasFixes(), isTrue);
+  }
+
+  Future<void> test_hasFixes_in_part_and_library() async {
+    createAnalysisOptionsFile(experiments: experiments, lints: [
+      LintNames.unnecessary_new,
+    ]);
+
+    newFile('$testPackageLibPath/a.dart', '''
+part of 'test.dart';
+
+class A { }
+
+var a = new A();
+''');
+
+    newFile('$testPackageLibPath/b.dart', '''
+part of 'test.dart';
+
+class B { }
+
+var b = new B();
+''');
+
+    await resolveTestCode('''
+part 'a.dart';
+part 'b.dart';
+
+class C{}
+var c = new C();
+''');
+
+    expect(await computeHasFixes(), isTrue);
+    expect(processor.changeMap.libraryMap.length, 3);
+  }
+
   Future<void> test_hasFixes_stoppedAfterFirst() async {
     createAnalysisOptionsFile(experiments: experiments, lints: [
       LintNames.annotate_overrides,