diff --git a/core/src/main/kotlin/com/phodal/shirecore/provider/shire/FileCreateService.kt b/core/src/main/kotlin/com/phodal/shirecore/provider/shire/FileCreateService.kt new file mode 100644 index 000000000..5020d22b4 --- /dev/null +++ b/core/src/main/kotlin/com/phodal/shirecore/provider/shire/FileCreateService.kt @@ -0,0 +1,20 @@ +package com.phodal.shirecore.provider.shire + +import com.intellij.lang.Language +import com.intellij.lang.LanguageExtension +import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile + + +interface FileCreateService { + fun createFile(prompt: String, project: Project): VirtualFile? + + companion object { + private val languageExtension: LanguageExtension = + LanguageExtension("com.phodal.shireFileCreateService") + + fun provide(language: Language): FileCreateService? { + return languageExtension.forLanguage(language) + } + } +} \ No newline at end of file diff --git a/core/src/main/kotlin/com/phodal/shirecore/ui/input/ShireInput.kt b/core/src/main/kotlin/com/phodal/shirecore/ui/input/ShireInput.kt index 8df2782f8..1094c5ba0 100644 --- a/core/src/main/kotlin/com/phodal/shirecore/ui/input/ShireInput.kt +++ b/core/src/main/kotlin/com/phodal/shirecore/ui/input/ShireInput.kt @@ -1,14 +1,11 @@ package com.phodal.shirecore.ui.input -import com.intellij.ide.scratch.ScratchFileService -import com.intellij.ide.scratch.ScratchRootType import com.intellij.lang.Language import com.intellij.openapi.Disposable import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile -import com.phodal.shirecore.SHIRE_CHAT_BOX_FILE import com.phodal.shirecore.ShireCoreBundle -import com.phodal.shirecore.ShireCoroutineScope +import com.phodal.shirecore.provider.shire.FileCreateService import com.phodal.shirecore.provider.shire.FileRunService import java.awt.BorderLayout import javax.swing.BorderFactory @@ -33,8 +30,7 @@ class ShireInput(val project: Project) : JPanel(BorderLayout()), Disposable { return } - val virtualFile = - project.getService(ChatBoxShireFileService::class.java).createShireFile(prompt, project) + val virtualFile = getVirtualFile(prompt) this@ShireInput.scratchFile = virtualFile FileRunService.provider(project, virtualFile!!) @@ -45,10 +41,13 @@ class ShireInput(val project: Project) : JPanel(BorderLayout()), Disposable { this.add(inputSection, BorderLayout.CENTER) } - override fun dispose() { - scratchFile?.delete(this) + private fun getVirtualFile(prompt: String): VirtualFile? { + val findLanguageByID = Language.findLanguageByID("Shire") + val provide = FileCreateService.provide(findLanguageByID!!) + return provide!!.createFile(prompt, project) } - companion object { + override fun dispose() { + scratchFile?.delete(this) } } \ No newline at end of file diff --git a/core/src/main/resources/com.phodal.shirecore.xml b/core/src/main/resources/com.phodal.shirecore.xml index 11f82b2b8..f9d78bc94 100644 --- a/core/src/main/resources/com.phodal.shirecore.xml +++ b/core/src/main/resources/com.phodal.shirecore.xml @@ -58,6 +58,12 @@ + + + + diff --git a/core/src/main/kotlin/com/phodal/shirecore/ui/input/ChatBoxShireFileService.kt b/shirelang/src/main/kotlin/com/phodal/shirelang/provider/ChatBoxShireFileCreateService.kt similarity index 69% rename from core/src/main/kotlin/com/phodal/shirecore/ui/input/ChatBoxShireFileService.kt rename to shirelang/src/main/kotlin/com/phodal/shirelang/provider/ChatBoxShireFileCreateService.kt index fe139b3db..81cc95bd6 100644 --- a/core/src/main/kotlin/com/phodal/shirecore/ui/input/ChatBoxShireFileService.kt +++ b/shirelang/src/main/kotlin/com/phodal/shirelang/provider/ChatBoxShireFileCreateService.kt @@ -1,20 +1,25 @@ -package com.phodal.shirecore.ui.input +package com.phodal.shirelang.provider import com.intellij.ide.scratch.ScratchFileService import com.intellij.ide.scratch.ScratchRootType -import com.intellij.openapi.components.Service import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.VirtualFile import com.phodal.shirecore.SHIRE_CHAT_BOX_FILE +import com.phodal.shirecore.config.ShireActionLocation +import com.phodal.shirecore.provider.shire.FileCreateService +import com.phodal.shirelang.actions.base.DynamicShireActionService import org.intellij.lang.annotations.Language -@Service(Service.Level.PROJECT) -class ChatBoxShireFileService(val project: Project) { - private var baseContent: String = "" +class ChatBoxShireFileCreateService : FileCreateService { + override fun createFile(prompt: String, project: Project): VirtualFile? { + val actions = DynamicShireActionService.getInstance(project).getActions(ShireActionLocation.CHAT_BOX) + var baseContent = "" + if (actions.isNotEmpty()) { + baseContent = actions.first().shireFile.text ?: "" + } - fun createShireFile(prompt: String, project: Project): VirtualFile? { if (baseContent.isNotEmpty()) { - return createInputWithBase(prompt, project) + return createInputWithBase(prompt, project, baseContent) } return createInputOnly(prompt, project) @@ -50,6 +55,7 @@ class ChatBoxShireFileService(val project: Project) { private fun createInputWithBase( prompt: String, project: Project, + baseContent: String, ): VirtualFile? { val content = baseContent.replace("\$chatPrompt", prompt) diff --git a/shirelang/src/main/resources/com.phodal.shirelang.xml b/shirelang/src/main/resources/com.phodal.shirelang.xml index 8f356d8e3..c5c54647f 100644 --- a/shirelang/src/main/resources/com.phodal.shirelang.xml +++ b/shirelang/src/main/resources/com.phodal.shirelang.xml @@ -203,6 +203,10 @@ + +