Skip to content

Commit c33a740

Browse files
committed
feat(amazonq): initialize flare lsp on project start
1 parent 4a29d0e commit c33a740

File tree

2 files changed

+30
-2
lines changed
  • plugins/amazonq

2 files changed

+30
-2
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/startup/AmazonQStartupActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import software.aws.toolkits.jetbrains.core.credentials.ToolkitConnectionManager
1919
import software.aws.toolkits.jetbrains.core.credentials.pinning.QConnection
2020
import software.aws.toolkits.jetbrains.core.gettingstarted.emitUserState
2121
import software.aws.toolkits.jetbrains.services.amazonq.CodeWhispererFeatureConfigService
22+
import software.aws.toolkits.jetbrains.services.amazonq.lsp.AmazonQLspService
2223
import software.aws.toolkits.jetbrains.services.amazonq.project.ProjectContextController
2324
import software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindow
2425
import software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindowFactory
@@ -52,6 +53,7 @@ class AmazonQStartupActivity : ProjectActivity {
5253
CodeWhispererExplorerActionManager.getInstance().setIsFirstRestartAfterQInstall(false)
5354
}
5455
}
56+
AmazonQLspService.getInstance(project)
5557
startLsp(project)
5658
if (runOnce.get()) return
5759
emitUserState(project)

plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import com.intellij.openapi.Disposable
1515
import com.intellij.openapi.components.Service
1616
import com.intellij.openapi.components.service
1717
import com.intellij.openapi.project.Project
18+
import com.intellij.openapi.util.Disposer
1819
import com.intellij.openapi.util.Key
1920
import com.intellij.util.io.await
2021
import kotlinx.coroutines.CoroutineScope
@@ -71,6 +72,32 @@ internal class LSPProcessListener : ProcessListener {
7172

7273
@Service(Service.Level.PROJECT)
7374
class AmazonQLspService(project: Project, private val cs: CoroutineScope) : Disposable {
75+
private var instance: AmazonQServerInstance? = null
76+
77+
init {
78+
cs.launch {
79+
// manage lifecycle RAII-like so we can restart at arbitrary time
80+
// and suppress IDE error if server fails to start
81+
try {
82+
instance = AmazonQServerInstance(cs).also {
83+
Disposer.register(this@AmazonQLspService, it)
84+
}
85+
} catch (e: Exception) {
86+
LOG.warn(e) { "Failed to start LSP server" }
87+
}
88+
}
89+
}
90+
91+
override fun dispose() {
92+
}
93+
94+
companion object {
95+
private val LOG = getLogger<AmazonQLspService>()
96+
fun getInstance(project: Project) = project.service<AmazonQLspService>()
97+
}
98+
}
99+
100+
private class AmazonQServerInstance(cs: CoroutineScope) : Disposable {
74101
private val launcher: Launcher<AmazonQLanguageServer>
75102

76103
private val languageServer: AmazonQLanguageServer
@@ -154,7 +181,6 @@ class AmazonQLspService(project: Project, private val cs: CoroutineScope) : Disp
154181
}
155182

156183
companion object {
157-
private val LOG = getLogger<AmazonQLspService>()
158-
fun getInstance(project: Project) = project.service<AmazonQLspService>()
184+
private val LOG = getLogger<AmazonQServerInstance>()
159185
}
160186
}

0 commit comments

Comments
 (0)