From a1c97bc37c183d6fed50fed52574f624767a9bda Mon Sep 17 00:00:00 2001 From: liuk Date: Sat, 19 Apr 2025 21:32:03 +0800 Subject: [PATCH 1/2] refactor: simplify nested map access and improve readability --- .../continue/CoreMessengerManager.kt | 7 ++----- .../continue/IdeProtocolClient.kt | 14 +++----------- .../editor/InlineEditAction.kt | 9 ++++----- .../editor/VerticalDiffBlock.kt | 3 +-- .../continueintellijextension/utils/Utils.kt | 14 +++++++++++++- 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/CoreMessengerManager.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/CoreMessengerManager.kt index 0ce128e5b8..f3f7f557ed 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/CoreMessengerManager.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/CoreMessengerManager.kt @@ -1,6 +1,7 @@ package com.github.continuedev.continueintellijextension.`continue` import com.github.continuedev.continueintellijextension.services.TelemetryService +import com.github.continuedev.continueintellijextension.utils.castNestedOrNull import com.github.continuedev.continueintellijextension.utils.getMachineUniqueID import com.intellij.ide.plugins.PluginManager import com.intellij.openapi.components.service @@ -59,12 +60,8 @@ class CoreMessengerManager( coreMessenger = CoreMessenger(project, continueCorePath, ideProtocolClient, coroutineScope) coreMessenger?.request("config/getSerializedProfileInfo", null, null) { response -> - val responseObject = response as Map<*, *> - val responseContent = responseObject["content"] as Map<*, *> - val result = responseContent["result"] as Map<*, *> - val config = result["config"] as Map + val allowAnonymousTelemetry = response.castNestedOrNull("content", "result", "config", "allowAnonymousTelemetry") - val allowAnonymousTelemetry = config?.get("allowAnonymousTelemetry") as? Boolean val telemetryService = service() if (allowAnonymousTelemetry == true || allowAnonymousTelemetry == null) { telemetryService.setup(getMachineUniqueID()) diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/IdeProtocolClient.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/IdeProtocolClient.kt index f76a41574f..acbcfae6d8 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/IdeProtocolClient.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/continue/IdeProtocolClient.kt @@ -486,18 +486,10 @@ class IdeProtocolClient( null ) { response -> try { - val responseObject = response as Map<*, *> - val responseContent = responseObject["content"] as Map<*, *> - val result = responseContent["result"] as Map<*, *> - val config = result["config"] as Map<*, *> - - val selectedModels = config["selectedModelByRole"] as? Map<*, *> - var applyCodeBlockModel = selectedModels?.get("apply") as? Map<*, *> - + val selectedModels = response.castNestedOrNull>("content", "result", "config", "selectedModelByRole") + // If "apply" role model is not found, try "chat" role - if (applyCodeBlockModel == null) { - applyCodeBlockModel = selectedModels?.get("chat") as? Map<*, *> - } + val applyCodeBlockModel = selectedModels?.get("apply") ?: selectedModels?.get("chat") if (applyCodeBlockModel != null) { continuation.resume(applyCodeBlockModel) diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/InlineEditAction.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/InlineEditAction.kt index fd910308dc..426c925efa 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/InlineEditAction.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/InlineEditAction.kt @@ -3,6 +3,7 @@ package com.github.continuedev.continueintellijextension.editor import com.github.continuedev.continueintellijextension.`continue`.GetTheme import com.github.continuedev.continueintellijextension.services.ContinueExtensionSettings import com.github.continuedev.continueintellijextension.services.ContinuePluginService +import com.github.continuedev.continueintellijextension.utils.castNestedOrNull import com.github.continuedev.continueintellijextension.utils.getMetaKeyLabel import com.github.continuedev.continueintellijextension.utils.getShiftKeyLabel import com.intellij.openapi.Disposable @@ -130,11 +131,9 @@ fun openInlineEdit(project: Project?, editor: Editor) { val modelTitles = mutableListOf() continuePluginService.coreMessenger?.request("config/getSerializedProfileInfo", null, null) { response -> - val content = (response as Map)["content"] as Map - val result = content["result"] as Map - val config = result["config"] as Map - val models = config["models"] as List> - modelTitles.addAll(models.map { it["title"] as String }) + response.castNestedOrNull>("content", "result", "config", "modelsByRole", "chat") + ?.mapNotNull { it.castNestedOrNull("title") } + ?.let(modelTitles::addAll) } // This is a hacky way to not complicate getting model titles with coroutines diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/VerticalDiffBlock.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/VerticalDiffBlock.kt index 035c52db8a..20e8624ac0 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/VerticalDiffBlock.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/VerticalDiffBlock.kt @@ -73,8 +73,7 @@ class VerticalDiffBlock( deletedLines.add(deletedText.trimEnd()) - // Unable to ensure that text length has not changed, so we need to get it again - editor.document.deleteString(startOffset, min(endOffset, editor.document.textLength)) + editor.document.deleteString(startOffset, endOffset) } diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/utils/Utils.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/utils/Utils.kt index 7e90ba99e9..a26695b4e3 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/utils/Utils.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/utils/Utils.kt @@ -80,4 +80,16 @@ fun uuid(): String { return UUID.randomUUID().toString() } -fun VirtualFile.toUriOrNull(): String? = fileSystem.getNioPath(this)?.toUri()?.toString()?.removeSuffix("/") \ No newline at end of file +fun VirtualFile.toUriOrNull(): String? = fileSystem.getNioPath(this)?.toUri()?.toString()?.removeSuffix("/") + +inline fun Any?.castNestedOrNull(vararg keys: String): T? { + return getNestedOrNull(*keys) as? T +} + +fun Any?.getNestedOrNull(vararg keys: String): Any? { + var result = this + for (key in keys) { + result = (result as? Map<*, *>)?.get(key) ?: return null + } + return result +} \ No newline at end of file From 52b1704f3c0fe991b32959d04c660fe55e899b2c Mon Sep 17 00:00:00 2001 From: liuk Date: Sat, 3 May 2025 02:26:40 +0800 Subject: [PATCH 2/2] feat: improve model retrieval logic in InlineEditAction --- .../continueintellijextension/editor/InlineEditAction.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/InlineEditAction.kt b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/InlineEditAction.kt index 9c27031739..2766c24871 100644 --- a/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/InlineEditAction.kt +++ b/extensions/intellij/src/main/kotlin/com/github/continuedev/continueintellijextension/editor/InlineEditAction.kt @@ -131,7 +131,9 @@ fun openInlineEdit(project: Project?, editor: Editor) { val modelTitles = mutableListOf() continuePluginService.coreMessenger?.request("config/getSerializedProfileInfo", null, null) { response -> - response.castNestedOrNull>("content", "result", "config", "modelsByRole", "edit") + val modelsByRole = response.castNestedOrNull>("content", "result", "config", "modelsByRole") ?: return@request + val role = if (modelsByRole.containsKey("edit")) "edit" else "chat" + modelsByRole.castNestedOrNull>(role) ?.mapNotNull { it.castNestedOrNull("title") } ?.let(modelTitles::addAll) }