diff --git a/java/src/main/kotlin/cc/unitmesh/idea/actions/ExplainBusinessAction.kt b/java/src/main/kotlin/cc/unitmesh/idea/actions/ExplainBusinessAction.kt index 1e68aee0f2..225c9483a7 100644 --- a/java/src/main/kotlin/cc/unitmesh/idea/actions/ExplainBusinessAction.kt +++ b/java/src/main/kotlin/cc/unitmesh/idea/actions/ExplainBusinessAction.kt @@ -18,6 +18,7 @@ import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.Task import com.intellij.openapi.progress.impl.BackgroundableProcessIndicator import com.intellij.openapi.project.Project +import com.intellij.openapi.util.NlsSafe import com.intellij.psi.PsiFile import com.intellij.psi.PsiMethod @@ -47,22 +48,21 @@ class ExplainBusinessAction : AbstractChatIntention() { val task: Task.Backgroundable = object : Task.Backgroundable(project, "Collect context") { override fun run(indicator: ProgressIndicator) { - val instruction = actionType.instruction(lang) - + // prepare context val contextItems = when (element) { is PsiMethod -> { - val javaMethodContextBuilder = JavaMethodContextBuilder() val methodContext = ReadAction.compute { - return@compute javaMethodContextBuilder.getMethodContext( + return@compute JavaMethodContextBuilder().getMethodContext( creationContext.element as PsiMethod, true, gatherUsages = true ) } + // collect usages should run in [ProgressIndicator] methodContext?.let { - val toQuery = ReadAction.compute { return@compute it.toQuery() } - .lines() - .joinToString("// $it\n") + val toQuery = ReadAction.compute { + return@compute it.toQuery() + } val contextItem = ChatContextItem(ExplainBusinessAction::class, toQuery) listOf(contextItem) } ?: emptyList() @@ -73,26 +73,37 @@ class ExplainBusinessAction : AbstractChatIntention() { } } - var chatContext = "" - contextItems.forEach { - chatContext += it.text - } - - if (chatContext.isEmpty()) { - chatContext = selectedText - } else { - chatContext = "// Compare this snippet $chatContext\norigin code:\n```$lang$selectedText```\n" - } - - ApplicationManager.getApplication().invokeLater { - sendToChatWindow(project, getActionType()) { contentPanel, _ -> - contentPanel.setInput("\n$instruction\n```markdown\n$chatContext") - } - } + val instruction = actionType.instruction(lang) + sendToChat(contextItems, selectedText, lang, project, instruction) } } ProgressManager.getInstance().runProcessWithProgressAsynchronously(task, BackgroundableProcessIndicator(task)) } + + private fun sendToChat( + contextItems: List, + selectedText: @NlsSafe String, + lang: @NlsSafe String, + project: Project, + instruction: String, + ) { + var chatContext = "\n" + contextItems.forEach { + chatContext += it.text + } + + ApplicationManager.getApplication().invokeLater { + if (chatContext.isEmpty()) { + chatContext = selectedText + } else { + chatContext = "// Compare this snippet $chatContext\norigin code:\n```$lang$selectedText```\n" + } + + sendToChatWindow(project, getActionType()) { contentPanel, _ -> + contentPanel.setInput("\n$instruction\n```markdown\n$chatContext") + } + } + } } diff --git a/java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JvmAutoDevFlow.kt b/java/src/main/kotlin/cc/unitmesh/idea/flow/JvmAutoDevFlow.kt similarity index 98% rename from java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JvmAutoDevFlow.kt rename to java/src/main/kotlin/cc/unitmesh/idea/flow/JvmAutoDevFlow.kt index f508f2061c..257c759571 100644 --- a/java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JvmAutoDevFlow.kt +++ b/java/src/main/kotlin/cc/unitmesh/idea/flow/JvmAutoDevFlow.kt @@ -1,4 +1,4 @@ -package cc.unitmesh.idea.flow.provider +package cc.unitmesh.idea.flow import cc.unitmesh.devti.AutoDevBundle import cc.unitmesh.devti.context.model.DtClass @@ -12,8 +12,6 @@ import cc.unitmesh.devti.parser.parseCodeFromString import cc.unitmesh.devti.provider.DevFlowProvider import cc.unitmesh.devti.provider.PromptStrategy import cc.unitmesh.devti.runconfig.AutoDevRunProfileState -import cc.unitmesh.idea.flow.JavaCodeProcessor -import cc.unitmesh.idea.flow.JavaParseUtil import cc.unitmesh.idea.spring.JavaSpringCodeCreator import com.intellij.openapi.application.runReadAction import com.intellij.openapi.components.service diff --git a/java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JavaContextPrompter.kt b/java/src/main/kotlin/cc/unitmesh/idea/promting/JavaContextPrompter.kt similarity index 99% rename from java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JavaContextPrompter.kt rename to java/src/main/kotlin/cc/unitmesh/idea/promting/JavaContextPrompter.kt index e67795514d..303ee4209d 100644 --- a/java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JavaContextPrompter.kt +++ b/java/src/main/kotlin/cc/unitmesh/idea/promting/JavaContextPrompter.kt @@ -1,4 +1,4 @@ -package cc.unitmesh.idea.flow.provider +package cc.unitmesh.idea.promting import cc.unitmesh.devti.context.chunks.SimilarChunksWithPaths import cc.unitmesh.devti.gui.chat.ChatActionType diff --git a/java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JvmPromptStrategy.kt b/java/src/main/kotlin/cc/unitmesh/idea/promting/JvmPromptStrategy.kt similarity index 99% rename from java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JvmPromptStrategy.kt rename to java/src/main/kotlin/cc/unitmesh/idea/promting/JvmPromptStrategy.kt index 87937027ff..4d18605b70 100644 --- a/java/src/main/kotlin/cc/unitmesh/idea/flow/provider/JvmPromptStrategy.kt +++ b/java/src/main/kotlin/cc/unitmesh/idea/promting/JvmPromptStrategy.kt @@ -1,4 +1,4 @@ -package cc.unitmesh.idea.flow.provider +package cc.unitmesh.idea.promting import cc.unitmesh.devti.context.model.DtClass import cc.unitmesh.devti.provider.PromptStrategy diff --git a/java/src/main/resources/cc.unitmesh.idea.xml b/java/src/main/resources/cc.unitmesh.idea.xml index 616dbc71a5..0b3ce25ba7 100644 --- a/java/src/main/resources/cc.unitmesh.idea.xml +++ b/java/src/main/resources/cc.unitmesh.idea.xml @@ -27,13 +27,13 @@ + implementation="cc.unitmesh.idea.promting.JavaContextPrompter"/> + implementation="cc.unitmesh.idea.flow.JvmAutoDevFlow"/> + implementation="cc.unitmesh.idea.promting.JvmPromptStrategy"/>