fix(lsp/java): add null checks before performing code actions (closes #1156)

This commit is contained in:
Akash Yadav
2023-08-01 10:01:12 +05:30
parent 94bbd0a4f4
commit 6cdb6bd374
3 changed files with 18 additions and 7 deletions
@@ -61,6 +61,9 @@ public interface ILanguageClient {
void performCodeAction(PerformCodeActionParams params);
default void performCodeAction(CodeActionItem actionItem) {
if (actionItem == null) {
return;
}
performCodeAction(new PerformCodeActionParams(actionItem));
}
@@ -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
}
@@ -590,4 +590,5 @@
<string name="msg_emptyview_idelogs">Logs from the IDE are shown here.</string>
<string name="msg_emptyview_diagnostics">Open a file to show its diagnostic results</string>
<string name="msg_emptyview_buildoutput">"Build the application or run a task to see its build output here. "</string>
<string name="msg_codeaction_failed">Failed to perform code action</string>
</resources>