Skip to content

Commit 653a92b

Browse files
committed
refactor: udpate for basic codes in tesintg
1 parent 31907a6 commit 653a92b

File tree

6 files changed

+54
-33
lines changed

6 files changed

+54
-33
lines changed

docs/development/test-prompts.md

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ You MUST use given-when-then style.
2121
| This project uses JUnit 5, you should import `org.junit.jupiter.api.Test` and use `@Test` annotation.- You MUST use MockMvc and test API only.
2222
- Use appropriate Spring test annotations such as `@MockBean`, `@Autowired`, `@WebMvcTest`, `@DataJpaTest`, `@AutoConfigureTestDatabase`, `@AutoConfigureMockMvc`, `@SpringBootTest` etc.
2323

24+
2425
// here are related classes:
2526
// 'filePath: /Users/phodal/IdeaProjects/untitled/src/main/java/cc/unitmesh/untitled/demo/service/BlogService.java
2627
// class BlogService {
@@ -30,16 +31,35 @@ You MUST use given-when-then style.
3031
// + public BlogPost updateBlog(Long id, BlogPost blogDto)
3132
// + public void deleteBlog(Long id)
3233
// }
34+
// 'filePath: null
35+
// class CreateBlogRequest {
36+
//
37+
//
38+
// }
39+
// 'filePath: null
40+
// class BlogPost {
41+
// id
42+
// + public BlogPost(String title, String content, String author);
43+
// + public BlogPost();
44+
// + public void setId(Long id);
45+
// + public Long getId();
46+
// + public String getTitle();
47+
// + public void setTitle(String title);
48+
// + public String getContent();
49+
// + public void setContent(String content);
50+
// + public String getAuthor();
51+
// + public void setAuthor(String author);
52+
// }
3353
```java
3454
@ApiOperation(value = "Create a new blog")
35-
@PostMapping("/")
36-
public BlogPost createBlog(@RequestBody CreateBlogRequest request) {
37-
CreateBlogResponse response = new CreateBlogResponse();
38-
BlogPost blogPost = new BlogPost();
39-
BeanUtils.copyProperties(request, blogPost);
40-
BlogPost createdBlog = blogService.createBlog(blogPost);
41-
BeanUtils.copyProperties(createdBlog, response);
42-
return createdBlog;
43-
}
55+
@PostMapping("/")
56+
public BlogPost createBlog(@RequestBody CreateBlogRequest request) {
57+
CreateBlogResponse response = new CreateBlogResponse();
58+
BlogPost blogPost = new BlogPost();
59+
BeanUtils.copyProperties(request, blogPost);
60+
BlogPost createdBlog = blogService.createBlog(blogPost);
61+
BeanUtils.copyProperties(createdBlog, response);
62+
return createdBlog;
63+
}
4464
```
4565
Start test code with `@Test` syntax here:

java/src/main/kotlin/cc/unitmesh/idea/context/JavaClassContextBuilder.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,11 @@ class JavaClassContextBuilder : ClassContextBuilder {
1616
val fields = psiElement.fields.toList()
1717
val methods = psiElement.methods.toList()
1818

19-
val destination = ArrayList<String>()
20-
for (element in supers) {
21-
val name = element.name
22-
if (name != null) destination.add(name)
23-
}
19+
val superClasses = supers.mapNotNull { it.name }
2420

2521
val usages =
2622
if (gatherUsages) JavaContextCollection.findUsages(psiElement as PsiNameIdentifierOwner) else emptyList()
2723

28-
return ClassContext(psiElement, psiElement.text, psiElement.name, methods, fields, destination, usages)
24+
return ClassContext(psiElement, psiElement.text, psiElement.name, methods, fields, superClasses, usages)
2925
}
3026
}

java/src/main/kotlin/cc/unitmesh/idea/service/JavaRelatedContext.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ object JavaRelatedContext {
6868
return listOf(psiClass.superClass!!, psiClass)
6969
}
7070

71-
return listOf(psiClass)
71+
if (isProjectContent(psiClass)) {
72+
return listOf(psiClass)
73+
}
74+
75+
return emptyList()
7276
}
7377

7478
private fun canBeRemoved(member: PsiMember): Boolean {

java/src/main/kotlin/cc/unitmesh/idea/service/JavaTypeUtil.kt

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,44 +4,46 @@ import com.intellij.psi.*
44
import com.intellij.psi.impl.source.PsiClassReferenceType
55

66
object JavaTypeUtil {
7-
private fun resolveByType(outputType: PsiType?): MutableMap<String, PsiClass?> {
8-
val resolvedClasses = mutableMapOf<String, PsiClass?>()
7+
private fun resolveByType(outputType: PsiType?): Map<String, PsiClass> {
8+
val resolvedClasses = mutableMapOf<String, PsiClass>()
99
if (outputType is PsiClassReferenceType) {
1010
if (outputType.parameters.isNotEmpty()) {
1111
outputType.parameters.forEach {
12-
if (it is PsiClassReferenceType) {
13-
resolvedClasses[it.canonicalText] = outputType.resolve()
12+
if (it is PsiClassReferenceType && outputType.resolve() != null) {
13+
resolvedClasses[it.canonicalText] = outputType.resolve()!!
1414
}
1515
}
1616
}
1717

1818
val canonicalText = outputType.canonicalText
19-
resolvedClasses[canonicalText] = outputType.resolve()
19+
if (outputType.resolve() != null) {
20+
resolvedClasses[canonicalText] = outputType.resolve()!!
21+
}
2022
}
2123

22-
return resolvedClasses
24+
return resolvedClasses.filter { JavaRelatedContext.isProjectContent(it.value) }.toMap()
2325
}
2426

25-
fun resolveByField(element: PsiElement): Map<out String, PsiClass?> {
27+
fun resolveByField(element: PsiElement): Map<String, PsiClass> {
2628
val psiFile = element.containingFile as PsiJavaFile
2729

28-
val resolvedClasses = mutableMapOf<String, PsiClass?>()
30+
val resolvedClasses = mutableMapOf<String, PsiClass>()
2931
psiFile.classes.forEach { psiClass ->
3032
psiClass.fields.forEach { field ->
3133
resolvedClasses.putAll(resolveByType(field.type))
3234
}
3335
}
3436

35-
return resolvedClasses
37+
return resolvedClasses.filter { JavaRelatedContext.isProjectContent(it.value) }.toMap()
3638
}
3739

3840
/**
3941
* The resolved classes include all the classes in the method signature. For example, if the method signature is
4042
* Int, will return Int, but if the method signature is List<Int>, will return List and Int.
4143
* So, remember to filter out the classes that are not needed.
4244
*/
43-
fun resolveByMethod(element: PsiElement): MutableMap<String, PsiClass?> {
44-
val resolvedClasses = mutableMapOf<String, PsiClass?>()
45+
fun resolveByMethod(element: PsiElement): Map<String, PsiClass> {
46+
val resolvedClasses = mutableMapOf<String, PsiClass>()
4547
if (element is PsiMethod) {
4648
element.parameterList.parameters.filter {
4749
it.type is PsiClassReferenceType
@@ -58,6 +60,6 @@ object JavaTypeUtil {
5860
resolvedClasses.putAll(resolveByType(outputType))
5961
}
6062

61-
return resolvedClasses
63+
return resolvedClasses.filter { JavaRelatedContext.isProjectContent(it.value) }.toMap()
6264
}
6365
}

java/src/main/kotlin/cc/unitmesh/idea/service/JavaWriteTestService.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ class JavaWriteTestService : WriteTestService() {
9494
val elements = mutableListOf<ClassContext>()
9595
val projectPath = project.guessProjectDir()?.path
9696

97-
val resolvedClasses: MutableMap<String, PsiClass?> = mutableMapOf()
97+
val resolvedClasses: MutableMap<String, PsiClass> = mutableMapOf()
9898
resolvedClasses.putAll(JavaTypeUtil.resolveByField(element))
9999

100100
when (element) {
@@ -105,16 +105,15 @@ class JavaWriteTestService : WriteTestService() {
105105
}
106106

107107
is PsiMethod -> {
108-
val findRelatedClassesAndCleanUp = JavaRelatedContext.findRelatedClassesAndCleanUp(element)
109-
findRelatedClassesAndCleanUp.forEach { psiClass ->
108+
JavaRelatedContext.findRelatedClassesAndCleanUp(element).forEach { psiClass ->
110109
resolvedClasses[psiClass.name!!] = psiClass
111110
}
112111
}
113112
}
114113

115114
// find the class in the same project
116115
resolvedClasses.forEach { (_, psiClass) ->
117-
val classPath = psiClass?.containingFile?.virtualFile?.path
116+
val classPath = psiClass.containingFile?.virtualFile?.path
118117
if (classPath?.contains(projectPath!!) == true) {
119118
elements += ClassContextProvider(false).from(psiClass)
120119
}

src/main/kotlin/cc/unitmesh/devti/context/ClassContext.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class ClassContext(
3030
"+ $method"
3131
}
3232

33-
val filePath = runReadAction { root.containingFile.virtualFile.path }
33+
val filePath = runReadAction { root.containingFile?.virtualFile?.path }
3434

3535
return """
3636
|'filePath: $filePath

0 commit comments

Comments
 (0)