Skip to content

Commit c3f15a6

Browse files
authored
refactor: Refactor SPI BeanProvider logic (#1208)
1 parent f215b1d commit c3f15a6

30 files changed

+623
-368
lines changed

idea-plugin/src/main/kotlin/com/itangcent/ai/AIService.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
package com.itangcent.ai
22

3+
import com.google.inject.ProvidedBy
4+
import com.google.inject.Singleton
5+
import com.itangcent.spi.SpiSingleBeanProvider
6+
37
/**
48
* Interface for AI service operations
59
*/
10+
@ProvidedBy(AIServiceProvider::class)
611
interface AIService {
712
/**
813
* Sends a prompt to the AI service and returns the response
@@ -27,3 +32,5 @@ interface AIService {
2732
}
2833
}
2934

35+
@Singleton
36+
class AIServiceProvider : SpiSingleBeanProvider<AIService>()

idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/actions/YapiExportAction.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ class YapiExportAction : ApiExportAction("Export Yapi") {
2929
builder.bindInstance(ExportChannel::class, ExportChannel.of("yapi"))
3030
builder.bindInstance(ExportDoc::class, ExportDoc.of("request", "methodDoc"))
3131

32-
builder.bind(MethodDocBuilderListener::class) { it.with(CompositeMethodDocBuilderListener::class).singleton() }
33-
3432
builder.bind(MethodFilter::class) { it.with(ConfigurableMethodFilter::class).singleton() }
3533

3634
builder.bindInstance("file.save.default", "yapi.json")

idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/api/export/core/CompositeMethodDocBuilderListener.kt

Lines changed: 0 additions & 43 deletions
This file was deleted.

idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/api/export/core/CompositeRequestBuilderListener.kt

Lines changed: 0 additions & 94 deletions
This file was deleted.

idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/api/export/core/MethodDocBuilderListener.kt

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,59 @@
11
package com.itangcent.idea.plugin.api.export.core
22

3-
import com.google.inject.ImplementedBy
3+
import com.google.inject.ProvidedBy
4+
import com.google.inject.Singleton
45
import com.itangcent.common.model.MethodDoc
56
import com.itangcent.common.model.Param
6-
import com.itangcent.common.model.Request
7+
import com.itangcent.spi.SpiCompositeBeanProvider
78

8-
@ImplementedBy(DefaultMethodDocBuilderListener::class)
9+
@ProvidedBy(MethodDocBuilderListenerCompositeProvider::class)
910
interface MethodDocBuilderListener {
1011

11-
fun setName(exportContext: ExportContext,
12-
methodDoc: MethodDoc, name: String)
12+
fun setName(
13+
exportContext: ExportContext,
14+
methodDoc: MethodDoc, name: String
15+
)
1316

14-
fun appendDesc(exportContext: ExportContext,
15-
methodDoc: MethodDoc, desc: String?)
17+
fun appendDesc(
18+
exportContext: ExportContext,
19+
methodDoc: MethodDoc, desc: String?
20+
)
1621

17-
fun addParam(exportContext: ExportContext,
18-
methodDoc: MethodDoc, param: Param)
22+
fun addParam(
23+
exportContext: ExportContext,
24+
methodDoc: MethodDoc, param: Param
25+
)
1926

20-
fun setRet(exportContext: ExportContext,
21-
methodDoc: MethodDoc, ret: Any?)
27+
fun setRet(
28+
exportContext: ExportContext,
29+
methodDoc: MethodDoc, ret: Any?
30+
)
2231

23-
fun appendRetDesc(exportContext: ExportContext,
24-
methodDoc: MethodDoc, retDesc: String?)
32+
fun appendRetDesc(
33+
exportContext: ExportContext,
34+
methodDoc: MethodDoc, retDesc: String?
35+
)
2536

2637
fun startProcessMethod(methodExportContext: MethodExportContext, methodDoc: MethodDoc)
2738

2839
fun processCompleted(methodExportContext: MethodExportContext, methodDoc: MethodDoc)
2940
}
3041

42+
@Singleton
43+
class MethodDocBuilderListenerCompositeProvider : SpiCompositeBeanProvider<MethodDocBuilderListener>()
44+
3145
//region utils------------------------------------------------------------------
32-
fun MethodDocBuilderListener.addParam(exportContext: ExportContext,
33-
methodDoc: MethodDoc, paramName: String, value: Any?, desc: String?, required: Boolean) {
46+
fun MethodDocBuilderListener.addParam(
47+
exportContext: ExportContext,
48+
methodDoc: MethodDoc, paramName: String, value: Any?, desc: String?, required: Boolean
49+
) {
3450
addParam(exportContext, methodDoc, paramName, value, required, desc)
3551
}
3652

37-
fun MethodDocBuilderListener.addParam(exportContext: ExportContext,
38-
methodDoc: MethodDoc, paramName: String, value: Any?, required: Boolean, desc: String?) {
53+
fun MethodDocBuilderListener.addParam(
54+
exportContext: ExportContext,
55+
methodDoc: MethodDoc, paramName: String, value: Any?, required: Boolean, desc: String?
56+
) {
3957
val param = Param()
4058
param.name = paramName
4159
param.value = value

idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/api/export/core/RequestBuilderListener.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.itangcent.idea.plugin.api.export.core
22

3-
import com.google.inject.ImplementedBy
3+
import com.google.inject.ProvidedBy
4+
import com.google.inject.Singleton
45
import com.itangcent.common.model.*
6+
import com.itangcent.spi.SpiCompositeBeanProvider
57

6-
@ImplementedBy(CompositeRequestBuilderListener::class)
8+
@ProvidedBy(RequestBuilderListenerCompositeProvider::class)
79
interface RequestBuilderListener {
810

911
fun setName(
@@ -128,6 +130,9 @@ interface RequestBuilderListener {
128130
fun processCompleted(methodExportContext: MethodExportContext, request: Request)
129131
}
130132

133+
@Singleton
134+
class RequestBuilderListenerCompositeProvider : SpiCompositeBeanProvider<RequestBuilderListener>()
135+
131136
//region utils------------------------------------------------------------------
132137

133138
fun RequestBuilderListener.addParam(

idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/api/export/spring/DefaultSpringControllerAnnotationResolver.kt

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
package com.itangcent.idea.plugin.api.export.spring
22

3-
import com.google.inject.ImplementedBy
3+
import com.google.inject.ProvidedBy
4+
import com.google.inject.Singleton
45
import com.intellij.psi.PsiClass
6+
import com.itangcent.spi.SpiCompositeBeanProvider
57

68
/*
79
* This interface defines a contract for resolving whether a given PsiClass
810
* has a Spring controller annotation. It is implemented by various classes
911
* to provide different strategies for determining the presence of controller annotations.
1012
*/
11-
@ImplementedBy(DefaultSpringControllerAnnotationResolver::class)
13+
@ProvidedBy(SpringControllerAnnotationResolverCompositeProvider::class)
1214
interface SpringControllerAnnotationResolver {
1315
fun hasControllerAnnotation(psiClass: PsiClass): Boolean
14-
}
16+
}
17+
18+
@Singleton
19+
class SpringControllerAnnotationResolverCompositeProvider :
20+
SpiCompositeBeanProvider<SpringControllerAnnotationResolver>()

idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/api/export/suv/SuvApiExporter.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -381,10 +381,6 @@ open class SuvApiExporter {
381381
builder.bindInstance(ExportChannel::class, ExportChannel.of("yapi"))
382382
builder.bindInstance(ExportDoc::class, ExportDoc.of("request", "methodDoc"))
383383

384-
builder.bind(MethodDocBuilderListener::class) {
385-
it.with(CompositeMethodDocBuilderListener::class).singleton()
386-
}
387-
388384
builder.bindInstance("file.save.default", "api.json")
389385
builder.bindInstance("file.save.last.location.key", "com.itangcent.api.export.path")
390386

idea-plugin/src/main/kotlin/com/itangcent/idea/plugin/api/export/translation/APITranslationHelper.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,7 @@ import com.itangcent.common.model.Request
1212
import com.itangcent.common.utils.GsonUtils
1313
import com.itangcent.common.utils.notNullOrEmpty
1414
import com.itangcent.idea.plugin.settings.helper.AISettingsHelper
15-
import com.itangcent.intellij.context.ActionContext
1615
import com.itangcent.intellij.logger.Logger
17-
import com.itangcent.spi.SpiCompositeLoader
1816
import java.util.concurrent.ConcurrentHashMap
1917

2018
/**
@@ -32,11 +30,7 @@ class APITranslationHelper {
3230
private lateinit var aiSettingsHelper: AISettingsHelper
3331

3432
@Inject
35-
private lateinit var actionContext: ActionContext
36-
37-
private val aiService: AIService by lazy {
38-
SpiCompositeLoader.load<AIService>(actionContext).first()
39-
}
33+
private lateinit var aiService: AIService
4034

4135
// Cache for translated content to avoid duplicate translations
4236
private val translationCache = ConcurrentHashMap<String, String>()

0 commit comments

Comments
 (0)