Skip to content

Commit 2f04e9a

Browse files
committed
feat(intellij): add clear cache and restart actions for language server
1 parent 509639e commit 2f04e9a

14 files changed

+100
-173
lines changed

intellij-client/build.gradle.kts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,11 @@ repositories {
3838
dependencies {
3939
compileOnly(libs.kotlinxSerialization)
4040

41-
// implementation(libs.lsp4j)
42-
implementation(libs.lsp4jdebug)
41+
//implementation(libs.lsp4j)
42+
implementation(libs.lsp4jdebug) {
43+
exclude(group = "org.eclipse.lsp4j", module = "org.eclipse.lsp4j.jsonrpc")
44+
exclude(group = "com.google.code.gson", module = "gson")
45+
}
4346

4447
testImplementation(kotlin("test"))
4548
testImplementation(libs.junit)
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
package dev.robotcode.robotcode4ij
22

33
import com.intellij.openapi.util.IconLoader
4+
import com.intellij.ui.IconManager
45

56
class RobotIcons {
67
companion object {
7-
val Resource = IconLoader.findIcon("/images/resource.svg", Companion::class.java)!!
8-
val Suite = IconLoader.findIcon("/images/suite.svg", Companion::class.java)!!
9-
val RobotCode = IconLoader.findIcon("/images/robotcode.svg", Companion::class.java)!!
10-
val Robot = IconLoader.findIcon("/images/suite.robot", Companion::class.java)!!
8+
@JvmField
9+
val Resource = IconManager.getInstance().getIcon("/images/resource.svg", Companion::class.java.classLoader)
10+
@JvmField
11+
val Suite = IconManager.getInstance().getIcon("/images/suite.svg", Companion::class.java.classLoader)
12+
@JvmField
13+
val RobotCode = IconManager.getInstance().getIcon("/images/robotcode.svg", Companion::class.java.classLoader)
14+
@JvmField
15+
val Robot = IconManager.getInstance().getIcon("/images/suite.robot", Companion::class.java.classLoader)
1116
}
1217

1318
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dev.robotcode.robotcode4ij.actions
2+
3+
import com.intellij.openapi.actionSystem.AnAction
4+
import com.intellij.openapi.actionSystem.AnActionEvent
5+
import dev.robotcode.robotcode4ij.lsp.langServerManager
6+
import dev.robotcode.robotcode4ij.testing.testManger
7+
8+
class RobotCodeClearCacheAndRestartLanguageServerAction : AnAction() {
9+
override fun actionPerformed(e: AnActionEvent) {
10+
e.project?.langServerManager?.clearCacheAndRestart()
11+
e.project?.testManger?.refreshDebounced()
12+
}
13+
}

intellij-client/src/main/kotlin/dev/robotcode/robotcode4ij/actions/RobotCreateFileAction.kt renamed to intellij-client/src/main/kotlin/dev/robotcode/robotcode4ij/actions/RobotCodeCreateFileAction.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import dev.robotcode.robotcode4ij.RobotIcons
1010
import dev.robotcode.robotcode4ij.RobotResourceFileType
1111
import dev.robotcode.robotcode4ij.RobotSuiteFileType
1212

13-
class RobotCreateFileAction : CreateFileFromTemplateAction(
13+
class RobotCodeCreateFileAction : CreateFileFromTemplateAction(
1414
"Robot Framework File", "Robot Framework file", RobotIcons.Suite
1515
), DumbAware {
1616
override fun buildDialog(project: Project, directory: PsiDirectory, builder: CreateFileFromTemplateDialog.Builder) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dev.robotcode.robotcode4ij.actions
2+
3+
import com.intellij.openapi.actionSystem.AnAction
4+
import com.intellij.openapi.actionSystem.AnActionEvent
5+
import dev.robotcode.robotcode4ij.lsp.langServerManager
6+
import dev.robotcode.robotcode4ij.testing.testManger
7+
8+
class RobotCodeRestartLanguageServerAction : AnAction() {
9+
override fun actionPerformed(e: AnActionEvent) {
10+
e.project?.langServerManager?.restart()
11+
e.project?.testManger?.refreshDebounced()
12+
}
13+
}

intellij-client/src/main/kotlin/dev/robotcode/robotcode4ij/lsp/RobotCodeLanguageServerFactory.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import com.redhat.devtools.lsp4ij.client.features.LSPClientFeatures
88
import com.redhat.devtools.lsp4ij.server.StreamConnectionProvider
99
import dev.robotcode.robotcode4ij.lsp.RobotCodeLanguageServerManager.Companion.LANGUAGE_SERVER_ENABLED_KEY
1010
import dev.robotcode.robotcode4ij.lsp.features.RobotDiagnosticsFeature
11+
import org.eclipse.lsp4j.services.LanguageServer
1112

1213
@Suppress("UnstableApiUsage") class RobotCodeLanguageServerFactory : LanguageServerFactory,
1314
LanguageServerEnablementSupport {
@@ -23,6 +24,10 @@ import dev.robotcode.robotcode4ij.lsp.features.RobotDiagnosticsFeature
2324
return RobotCodeLanguageClient(project)
2425
}
2526

27+
override fun getServerInterface(): Class<out LanguageServer?> {
28+
return RobotCodeServerApi::class.java
29+
}
30+
2631
override fun isEnabled(project: Project): Boolean {
2732
if (project.getUserData(LANGUAGE_SERVER_ENABLED_KEY) == true) {
2833
return true

intellij-client/src/main/kotlin/dev/robotcode/robotcode4ij/lsp/RobotCodeLanguageServerManager.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import com.intellij.openapi.util.removeUserData
99
import com.redhat.devtools.lsp4ij.LanguageServerManager
1010
import com.redhat.devtools.lsp4ij.ServerStatus
1111
import dev.robotcode.robotcode4ij.checkPythonAndRobotVersion
12+
import kotlinx.coroutines.future.await
13+
import kotlinx.coroutines.runBlocking
1214

1315
@Service(Service.Level.PROJECT)
1416
class RobotCodeLanguageServerManager(private val project: Project) {
@@ -60,6 +62,15 @@ class RobotCodeLanguageServerManager(private val project: Project) {
6062
start()
6163
}
6264

65+
fun clearCacheAndRestart() {
66+
runBlocking {
67+
val server = LanguageServerManager.getInstance(project).getLanguageServer(LANGUAGE_SERVER_ID).await()
68+
(server?.server as RobotCodeServerApi).clearCache()?.await()
69+
70+
restart()
71+
}
72+
}
73+
6374
val status: ServerStatus?
6475
get() {
6576
return LanguageServerManager.getInstance(project).getServerStatus(LANGUAGE_SERVER_ID)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package dev.robotcode.robotcode4ij.lsp
2+
3+
import org.eclipse.lsp4j.jsonrpc.services.JsonRequest
4+
import org.eclipse.lsp4j.services.LanguageServer
5+
import java.util.concurrent.CompletableFuture
6+
7+
8+
interface RobotCodeServerApi: LanguageServer {
9+
@JsonRequest("robot/cache/clear") fun clearCache(): CompletableFuture<Void>?
10+
}

intellij-client/src/main/kotlin/dev/robotcode/robotcode4ij/testing/RobotCodeTestManager.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@ import java.util.*
256256
}.get()?.items ?: arrayOf()
257257
} catch (e: Exception) {
258258
thisLogger().warn("Failed to discover test items", e)
259+
testItems = arrayOf()
259260
}
260261

261262
DaemonCodeAnalyzer.getInstance(project).restart()

intellij-client/src/main/resources/META-INF/plugin.xml

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,22 @@
113113
class="dev.robotcode.robotcode4ij.lsp.RobotCodeSemanticTokensColorsProvider"/>
114114
</extensions>
115115
<actions>
116-
<action id="dev.robotcode.robotcode4ij.actions.RobotCreateFileAction"
117-
class="dev.robotcode.robotcode4ij.actions.RobotCreateFileAction">
116+
<action id="dev.robotcode.robotcode4ij.actions.RobotCodeCreateFileAction"
117+
class="dev.robotcode.robotcode4ij.actions.RobotCodeCreateFileAction">
118118
<add-to-group group-id="NewGroup" anchor="before" relative-to-action="NewFile"/>
119119
</action>
120+
<group id="dev.robotcode.robotcode4ij.actions" text="RobotCode"
121+
icon="dev.robotcode.robotcode4ij.RobotIcons.RobotCode" description="Tools for RobotCode" popup="true">
122+
<add-to-group group-id="ToolsMenu" anchor="last"/>
123+
124+
<action class="dev.robotcode.robotcode4ij.actions.RobotCodeRestartLanguageServerAction"
125+
id="dev.robotcode.robotcode4ij.actions.RobotCodeRestartLanguageServerAction"
126+
text="Restart RobotCode Language Server"/>
127+
<action class="dev.robotcode.robotcode4ij.actions.RobotCodeClearCacheAndRestartLanguageServerAction"
128+
id="dev.robotcode.robotcode4ij.actions.RobotCodeClearCacheAndRestartLanguageServerAction"
129+
text="Clear Cache and Restart RobotCode Language Server"/>
130+
</group>
131+
120132
</actions>
121133

122134
<applicationListeners>

0 commit comments

Comments
 (0)