From 6cdb6bd37434fc3615d04162cdb839bb6e810899 Mon Sep 17 00:00:00 2001 From: Akash Yadav Date: Tue, 1 Aug 2023 10:01:12 +0530 Subject: [PATCH] fix(lsp/java): add null checks before performing code actions (closes #1156) --- .../androidide/lsp/api/ILanguageClient.java | 3 +++ .../lsp/java/actions/BaseJavaCodeAction.kt | 21 ++++++++++++------- resources/src/main/res/values/strings.xml | 1 + 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/lsp/api/src/main/java/com/itsaky/androidide/lsp/api/ILanguageClient.java b/lsp/api/src/main/java/com/itsaky/androidide/lsp/api/ILanguageClient.java index fbd06b27e..4cb297c1c 100644 --- a/lsp/api/src/main/java/com/itsaky/androidide/lsp/api/ILanguageClient.java +++ b/lsp/api/src/main/java/com/itsaky/androidide/lsp/api/ILanguageClient.java @@ -61,6 +61,9 @@ public interface ILanguageClient { void performCodeAction(PerformCodeActionParams params); default void performCodeAction(CodeActionItem actionItem) { + if (actionItem == null) { + return; + } performCodeAction(new PerformCodeActionParams(actionItem)); } diff --git a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/BaseJavaCodeAction.kt b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/BaseJavaCodeAction.kt index f580ef5df..29364edcf 100644 --- a/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/BaseJavaCodeAction.kt +++ b/lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/BaseJavaCodeAction.kt @@ -29,6 +29,7 @@ import com.itsaky.androidide.lsp.api.ILanguageClient import com.itsaky.androidide.lsp.api.ILanguageServerRegistry import com.itsaky.androidide.lsp.java.JavaCompilerProvider import com.itsaky.androidide.lsp.java.JavaLanguageServer +import com.itsaky.androidide.lsp.java.R import com.itsaky.androidide.lsp.java.compiler.JavaCompilerService import com.itsaky.androidide.lsp.java.rewrite.Rewrite import com.itsaky.androidide.projects.ProjectManager @@ -43,6 +44,7 @@ import java.io.File * @author Akash Yadav */ abstract class BaseJavaCodeAction : EditorActionItem { + override var visible: Boolean = true override var enabled: Boolean = true override var icon: Drawable? = null @@ -69,11 +71,7 @@ abstract class BaseJavaCodeAction : EditorActionItem { } fun performCodeAction(data: ActionData, result: Rewrite) { - val server = ILanguageServerRegistry.getDefault().getServer(JavaLanguageServer.SERVER_ID)!! val compiler = data.requireCompiler() - val client = server.client!! - - val file = data.requireFile() val actions = try { @@ -84,15 +82,24 @@ abstract class BaseJavaCodeAction : EditorActionItem { return } - client.performCodeAction(actions) + if (actions == null) { + onPerformCodeActionFailed(data) + return + } + + data.getLanguageClient()?.performCodeAction(actions) + } + + protected open fun onPerformCodeActionFailed(data: ActionData) { + flashError(R.string.msg_codeaction_failed) } protected fun ActionData.requireLanguageServer(): JavaLanguageServer { return ILanguageServerRegistry.getDefault().getServer(JavaLanguageServer.SERVER_ID) - as JavaLanguageServer + as JavaLanguageServer } - protected fun ActionData.getLanguageClient() : ILanguageClient? { + protected fun ActionData.getLanguageClient(): ILanguageClient? { return requireLanguageServer().client } diff --git a/resources/src/main/res/values/strings.xml b/resources/src/main/res/values/strings.xml index 12dd908d7..2e98edc45 100644 --- a/resources/src/main/res/values/strings.xml +++ b/resources/src/main/res/values/strings.xml @@ -590,4 +590,5 @@ Logs from the IDE are shown here. Open a file to show its diagnostic results "Build the application or run a task to see its build output here. " + Failed to perform code action