Skip to content

Commit 10d9d87

Browse files
committed
feat(java, javascript): add type resolution in test and fix return type handling
- Add type resolution in `JavaClassContextTest.kt` to resolve the type of function parameters in a Java class. - Fix return type handling in `JSWriteTestService.kt` to correctly resolve the return type of a JavaScript function.
1 parent 44337f7 commit 10d9d87

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

java/src/test/kotlin/cc/unitmesh/idea/context/JavaClassContextTest.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ class BlogController {
116116
assertEquals(
117117
context.format(),
118118
"""
119+
|path: /src/cc/unitmesh/untitled/demo/service/BlogService.java
119120
|language: Java
120121
|fun name: createBlog
121122
|fun signature: public BlogPost createBlog(BlogPost blogDto)

javascript/src/main/kotlin/cc/unitmesh/ide/javascript/provider/testing/JSWriteTestService.kt

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -93,27 +93,44 @@ class JSWriteTestService : WriteTestService() {
9393
private fun resolveByFunction(jsFunction: JSFunction): Map<String, ClassContext> {
9494
val result = mutableMapOf<String, ClassContext>()
9595
jsFunction.parameterList?.parameters?.map {
96-
96+
it.typeElement?.let { typeElement ->
97+
resolveByType(typeElement, it.typeElement!!.text)
98+
}
9799
}
98100

99-
val returnType = jsFunction.returnTypeElement
101+
result += jsFunction.returnTypeElement?.let {
102+
resolveByType(it, jsFunction.returnType!!.resolvedTypeText)
103+
} ?: emptyMap()
104+
105+
return result
106+
}
107+
108+
private fun resolveByType(
109+
returnType: PsiElement?,
110+
typeName: String
111+
): MutableMap<String, ClassContext> {
112+
val result = mutableMapOf<String, ClassContext>()
100113
when (returnType) {
101114
is TypeScriptSingleType -> {
102-
val typeName = jsFunction.returnType!!.resolvedTypeText
103-
104115
val resolveReferenceLocally = JSStubBasedPsiTreeUtil.resolveLocally(
105116
typeName,
106117
returnType
107118
)
108119

109-
when(resolveReferenceLocally) {
120+
when (resolveReferenceLocally) {
110121
is TypeScriptInterface -> {
111-
JavaScriptClassContextBuilder().getClassContext(resolveReferenceLocally, false)?.let {
112-
result += mapOf(typeName to it)
113-
}
122+
JavaScriptClassContextBuilder().getClassContext(resolveReferenceLocally, false)?.let {
123+
result += mapOf(typeName to it)
124+
}
125+
}
126+
else -> {
127+
println("resolveReferenceLocally is not TypeScriptInterface")
114128
}
115129
}
116130
}
131+
else -> {
132+
println("returnType is not TypeScriptSingleType")
133+
}
117134
}
118135

119136
return result

0 commit comments

Comments
 (0)