Skip to content

Commit

Permalink
feat(provider): add KotlinTestDataBuilder implementation
Browse files Browse the repository at this point in the history
This commit adds the implementation of the KotlinTestDataBuilder class in the Kotlin provider package. The KotlinTestDataBuilder class implements the TestDataBuilder interface and provides the logic for building inbound data for Kotlin elements.
  • Loading branch information
phodal committed Jan 9, 2024
1 parent 582b337 commit 559fcd4
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 12 deletions.
Expand Up @@ -3,6 +3,7 @@ package cc.unitmesh.idea.prompting
import cc.unitmesh.devti.custom.action.CustomPromptConfig
import cc.unitmesh.devti.gui.chat.ChatActionType
import cc.unitmesh.devti.provider.ContextPrompter
import cc.unitmesh.devti.provider.TestDataBuilder
import cc.unitmesh.devti.provider.context.ChatCreationContext
import cc.unitmesh.devti.provider.context.ChatOrigin
import cc.unitmesh.devti.settings.AutoDevSettingsState
Expand All @@ -20,7 +21,9 @@ import com.intellij.temporary.similar.chunks.SimilarChunksWithPaths
import kotlinx.coroutines.runBlocking

open class JavaContextPrompter : ContextPrompter() {
private var additionContext: String = ""
protected var additionContext: String = ""
protected open val testDataBuilder: TestDataBuilder = JavaTestDataBuilder()

private val autoDevSettingsState = AutoDevSettingsState.getInstance()
private var customPromptConfig: CustomPromptConfig? = null
private lateinit var mvcContextService: MvcContextService
Expand Down Expand Up @@ -130,14 +133,12 @@ open class JavaContextPrompter : ContextPrompter() {
return prompt
}

private fun prepareDataStructure(creationContext: ChatCreationContext) {
open fun prepareDataStructure(creationContext: ChatCreationContext) {
val element = creationContext.element ?: return logger.error("element is null")

val testDataBuilder = JavaTestDataBuilder()
testDataBuilder.inBoundData(element).forEach { (_, value) ->
testDataBuilder.inboundData(element).forEach { (_, value) ->
additionContext += "//request body info: \n$value\n"
}
testDataBuilder.outBoundData(element).forEach { (_, value) ->
testDataBuilder.outboundData(element).forEach { (_, value) ->
additionContext += "//response info: \n$value\n"
}
}
Expand Down
Expand Up @@ -6,16 +6,15 @@ import com.intellij.openapi.util.NlsSafe
import com.intellij.psi.*
import com.intellij.psi.impl.source.PsiClassReferenceType

class JavaTestDataBuilder : TestDataBuilder {
override fun inBoundData(element: PsiElement): Map<String, String> {
open class JavaTestDataBuilder : TestDataBuilder {
override fun inboundData(element: PsiElement): Map<String, String> {
if (element !is PsiMethod) return emptyMap()

val result = mutableMapOf<String, String>()
val parameters = element.parameterList.parameters
for (parameter in parameters) {
result += handleFromType(parameter)
}

return result
}

Expand Down Expand Up @@ -57,7 +56,7 @@ class JavaTestDataBuilder : TestDataBuilder {
return result
}

override fun outBoundData(element: PsiElement): Map<String, String> {
override fun outboundData(element: PsiElement): Map<String, String> {
if (element !is PsiMethod) return emptyMap()

val result = mutableMapOf<String, String>()
Expand Down
Expand Up @@ -3,4 +3,6 @@ package cc.unitmesh.kotlin.provider
import cc.unitmesh.idea.prompting.JavaContextPrompter

class KotlinContextPrompter: JavaContextPrompter() {
override val testDataBuilder = KotlinTestDataBuilder()

}
@@ -0,0 +1,35 @@
package cc.unitmesh.kotlin.provider

import cc.unitmesh.devti.provider.TestDataBuilder
import com.intellij.openapi.util.NlsSafe
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.KtParameter

class KotlinTestDataBuilder : TestDataBuilder {
override fun inboundData(element: PsiElement): Map<String, String> {
if (element !is KtNamedFunction) return emptyMap()

val result = mutableMapOf<String, String>()
val parameters = element.valueParameters
for (parameter in parameters) {
result += handleFromType(parameter)
}
return result
}

private fun handleFromType(parameter: KtParameter): Map<@NlsSafe String, String> {
when (val type = parameter.typeReference?.typeElement) {
is KtClass -> processingClassType(type)
}

return emptyMap()
}


private fun processingClassType(type: KtClass): Map<@NlsSafe String, String> {
val result = mutableMapOf<String, String>()
return result
}
}
3 changes: 3 additions & 0 deletions kotlin/src/main/resources/cc.unitmesh.kotlin.xml
Expand Up @@ -14,6 +14,9 @@
<livingDocumentation language="kotlin"
implementationClass="cc.unitmesh.kotlin.provider.KotlinLivingDocumentation"/>

<testDataBuilder language="kotlin"
implementationClass="cc.unitmesh.kotlin.provider.KotlinTestDataBuilder"/>

<classContextBuilder language="kotlin"
implementationClass="cc.unitmesh.kotlin.context.KotlinClassContextBuilder"/>

Expand Down
4 changes: 2 additions & 2 deletions src/main/kotlin/cc/unitmesh/devti/provider/TestDataBuilder.kt
Expand Up @@ -5,9 +5,9 @@ import com.intellij.lang.LanguageExtension
import com.intellij.psi.PsiElement

interface TestDataBuilder {
fun inBoundData(element: PsiElement): Map<String, String> = mapOf()
fun inboundData(element: PsiElement): Map<String, String> = mapOf()

fun outBoundData(element: PsiElement): Map<String, String> = mapOf()
fun outboundData(element: PsiElement): Map<String, String> = mapOf()

companion object {
private val languageExtension: LanguageExtension<TestDataBuilder> =
Expand Down

0 comments on commit 559fcd4

Please sign in to comment.