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