From 30b394628a1c86c9f9fdce115bcc99fac6fe8475 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Sat, 27 May 2023 23:33:11 +0530 Subject: [PATCH] fix: do not perform code action if the activity is being destroyed (fixes #950) --- .../activities/editor/ProjectHandlerActivity.kt | 8 ++++---- .../itsaky/androidide/lsp/IDELanguageClientImpl.java | 10 ++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt b/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt index 2757308a3b..c77193e5ac 100644 --- a/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt +++ b/app/src/main/java/com/itsaky/androidide/activities/editor/ProjectHandlerActivity.kt @@ -142,14 +142,14 @@ abstract class ProjectHandlerActivity : BaseEditorActivity(), IProjectHandler { closeProject(false) } + if (IDELanguageClientImpl.isInitialized()) { + IDELanguageClientImpl.shutdown() + } + super.preDestroy() if (isDestroying) { - if (IDELanguageClientImpl.isInitialized()) { - IDELanguageClientImpl.shutdown() - } - try { stopLanguageServers() } catch (err: Exception) { diff --git a/app/src/main/java/com/itsaky/androidide/lsp/IDELanguageClientImpl.java b/app/src/main/java/com/itsaky/androidide/lsp/IDELanguageClientImpl.java index 6fc28dddcb..36861b124a 100755 --- a/app/src/main/java/com/itsaky/androidide/lsp/IDELanguageClientImpl.java +++ b/app/src/main/java/com/itsaky/androidide/lsp/IDELanguageClientImpl.java @@ -170,6 +170,7 @@ public void performCodeAction(PerformCodeActionParams params) { } final var action = params.getAction(); + final var activity = activity(); if (activity() == null) { LOG.error( "Unable to perform code action", @@ -179,6 +180,15 @@ public void performCodeAction(PerformCodeActionParams params) { return; } + if (activity.isFinishing() + || activity.isDestroyed() + || activity.getSupportFragmentManager().isDestroyed() + || activity.getSupportFragmentManager().isStateSaved()) { + LOG.error("Cannot perform code action. Activity is in an invalid state."); + // Should we try to show the error message to the user? + return; + } + final var currentEditor = activity().getCurrentEditor(); final var editor = currentEditor != null ? currentEditor.getEditor() : null;