Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit 6cdb6bd

Browse files
committed
fix(lsp/java): add null checks before performing code actions (closes #1156)
1 parent 94bbd0a commit 6cdb6bd

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

lsp/api/src/main/java/com/itsaky/androidide/lsp/api/ILanguageClient.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ public interface ILanguageClient {
6161
void performCodeAction(PerformCodeActionParams params);
6262

6363
default void performCodeAction(CodeActionItem actionItem) {
64+
if (actionItem == null) {
65+
return;
66+
}
6467
performCodeAction(new PerformCodeActionParams(actionItem));
6568
}
6669

lsp/java/src/main/java/com/itsaky/androidide/lsp/java/actions/BaseJavaCodeAction.kt

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import com.itsaky.androidide.lsp.api.ILanguageClient
2929
import com.itsaky.androidide.lsp.api.ILanguageServerRegistry
3030
import com.itsaky.androidide.lsp.java.JavaCompilerProvider
3131
import com.itsaky.androidide.lsp.java.JavaLanguageServer
32+
import com.itsaky.androidide.lsp.java.R
3233
import com.itsaky.androidide.lsp.java.compiler.JavaCompilerService
3334
import com.itsaky.androidide.lsp.java.rewrite.Rewrite
3435
import com.itsaky.androidide.projects.ProjectManager
@@ -43,6 +44,7 @@ import java.io.File
4344
* @author Akash Yadav
4445
*/
4546
abstract class BaseJavaCodeAction : EditorActionItem {
47+
4648
override var visible: Boolean = true
4749
override var enabled: Boolean = true
4850
override var icon: Drawable? = null
@@ -69,11 +71,7 @@ abstract class BaseJavaCodeAction : EditorActionItem {
6971
}
7072

7173
fun performCodeAction(data: ActionData, result: Rewrite) {
72-
val server = ILanguageServerRegistry.getDefault().getServer(JavaLanguageServer.SERVER_ID)!!
7374
val compiler = data.requireCompiler()
74-
val client = server.client!!
75-
76-
val file = data.requireFile()
7775

7876
val actions =
7977
try {
@@ -84,15 +82,24 @@ abstract class BaseJavaCodeAction : EditorActionItem {
8482
return
8583
}
8684

87-
client.performCodeAction(actions)
85+
if (actions == null) {
86+
onPerformCodeActionFailed(data)
87+
return
88+
}
89+
90+
data.getLanguageClient()?.performCodeAction(actions)
91+
}
92+
93+
protected open fun onPerformCodeActionFailed(data: ActionData) {
94+
flashError(R.string.msg_codeaction_failed)
8895
}
8996

9097
protected fun ActionData.requireLanguageServer(): JavaLanguageServer {
9198
return ILanguageServerRegistry.getDefault().getServer(JavaLanguageServer.SERVER_ID)
92-
as JavaLanguageServer
99+
as JavaLanguageServer
93100
}
94101

95-
protected fun ActionData.getLanguageClient() : ILanguageClient? {
102+
protected fun ActionData.getLanguageClient(): ILanguageClient? {
96103
return requireLanguageServer().client
97104
}
98105

resources/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,4 +590,5 @@
590590
<string name="msg_emptyview_idelogs">Logs from the IDE are shown here.</string>
591591
<string name="msg_emptyview_diagnostics">Open a file to show its diagnostic results</string>
592592
<string name="msg_emptyview_buildoutput">"Build the application or run a task to see its build output here. "</string>
593+
<string name="msg_codeaction_failed">Failed to perform code action</string>
593594
</resources>

0 commit comments

Comments
 (0)