Skip to content

Commit

Permalink
feat: can provider genericity parameter to LLM when generate test
Browse files Browse the repository at this point in the history
  • Loading branch information
jialiu-github committed Apr 19, 2024
1 parent 1cdd5e6 commit 65e5117
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
28 changes: 24 additions & 4 deletions java/src/main/kotlin/cc/unitmesh/idea/service/JavaTypeUtil.kt
Expand Up @@ -49,10 +49,16 @@ object JavaTypeUtil {
element.parameterList.parameters.filter {
it.type is PsiClassReferenceType
}.map {
val resolve = (it.type as PsiClassReferenceType).resolve() ?: return@map null
if (!isProjectContent(resolve)) {
return@map null
}
val type = it.type as PsiClassReferenceType
val resolve: PsiClass = type.resolve() ?: return@map null
val typeParametersTypeList: List<PsiType> = getTypeParametersType(type)

val relatedClass = mutableListOf(it.type)
relatedClass.addAll(typeParametersTypeList)

relatedClass
.filter { isProjectContent((it as PsiClassReferenceType).resolve() ?: return@filter false) }
.forEach { resolvedClasses.putAll(resolveByType(it)) }

resolvedClasses[it.name] = resolve
}
Expand All @@ -63,6 +69,20 @@ object JavaTypeUtil {

return resolvedClasses.filter { isProjectContent(it.value) }.toMap()
}

private fun getTypeParametersType(
psiType: PsiClassReferenceType
): List<PsiType> {
val result = psiType.resolveGenerics()
val psiClass = result.element;
if (psiClass != null) {
val substitutor = result.substitutor
return psiClass.typeParameters.map {
substitutor.substitute(it)
}.filterNotNull()
}
return emptyList()
}
}

fun isProjectContent(element: PsiElement): Boolean {
Expand Down
4 changes: 3 additions & 1 deletion src/main/resources/genius/en/code/test-gen.vm
Expand Up @@ -3,10 +3,12 @@ Write unit test for following ${context.lang} code.
${context.frameworkContext}

#if( $context.relatedClasses.length() > 0 )
Here is the relate code maybe you can use
${context.relatedClasses}
#end

#if( $context.currentClass.length() > 0 )
Here is current class information:
This is the class where the source code resides:
${context.currentClass}
#end

Expand Down

0 comments on commit 65e5117

Please sign in to comment.