mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
fix(lsp/java): add null checks before performing code actions (closes #1156)
This commit is contained in:
@@ -61,6 +61,9 @@ public interface ILanguageClient {
|
||||
void performCodeAction(PerformCodeActionParams params);
|
||||
|
||||
default void performCodeAction(CodeActionItem actionItem) {
|
||||
if (actionItem == null) {
|
||||
return;
|
||||
}
|
||||
performCodeAction(new PerformCodeActionParams(actionItem));
|
||||
}
|
||||
|
||||
|
||||
+14
-7
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user