Skip to content

Commit f6cdd9e

Browse files
committed
refactor(java): extract type resolution logic into separate function #257
Move recursive type resolution logic from `resolveByType` to a new private function `resolveTypeReferences` for better readability and maintainability
1 parent 37c8d90 commit f6cdd9e

File tree

2 files changed

+25
-27
lines changed
  • exts/devins-lang/src/main/kotlin/cc/unitmesh/devti/language/completion/dataprovider
  • java/src/main/kotlin/cc/unitmesh/idea/service

2 files changed

+25
-27
lines changed

exts/devins-lang/src/main/kotlin/cc/unitmesh/devti/language/completion/dataprovider/BuiltinCommand.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -51,20 +51,20 @@ enum class BuiltinCommand(
5151
true
5252
),
5353
DIR("dir", "List files and directories in a tree-like structure", AllIcons.Actions.ProjectDirectory, true, true),
54-
LOCAL_SEARCH(
55-
"localSearch",
56-
"Search text in the project will return 5 line before and after",
57-
AllIcons.Actions.Search,
58-
true,
59-
true
60-
),
6154
DATABASE(
6255
"database",
6356
"Read the content of a database, /database:query\n```sql\nSELECT * FROM table\n```",
6457
AllIcons.Toolwindows.ToolWindowHierarchy,
6558
true,
6659
true
6760
),
61+
LOCAL_SEARCH(
62+
"localSearch",
63+
"Search text in the project will return 5 line before and after",
64+
AllIcons.Actions.Search,
65+
true,
66+
true
67+
),
6868
RELATED(
6969
"related",
7070
"Get related content by the current file",

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

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,31 @@ object JavaTypeUtil {
1010
fun resolveByType(outputType: PsiType?): Map<String, PsiClass> {
1111
val resolvedClasses = mutableMapOf<String, PsiClass>()
1212
if (outputType is PsiClassReferenceType) {
13-
val resolveClz = outputType.resolve()
14-
15-
outputType.parameters.filterIsInstance<PsiClassReferenceType>().forEach {
16-
val resolve = it.resolve()
17-
if (resolve != null) {
18-
resolvedClasses[it.canonicalText] = resolve
19-
}
20-
21-
it.parameters.map { argType ->
22-
if (argType is PsiClassReferenceType) {
23-
val resolvedArgType = argType.resolve()
24-
if (resolvedArgType != null) {
25-
resolvedClasses[argType.canonicalText] = resolvedArgType
26-
}
27-
}
28-
}
13+
resolvedClasses.putAll(resolveTypeReferences(outputType))
14+
}
15+
16+
return resolvedClasses.filter { isProjectContent(it.value) }.toMap()
17+
}
18+
19+
private fun resolveTypeReferences(outputType: PsiClassReferenceType): MutableMap<String, PsiClass> {
20+
val resolvedClasses = mutableMapOf<String, PsiClass>()
21+
22+
fun resolveRecursively(type: PsiClassReferenceType) {
23+
val resolvedClass = type.resolve()
24+
if (resolvedClass != null) {
25+
resolvedClasses[type.canonicalText] = resolvedClass
2926
}
3027

31-
val canonicalText = outputType.canonicalText
32-
if (resolveClz != null) {
33-
resolvedClasses[canonicalText] = resolveClz
28+
type.parameters.filterIsInstance<PsiClassReferenceType>().forEach { childType ->
29+
resolveRecursively(childType)
3430
}
3531
}
3632

37-
return resolvedClasses.filter { isProjectContent(it.value) }.toMap()
33+
resolveRecursively(outputType)
34+
return resolvedClasses
3835
}
3936

37+
4038
fun resolveByField(element: PsiElement): Map<String, PsiClass> {
4139
val psiFile = element.containingFile as PsiJavaFile
4240

0 commit comments

Comments
 (0)