Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import com.intellij.openapi.project.DumbAwareAction
import com.intellij.util.messages.Topic
import software.aws.toolkits.jetbrains.services.amazonq.toolwindow.AmazonQToolWindow
import software.aws.toolkits.resources.AmazonQBundle
import software.aws.toolkits.resources.message
import java.util.EventListener

class QRefreshPanelAction : DumbAwareAction(AmazonQBundle.message("amazonq.refresh.panel"), null, AllIcons.Actions.Refresh) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,13 @@
private val project: Project,
private val scope: CoroutineScope,
) : Disposable {
private var chatPanel = AmazonQPanel(project, scope)

Check warning on line 23 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt#L23

Added line #L23 was not covered by tests

val component
get() = chatPanel.component

Check warning on line 26 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt#L26

Added line #L26 was not covered by tests

fun disposeAndRecreate() {
Disposer.dispose(chatPanel)
chatPanel = AmazonQPanel(project, scope)

Check warning on line 29 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt#L28-L29

Added lines #L28 - L29 were not covered by tests
}

companion object {
Expand All @@ -44,13 +43,13 @@

// Send the interaction message
val window = getInstance(project)
window.chatPanel.sendMessage(OnboardingPageInteraction(OnboardingPageInteractionType.CwcButtonClick), "cwc")

Check warning on line 46 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt#L46

Added line #L46 was not covered by tests
}

fun openScanTab(project: Project) {
showChatWindow(project)
val window = getInstance(project)
window.chatPanel.sendMessageAppToUi(runCodeScanMessage, tabType = "codescan")

Check warning on line 52 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindow.kt#L52

Added line #L52 was not covered by tests
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@
ToolkitConnectionManager.getInstance(project).activeConnectionForFeature(QConnection.getInstance())?.let { qConn ->
openMeetQPage(project)
}
prepareChatContent(project, qPanel)
preparePanelContent(project, qPanel)

Check warning on line 69 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L69

Added line #L69 was not covered by tests
}
}
)
Expand All @@ -75,7 +75,7 @@
RefreshQChatPanelButtonPressedListener.TOPIC,
object : RefreshQChatPanelButtonPressedListener {
override fun onRefresh() {
prepareChatContent(project, qPanel)
preparePanelContent(project, qPanel)

Check warning on line 78 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L78

Added line #L78 was not covered by tests
}
}
)
Expand All @@ -85,8 +85,7 @@
object : BearerTokenProviderListener {
override fun onChange(providerId: String, newScopes: List<String>?) {
if (ToolkitConnectionManager.getInstance(project).connectionStateForFeature(QConnection.getInstance()) == BearerTokenAuthState.AUTHORIZED) {
AmazonQToolWindow.getInstance(project).disposeAndRecreate()
prepareChatContent(project, qPanel)
preparePanelContent(project, qPanel)

Check warning on line 88 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L88

Added line #L88 was not covered by tests
}
}
}
Expand All @@ -98,13 +97,12 @@
// note we name myProject intentionally ow it will shadow the "project" provided by the IDE
override fun onProfileSelected(myProject: Project, profile: QRegionProfile?) {
if (project.isDisposed) return
AmazonQToolWindow.getInstance(project).disposeAndRecreate()
prepareChatContent(project, qPanel)
preparePanelContent(project, qPanel)

Check warning on line 100 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L100

Added line #L100 was not covered by tests
}
}
)

prepareChatContent(project, qPanel)
preparePanelContent(project, qPanel)

Check warning on line 105 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQToolWindowFactory.kt#L105

Added line #L105 was not covered by tests

val content = contentManager.factory.createContent(mainPanel, null, false).also {
it.isCloseable = true
Expand All @@ -114,7 +112,7 @@
contentManager.addContent(content)
}

private fun prepareChatContent(
private fun preparePanelContent(
project: Project,
qPanel: Wrapper,
) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@
import kotlinx.coroutines.runBlocking
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AsyncChatUiListener
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.FlareUiMessage
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GENERIC_COMMAND
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.GenericCommandParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_TO_PROMPT
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendToPromptParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TriggerType
import software.aws.toolkits.jetbrains.services.amazonq.messages.AmazonQMessage
Expand All @@ -27,32 +29,28 @@

fun reportMessageClick(command: EditorContextCommand, project: Project) {
if (command == EditorContextCommand.GenerateUnitTests) {
AsyncChatUiListener.notifyPartialMessageUpdate(Gson().toJson(TestCommandMessage()))
} else {

Check warning on line 33 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt#L32-L33

Added lines #L32 - L33 were not covered by tests
// new agentic chat route
ApplicationManager.getApplication().executeOnPooledThread {
runBlocking {
val contextExtractor = ActiveFileContextExtractor.create(fqnWebviewAdapter = null, project = project)
val fileContext = contextExtractor.extractContextForTrigger(ExtractionTriggerType.ContextMenu)

Check warning on line 38 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt#L35-L38

Added lines #L35 - L38 were not covered by tests
val codeSelection = "\n```\n${fileContext.focusAreaContext?.codeSelection?.trimIndent()?.trim()}\n```\n"
var uiMessage: FlareUiMessage? = null

Check warning on line 40 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt#L40

Added line #L40 was not covered by tests
if (command.verb != "sendToPrompt") {
if (command.verb != SEND_TO_PROMPT) {
val params = GenericCommandParams(selection = codeSelection, triggerType = TriggerType.CONTEXT_MENU, genericCommand = command.name)
uiMessage = FlareUiMessage(command = "genericCommand", params = params)
uiMessage = FlareUiMessage(command = GENERIC_COMMAND, params = params)

Check warning on line 43 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt#L42-L43

Added lines #L42 - L43 were not covered by tests
} else {
val params = SendToPromptParams(selection = codeSelection, triggerType = TriggerType.CONTEXT_MENU)
uiMessage = FlareUiMessage(command = "sendToPrompt", params = params)
uiMessage = FlareUiMessage(command = SEND_TO_PROMPT, params = params)

Check warning on line 46 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt#L45-L46

Added lines #L45 - L46 were not covered by tests
}
AsyncChatUiListener.notifyPartialMessageUpdate(uiMessage)
}
}

Check warning on line 50 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/ActionRegistrar.kt#L48-L50

Added lines #L48 - L50 were not covered by tests
}
}

fun reportMessageClick(command: EditorContextCommand, issue: MutableMap<String, String>, project: Project) {
_messages.tryEmit(CodeScanIssueActionMessage(command, issue, project))
}

// provide singleton access
companion object {
val instance = ActionRegistrar()
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,55 @@

package software.aws.toolkits.jetbrains.services.cwc.commands.codescan.actions

import software.aws.toolkits.jetbrains.services.cwc.commands.EditorContextCommand
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import com.intellij.openapi.actionSystem.DataKey
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.DumbAware
import kotlinx.coroutines.runBlocking
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.AsyncChatUiListener
import software.aws.toolkits.jetbrains.services.amazonq.lsp.flareChat.FlareUiMessage
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.ChatPrompt
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SEND_TO_PROMPT
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.SendToPromptParams
import software.aws.toolkits.jetbrains.services.amazonq.lsp.model.aws.chat.TriggerType

class ExplainCodeIssueAction : CodeScanQActions(EditorContextCommand.ExplainCodeScanIssue)
class ExplainCodeIssueAction : AnAction(), DumbAware {

Check warning on line 20 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt#L20

Added line #L20 was not covered by tests
override fun actionPerformed(e: AnActionEvent) {
val issueDataKey = DataKey.create<MutableMap<String, String>>("amazonq.codescan.explainissue")

Check warning on line 22 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt#L22

Added line #L22 was not covered by tests
val issueContext = e.getData(issueDataKey) ?: return

ActionManager.getInstance().getAction("q.openchat").actionPerformed(e)

Check warning on line 25 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt#L25

Added line #L25 was not covered by tests

ApplicationManager.getApplication().executeOnPooledThread {

Check warning on line 27 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt#L27

Added line #L27 was not covered by tests
runBlocking {
// https://github.com/aws/aws-toolkit-vscode/blob/master/packages/amazonq/src/lsp/chat/commands.ts#L30
val codeSelection = "\n```\n${issueContext["code"]?.trimIndent()?.trim()}\n```\n"

val prompt = "Explain the issue \n\n " +
"Issue: \"${issueContext["title"]}\" \n" +
"Code: $codeSelection"

Check warning on line 34 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt#L32-L34

Added lines #L32 - L34 were not covered by tests

val modelPrompt = "Explain the issue ${issueContext["title"]} \n\n " +
"Issue: \"${issueContext["title"]}\" \n" +
"Description: ${issueContext["description"]} \n" +
"Code: $codeSelection and generate the code demonstrating the fix"

Check warning on line 39 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt#L36-L39

Added lines #L36 - L39 were not covered by tests

val params = SendToPromptParams(
selection = codeSelection,
triggerType = TriggerType.CONTEXT_MENU,
prompt = ChatPrompt(
prompt = prompt,
escapedPrompt = modelPrompt,
command = null

Check warning on line 47 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt#L41-L47

Added lines #L41 - L47 were not covered by tests
),
autoSubmit = true

Check warning on line 49 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt#L49

Added line #L49 was not covered by tests
)

val uiMessage = FlareUiMessage(SEND_TO_PROMPT, params)
AsyncChatUiListener.notifyPartialMessageUpdate(uiMessage)
}
}
}

Check warning on line 56 in plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/cwc/commands/codescan/actions/ExplainCodeIssueAction.kt#L52-L56

Added lines #L52 - L56 were not covered by tests
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@
val fileName = getFileName(psiFile)
val programmingLanguage = psiFile.programmingLanguage()
val fileRelativePath = getRelativePathToContentRoot(editor)
return FileContextInfo(caretContext, fileName, programmingLanguage, fileRelativePath)
val fileUri = getFileUri(psiFile)
return FileContextInfo(caretContext, fileName, programmingLanguage, fileRelativePath, fileUri)

Check warning on line 36 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/editor/CodeWhispererEditorUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/editor/CodeWhispererEditorUtil.kt#L35-L36

Added lines #L35 - L36 were not covered by tests
}

fun extractCaretContext(editor: Editor): CaretContext {
Expand Down Expand Up @@ -73,6 +74,11 @@
private fun getFileName(psiFile: PsiFile): String =
psiFile.name.substring(0, psiFile.name.length.coerceAtMost(CodeWhispererConstants.FILENAME_CHARS_LIMIT))

private fun getFileUri(psiFile: PsiFile): String? =
psiFile.virtualFile?.takeIf { it.isValid }?.let { vFile ->
vFile.url.substring(0, vFile.url.length.coerceAtMost(CodeWhispererConstants.FILENAME_CHARS_LIMIT))
}

Check warning on line 80 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/editor/CodeWhispererEditorUtil.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/editor/CodeWhispererEditorUtil.kt#L79-L80

Added lines #L79 - L80 were not covered by tests

fun getRelativePathToContentRoot(editor: Editor): String? =
editor.project?.let { project ->
FileDocumentManager.getInstance().getFile(editor.document)?.let { vFile ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,17 +47,18 @@
val filename: String,
val programmingLanguage: CodeWhispererProgrammingLanguage,
val fileRelativePath: String?,
val fileUri: String?,

Check warning on line 50 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt#L50

Added line #L50 was not covered by tests
)

data class RecommendationContext(
val details: List<DetailContext>,
val userInput: String,

Check warning on line 55 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt#L55

Added line #L55 was not covered by tests
val position: VisualPosition,
)

data class RecommendationContextNew(
val details: MutableList<DetailContext>,
val userInput: String,

Check warning on line 61 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt#L60-L61

Added lines #L60 - L61 were not covered by tests
val position: VisualPosition,
val jobId: Int,
var typeahead: String = "",
Expand All @@ -65,14 +66,14 @@

data class PreviewContext(
val jobId: Int,
val detail: DetailContext,

Check warning on line 69 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt#L69

Added line #L69 was not covered by tests
val userInput: String,
val typeahead: String,
)

data class DetailContext(
val itemId: String,
val completion: InlineCompletionItem,

Check warning on line 76 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt#L75-L76

Added lines #L75 - L76 were not covered by tests
val isDiscarded: Boolean,
val completionType: CodewhispererCompletionType,
var hasSeen: Boolean = false,
Expand Down Expand Up @@ -115,7 +116,7 @@

@RequiresEdt
override fun dispose() {
CodeWhispererTelemetryServiceNew.getInstance().sendUserTriggerDecisionEvent(this.project, this.latencyContext)

Check warning on line 119 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt#L119

Added line #L119 was not covered by tests
setIntelliSensePopupAlpha(editor, 0f)
CodeWhispererInvocationStatusNew.getInstance().setDisplaySessionActive(false)

Expand Down Expand Up @@ -172,14 +173,14 @@
data class WorkerContext(
val requestContext: RequestContext,
val responseContext: ResponseContext,
val completions: InlineCompletionListWithReferences,

Check warning on line 176 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt#L176

Added line #L176 was not covered by tests
val popup: JBPopup,
)

data class WorkerContextNew(
val requestContext: RequestContextNew,
val responseContext: ResponseContext,
val completions: InlineCompletionListWithReferences,

Check warning on line 183 in plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt

View check run for this annotation

Codecov / codecov/patch

plugins/amazonq/codewhisperer/jetbrains-community/src/software/aws/toolkits/jetbrains/services/codewhisperer/model/CodeWhispererModel.kt#L183

Added line #L183 was not covered by tests
)

data class CodeScanTelemetryEvent(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ class CodeWhispererServiceTest : CodeWhispererTestBase() {
CaretContext(leftFileContext = "", rightFileContext = "public class Main {}", leftContextOnCurrentLine = ""),
"main.java",
CodeWhispererJava.INSTANCE,
"main.java"
"main.java",
file.virtualFile.url
)
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ fun aFileContextInfo(language: CodeWhispererProgrammingLanguage? = null): FileCo
CodeWhispererJava.INSTANCE
).random()

return FileContextInfo(caretContextInfo, fileName, programmingLanguage, fileRelativePath)
return FileContextInfo(caretContextInfo, fileName, programmingLanguage, fileRelativePath, null)
}

fun aTriggerType(): CodewhispererTriggerType =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { ChatItem, MynahIcons } from '@aws/mynah-ui-chat'
export const disclaimerAcknowledgeButtonId = 'amazonq-disclaimer-acknowledge-button-id'
export const disclaimerCard: Partial<ChatItem> = {
messageId: 'amazonq-disclaimer-card',
body: 'Amazon Q Developer uses generative AI. You may need to verify responses. See the [AWS Responsible AI Policy](https://aws.amazon.com/machine-learning/responsible-ai/policy/). Amazon Q Developer processes data across all US Regions. See [here](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/cross-region-inference.html) for more info. Amazon Q may retain chats to provide and maintain the service.',
body: 'Amazon Q Developer uses generative AI. You may need to verify responses. See the [AWS Responsible AI Policy](https://aws.amazon.com/machine-learning/responsible-ai/policy/). Amazon Q may retain chats to provide and maintain the service. For information on the AWS Regions where Amazon Q may perform inference, see [the documentation](https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/cross-region-processing.html#cross-region-inference).',
buttons: [
{
text: 'Acknowledge',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,16 @@
import com.intellij.util.net.JdkProxyProvider
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Job
import kotlinx.coroutines.async
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.future.asCompletableFuture
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
Expand All @@ -52,6 +56,7 @@
import org.eclipse.lsp4j.jsonrpc.messages.ResponseMessage
import org.eclipse.lsp4j.launch.LSPLauncher
import org.slf4j.event.Level
import software.aws.toolkits.core.utils.debug
import software.aws.toolkits.core.utils.getLogger
import software.aws.toolkits.core.utils.info
import software.aws.toolkits.core.utils.warn
Expand Down Expand Up @@ -119,18 +124,21 @@

@Service(Service.Level.PROJECT)
class AmazonQLspService(private val project: Project, private val cs: CoroutineScope) : Disposable {
private val _flowInstance = MutableSharedFlow<AmazonQServerInstance>(replay = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST)
val instanceFlow = _flowInstance.asSharedFlow().map { it.languageServer }

Check warning on line 128 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L127 - L128 were not covered by tests

private var instance: Deferred<AmazonQServerInstance>
val capabilities
get() = instance.getCompleted().initializeResult.getCompleted().capabilities

val encryptionManager
get() = instance.getCompleted().encryptionManager

Check warning on line 135 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L135 was not covered by tests
private val heartbeatJob: Job
private val restartTimestamps = ArrayDeque<Long>()
private val restartMutex = Mutex() // Separate mutex for restart tracking

Check warning on line 138 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L137 - L138 were not covered by tests

val rawEndpoint
get() = instance.getCompleted().rawEndpoint

Check warning on line 141 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L141 was not covered by tests

// dont allow lsp commands if server is restarting
private val mutex = Mutex(false)
Expand All @@ -141,20 +149,20 @@
var attempts = 0
while (attempts < 3) {
try {
val result = withTimeout(30.seconds) {

Check warning on line 152 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L152 was not covered by tests
val instance = AmazonQServerInstance(project, cs).also {
Disposer.register(this@AmazonQLspService, it)
}
// wait for handshake to complete
instance.initializeResult.join()

instance.also {
_flowInstance.emit(it)
}

Check warning on line 161 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L159 - L161 were not covered by tests
}

// withTimeout can throw
return@async result

Check warning on line 165 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L165 was not covered by tests
} catch (e: Exception) {
LOG.warn(e) { "Failed to start LSP server" }
}
Expand All @@ -166,9 +174,50 @@

init {
instance = start()

// Initialize heartbeat job
heartbeatJob = cs.launch {

Check warning on line 179 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L179 was not covered by tests
while (isActive) {
delay(5.seconds) // Check every 5 seconds
val shouldLoop = checkConnectionStatus()

Check warning on line 182 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L181 - L182 were not covered by tests
if (!shouldLoop) {
break

Check warning on line 184 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L184 was not covered by tests
}
}
}
}

Check warning on line 188 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L187 - L188 were not covered by tests

private suspend fun checkConnectionStatus(): Boolean {
try {
val currentInstance = mutex.withLock { instance }.await()

Check warning on line 192 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L190 - L192 were not covered by tests

// Check if the launcher's Future (startListening) is done
// If it's done, that means the connection has been terminated
if (currentInstance.launcherFuture.isDone) {
LOG.debug { "LSP server connection terminated, checking restart limits" }
val canRestart = checkForRemainingRestartAttempts()

Check warning on line 198 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L197 - L198 were not covered by tests
if (!canRestart) {
return false

Check warning on line 200 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L200 was not covered by tests
}
LOG.debug { "Restarting LSP server" }
restart()

Check warning on line 203 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L202 - L203 were not covered by tests
} else {
LOG.debug { "LSP server is currently running" }

Check warning on line 205 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L205 was not covered by tests
}
} catch (e: Exception) {
LOG.debug(e) { "Connection status check failed, checking restart limits" }
val canRestart = checkForRemainingRestartAttempts()

Check warning on line 209 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L207 - L209 were not covered by tests
if (!canRestart) {
return false

Check warning on line 211 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L211 was not covered by tests
}
LOG.debug { "Restarting LSP server" }
restart()

Check warning on line 214 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L213 - L214 were not covered by tests
}
return true

Check warning on line 216 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L216 was not covered by tests
}

override fun dispose() {
heartbeatJob.cancel()

Check warning on line 220 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L220 was not covered by tests
}

suspend fun restart() = mutex.withLock {
Expand All @@ -195,6 +244,25 @@
instance = start()
}

private suspend fun checkForRemainingRestartAttempts(): Boolean = restartMutex.withLock {
val currentTime = System.currentTimeMillis()

Check warning on line 248 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L247 - L248 were not covered by tests

while (restartTimestamps.isNotEmpty() &&
currentTime - restartTimestamps.first() > RESTART_WINDOW_MS
) {
restartTimestamps.removeFirst()

Check warning on line 253 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L253 was not covered by tests
}

if (restartTimestamps.size < MAX_RESTARTS) {
restartTimestamps.addLast(currentTime)
return true

Check warning on line 258 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L257 - L258 were not covered by tests
}

LOG.info { "Rate limit reached for LSP server restarts. Stop attempting to restart." }

Check warning on line 261 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L261 was not covered by tests

return false

Check warning on line 263 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L263 was not covered by tests
}

suspend fun<T> execute(runnable: suspend AmazonQLspService.(AmazonQLanguageServer) -> T): T {
val lsp = withTimeout(10.seconds) {
val holder = mutex.withLock { instance }.await()
Expand All @@ -212,6 +280,8 @@

companion object {
private val LOG = getLogger<AmazonQLspService>()
private const val MAX_RESTARTS = 5
private const val RESTART_WINDOW_MS = 3 * 60 * 1000
fun getInstance(project: Project) = project.service<AmazonQLspService>()

@Deprecated("Easy to accidentally freeze EDT")
Expand All @@ -230,7 +300,7 @@
}

private class AmazonQServerInstance(private val project: Project, private val cs: CoroutineScope) : Disposable {
val encryptionManager = JwtEncryptionManager()

Check warning on line 303 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L303 was not covered by tests

private val launcher: Launcher<AmazonQLanguageServer>

Expand All @@ -238,10 +308,10 @@
get() = launcher.remoteProxy

val rawEndpoint: RemoteEndpoint
get() = launcher.remoteEndpoint

Check warning on line 311 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L311 was not covered by tests

@Suppress("ForbiddenVoid")
private val launcherFuture: Future<Void>
val launcherFuture: Future<Void>

Check warning on line 314 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L314 was not covered by tests
private val launcherHandler: KillableProcessHandler
val initializeResult: Deferred<InitializeResult>

Expand Down Expand Up @@ -288,18 +358,18 @@

init {
// will cause slow service init, but maybe fine for now. will not block UI since fetch/extract will be under background progress
val artifact = runBlocking { service<ArtifactManager>().fetchArtifact(project) }.toAbsolutePath()

Check warning on line 361 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L361 was not covered by tests

// more network calls
// make assumption that all requests will resolve to the same CA
// also terrible assumption that default endpoint is reachable
val qUri = URI(QDefaultServiceConfig.ENDPOINT)
val rtsTrustChain = TrustChainUtil.getTrustChain(qUri)
val extraCaCerts = Files.createTempFile("q-extra-ca", ".pem").apply {
writeText(
TrustChainUtil.certsToPem(rtsTrustChain)

Check warning on line 370 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L366 - L370 were not covered by tests
)
}

Check warning on line 372 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L372 was not covered by tests

val node = if (SystemInfo.isWindows) "node.exe" else "node"
val cmd = GeneralCommandLine(
Expand All @@ -307,49 +377,49 @@
LspSettings.getInstance().getArtifactPath() ?: artifact.resolve("aws-lsp-codewhisperer.js").toString(),
"--stdio",
"--set-credentials-encryption-key",
).withEnvironment(
buildMap {
put("NODE_EXTRA_CA_CERTS", extraCaCerts.toAbsolutePath().toString())

Check warning on line 382 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L380 - L382 were not covered by tests

val proxy = JdkProxyProvider.getInstance().proxySelector.select(qUri)

Check warning on line 384 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L384 was not covered by tests
// log if only socks proxy available
.firstOrNull { it.type() == Proxy.Type.HTTP }

if (proxy != null) {
val address = proxy.address()

Check warning on line 389 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L389 was not covered by tests
if (address is java.net.InetSocketAddress) {
put(
"HTTPS_PROXY",
URIBuilder("http://${address.hostName}:${address.port}").apply {
val login = HttpConfigurable.getInstance().proxyLogin

Check warning on line 394 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L391 - L394 were not covered by tests
if (login != null) {
setUserInfo(login, HttpConfigurable.getInstance().plainProxyPassword)

Check warning on line 396 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L396 was not covered by tests
}
}.build().toASCIIString()

Check warning on line 398 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L398 was not covered by tests
)
}
}
}

Check warning on line 402 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L402 was not covered by tests
)
.withParentEnvironmentType(GeneralCommandLine.ParentEnvironmentType.CONSOLE)

Check warning on line 404 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L404 was not covered by tests

launcherHandler = KillableColoredProcessHandler.Silent(cmd)
val inputWrapper = LSPProcessListener()
launcherHandler.addProcessListener(inputWrapper)
launcherHandler.startNotify()

launcher = object : LSPLauncher.Builder<AmazonQLanguageServer>() {

Check warning on line 411 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L411 was not covered by tests
override fun getSupportedMethods(): Map<String, JsonRpcMethod> =
super.getSupportedMethods() + AmazonQChatServer.supportedMethods()

Check warning on line 413 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L413 was not covered by tests
}
.wrapMessages { consumer ->
MessageConsumer { message ->

Check warning on line 416 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L415 - L416 were not covered by tests
if (message is ResponseMessage && message.result is AwsExtendedInitializeResult) {
val result = message.result as AwsExtendedInitializeResult
AwsServerCapabilitiesProvider.getInstance(project).setAwsServerCapabilities(result.getAwsServerCapabilities())

Check warning on line 419 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added lines #L418 - L419 were not covered by tests
}
consumer?.consume(message)
}

Check warning on line 422 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L422 was not covered by tests
}
.setLocalService(AmazonQLanguageClientImpl(project))
.setRemoteInterface(AmazonQLanguageServer::class.java)
Expand All @@ -359,7 +429,7 @@

// otherwise Gson treats all numbers as double which causes deser issues
it.setObjectToNumberStrategy(ToNumberPolicy.LONG_OR_DOUBLE)
it.registerTypeAdapterFactory(AmazonQLspTypeAdapterFactory())

Check warning on line 432 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L432 was not covered by tests
}.traceMessages(
PrintWriter(
object : StringWriter() {
Expand All @@ -383,7 +453,7 @@
encryptionManager.writeInitializationPayload(launcherHandler.process.outputStream)

val initializeResult = try {
languageServer.initialize(createInitializeParams()).await()

Check warning on line 456 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L456 was not covered by tests
} catch (e: Exception) {
LOG.warn(e) { "LSP initialization failed" }
null
Expand All @@ -400,7 +470,7 @@
}

// invokeOnCompletion results in weird lock/timeout error
initializeResult.asCompletableFuture().handleAsync { lspInitResult, ex ->

Check warning on line 473 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L473 was not covered by tests
if (ex != null) {
return@handleAsync
}
Expand All @@ -408,7 +478,7 @@
[email protected] {
DefaultAuthCredentialsService(project, encryptionManager, this)
TextDocumentServiceHandler(project, this)
WorkspaceServiceHandler(project, lspInitResult, this)

Check warning on line 481 in plugins/amazonq/shared/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/lsp/AmazonQLspService.kt

View check run for this annotation

Codecov / codecov/patch

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

Added line #L481 was not covered by tests
DefaultModuleDependenciesService(project, this)
}
}
Expand Down
Loading
Loading