Skip to content

Commit 3e4d517

Browse files
committed
refactor(endpoints): wrap related code lookups in runReadAction #308
- Wrap `RelatedClassesProvider.provide` calls in `runReadAction` to ensure thread safety. - Add second-level callee lookup for elements under a size threshold. - Update JavaCallHelper to use `runReadAction` for thread safety. - Refactor bridge.vm text for clarity and consistency in migration strategy descriptions.
1 parent 5af3a0d commit 3e4d517

File tree

3 files changed

+23
-8
lines changed

3 files changed

+23
-8
lines changed

core/src/main/resources/genius/zh/code/bridge.vm

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
你是由 Unit Mesh 设计的开源遗留系统迁移助手,专门用于遗留系统的维护和迁移。你支持多种迁移策略例如“重新平台化”(Replatforming)、“重构”(Rebuilding)、
2-
“重新架构”(Rearchitecting)等,并根据用户的需求提供不同的迁移方案。
1+
你是一个非常专业的遗留系统迁移开发人员、专家,擅长进行遗留系统分析、维护和迁移。你精通多种迁移策略例如API 封装(Encapsulate)、
2+
“重新平台化”(Replatform)、“重构”(Rebuild)、“重新架构”(Rearchitect)等,并能根据用户的需求提供不同的迁移方案。当客户没有特别想法时,
3+
你应该优先从成本最低的迁移策略开始,比如 API 封装,用户将会为你提供更多的报酬。
34

45
你需要收集不同的背景信息,以根据具体的上下文选择合适迁移策略时,以提供有针对性的帮助。在评估当前项目时,你应当像一名架构师一样工作,
56
提供专业的迁移方案。同时,你需要像一名教师一样向用户展示你的迁移计划,使其易于理解和实施。
@@ -76,8 +77,8 @@ Here is an example output to the USER:
7677
通常来说,迁移一个项目需要了解项目的目录结构、依赖关系、代码规模等信息。在没有这些信息之前,我无法为您提供准确的迁移方案。
7778
请允许我调用工具来获取这些信息,以便为您提供更好的帮助:
7879
<devin>
79-
/scc [注释:获取代码规模信息,优先考虑]
8080
/file:README.md [注释:获取项目的 README 文件,了解项目的基本信息]
81+
/scc [注释:获取代码规模信息,优先考虑]
8182
/dir:. [注释:获取项目文件夹信息和目录结构,方便后续继续分析]
8283
/dependencies [注释:获取项目依赖信息]
8384
/containerView [注释:获取项目模块信息,如果是多模块项目]

exts/ext-endpoints/src/233/main/kotlin/cc/unitmesh/endpoints/bridge/EndpointKnowledgeWebApiProvider.kt

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,28 @@ class EndpointKnowledgeWebApiProvider : KnowledgeWebApiProvider() {
3131
val decls = collectApiDeclElements(project, endpointsProviderList, httpMethod, httpUrl)
3232

3333
val relatedCode = decls.mapNotNull {
34-
RelatedClassesProvider.provide(it.language)?.lookupIO(it)
34+
runReadAction {
35+
RelatedClassesProvider.provide(it.language)?.lookupIO(it)
36+
}
3537
}.flatten()
3638

3739
val callees = decls.mapNotNull {
38-
RelatedClassesProvider.provide(it.language)?.lookupCallee(project, it)
40+
val classesProvider = runReadAction { RelatedClassesProvider.provide(it.language) }
41+
classesProvider?.lookupCallee(project, it)
3942
}.flatten()
4043

41-
val allElements = decls + relatedCode + callees
44+
var allElements = (decls + relatedCode + callees).distinct().toMutableList()
45+
/// find better number then 10, and keep 10 as a default
46+
if (allElements.size <= 10) {
47+
val secondLevels =
48+
callees.mapNotNull {
49+
runReadAction {
50+
RelatedClassesProvider.provide(it.language)?.lookupCallee(project, it)
51+
}
52+
}.flatten().take(10)
53+
allElements.addAll(secondLevels)
54+
}
55+
4256
future.complete(allElements)
4357
}
4458
}

java/src/main/kotlin/cc/unitmesh/idea/util/JavaCallHelper.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package cc.unitmesh.idea.util
22

3+
import com.intellij.openapi.application.runReadAction
34
import com.intellij.openapi.progress.ProgressManager
45
import com.intellij.openapi.progress.util.ProgressIndicatorBase
56
import com.intellij.openapi.project.Project
@@ -26,8 +27,7 @@ object JavaCallHelper {
2627
}
2728
})
2829

29-
return calledMethods
30-
.filter {
30+
return calledMethods.filter {
3131
val containingClass = it.containingClass ?: return@filter false
3232
if (!ProjectScope.getProjectScope(project).contains(containingClass.containingFile.virtualFile)) {
3333
return@filter false

0 commit comments

Comments
 (0)