diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_text_document_changes.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_text_document_changes.dart
index c500164..ea42bec 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_text_document_changes.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_text_document_changes.dart
@@ -60,6 +60,7 @@
   ErrorOr<void> handle(DidCloseTextDocumentParams params) {
     final path = pathOfDoc(params.textDocument);
     return path.mapResult((path) {
+      server.removePriorityFile(path);
       server.documentVersions[path] = null;
       server.updateOverlay(path, null);
       return success();
@@ -80,6 +81,7 @@
     final doc = params.textDocument;
     final path = pathOfDocItem(doc);
     return path.mapResult((path) {
+      server.addPriorityFile(path);
       // We don't get a VersionedTextDocumentIdentifier with a didOpen but we
       // do get the necessary info to create one.
       server.documentVersions[path] = new VersionedTextDocumentIdentifier(
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index da14966..245c116a 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -165,6 +165,14 @@
 
   Future<void> get exited => channel.closed;
 
+  addPriorityFile(String path) {
+    final didAdd = priorityFiles.add(path);
+    assert(didAdd);
+    if (didAdd) {
+      _updateDriversPriorityFiles();
+    }
+  }
+
   /**
    * The socket from which messages are being read has been closed.
    */
@@ -282,6 +290,14 @@
     ));
   }
 
+  removePriorityFile(String path) {
+    final didRemove = priorityFiles.remove(path);
+    assert(didRemove);
+    if (didRemove) {
+      _updateDriversPriorityFiles();
+    }
+  }
+
   void sendErrorResponse(Message message, ResponseError error) {
     if (message is RequestMessage) {
       channel.sendResponse(
@@ -405,6 +421,12 @@
     }
     driverMap.values.forEach((driver) => driver.changeFile(path));
   }
+
+  _updateDriversPriorityFiles() {
+    driverMap.values.forEach((driver) {
+      driver.priorityFiles = priorityFiles.toList();
+    });
+  }
 }
 
 class LspServerContextManagerCallbacks extends ContextManagerCallbacks {
diff --git a/pkg/analysis_server/test/lsp/priority_files_test.dart b/pkg/analysis_server/test/lsp/priority_files_test.dart
new file mode 100644
index 0000000..7a7b330
--- /dev/null
+++ b/pkg/analysis_server/test/lsp/priority_files_test.dart
@@ -0,0 +1,38 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'server_abstract.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(PriorityFilesTest);
+  });
+}
+
+@reflectiveTest
+class PriorityFilesTest extends AbstractLspAnalysisServerTest {
+  test_close() async {
+    await initialize();
+    await openFile(mainFileUri, '');
+    await closeFile(mainFileUri);
+
+    expect(server.priorityFiles, isNot(contains(mainFilePath)));
+    server.driverMap.values.forEach((driver) {
+      expect(driver.priorityFiles, isNot(contains(mainFilePath)));
+    });
+  }
+
+  test_open() async {
+    await initialize();
+    await openFile(mainFileUri, '');
+
+    expect(server.priorityFiles, contains(mainFilePath));
+    server.driverMap.values.forEach((driver) {
+      expect(driver.priorityFiles, contains(mainFilePath));
+    });
+  }
+}
diff --git a/pkg/analysis_server/test/lsp/test_all.dart b/pkg/analysis_server/test/lsp/test_all.dart
index 7e2b8b6..c9942f1 100644
--- a/pkg/analysis_server/test/lsp/test_all.dart
+++ b/pkg/analysis_server/test/lsp/test_all.dart
@@ -4,6 +4,11 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../src/lsp/lsp_packet_transformer_test.dart'
+    as packet_transformer_tests;
+import 'code_actions_assists_test.dart' as assists_code_action_tests;
+import 'code_actions_fixes_test.dart' as fixes_code_action_tests;
+import 'code_actions_source_test.dart' as source_code_action_tests;
 import 'completion_test.dart' as completion_test;
 import 'definition_test.dart' as definition_test;
 import 'diagnostic_test.dart' as diagnostic_test;
@@ -12,14 +17,10 @@
 import 'format_test.dart' as format_test;
 import 'hover_test.dart' as hover_test;
 import 'initialization_test.dart' as initialization_test;
+import 'priority_files_test.dart' as priority_files_test;
 import 'references_test.dart' as references_test;
 import 'server_test.dart' as server_test;
 import 'signature_help_test.dart' as signature_help_test;
-import 'code_actions_source_test.dart' as source_code_action_tests;
-import 'code_actions_fixes_test.dart' as fixes_code_action_tests;
-import 'code_actions_assists_test.dart' as assists_code_action_tests;
-import '../src/lsp/lsp_packet_transformer_test.dart'
-    as packet_transformer_tests;
 
 main() {
   defineReflectiveSuite(() {
@@ -28,6 +29,7 @@
     diagnostic_test.main();
     document_symbols_test.main();
     file_modification_test.main();
+    priority_files_test.main();
     format_test.main();
     hover_test.main();
     initialization_test.main();
