1
1
package com.therouter.ksp
2
2
3
+ import com.google.devtools.ksp.containingFile
3
4
import com.google.devtools.ksp.processing.CodeGenerator
4
5
import com.google.devtools.ksp.processing.Dependencies
5
6
import com.google.devtools.ksp.processing.KSPLogger
@@ -9,6 +10,7 @@ import com.google.devtools.ksp.symbol.FunctionKind
9
10
import com.google.devtools.ksp.symbol.KSAnnotated
10
11
import com.google.devtools.ksp.symbol.KSClassDeclaration
11
12
import com.google.devtools.ksp.symbol.KSDeclaration
13
+ import com.google.devtools.ksp.symbol.KSFile
12
14
import com.google.devtools.ksp.symbol.KSFunctionDeclaration
13
15
import com.google.devtools.ksp.symbol.KSPropertyDeclaration
14
16
import com.google.devtools.ksp.symbol.KSType
@@ -49,7 +51,15 @@ class TheRouterSymbolProcessor(
49
51
) : SymbolProcessor {
50
52
private var sourcePath = " "
51
53
54
+ private val routeDependencies = mutableSetOf<KSFile >()
55
+ private val autoWiredDependencies = mutableSetOf<KSFile >()
56
+ private val serviceProviderDependencies = mutableSetOf<KSFile >()
57
+
52
58
override fun process (resolver : Resolver ): List <KSAnnotated > {
59
+ routeDependencies.clear()
60
+ autoWiredDependencies.clear()
61
+ serviceProviderDependencies.clear()
62
+
53
63
genRouterMapFile(parseRoute(resolver))
54
64
genAutowiredFile(parseAutowired(resolver))
55
65
val providerItemList = parseServiceProvider(resolver)
@@ -61,8 +71,12 @@ class TheRouterSymbolProcessor(
61
71
62
72
private fun parseRoute (resolver : Resolver ): List <RouteItem > {
63
73
val list: ArrayList <RouteItem > = ArrayList ()
64
- resolver.getSymbolsWithAnnotation(Route ::class .java.name)
65
- .forEach { it.accept(RouteVisitor (list), Unit ) }
74
+ resolver.getSymbolsWithAnnotation(Route ::class .java.name).forEach {
75
+ it.containingFile?.let { file ->
76
+ routeDependencies.add(file)
77
+ }
78
+ it.accept(RouteVisitor (list), Unit )
79
+ }
66
80
return list
67
81
}
68
82
@@ -130,7 +144,8 @@ class TheRouterSymbolProcessor(
130
144
val json = gson.toJson(routePagelist)
131
145
var ps: PrintStream ? = null
132
146
try {
133
- ps = PrintStream (codeGenerator.createNewFile(Dependencies .ALL_FILES , PACKAGE , className))
147
+ val dependencies = Dependencies (aggregating = true , * routeDependencies.toTypedArray())
148
+ ps = PrintStream (codeGenerator.createNewFile(dependencies, PACKAGE , className))
134
149
ps.println (" @file:JvmName(\" $className \" )" )
135
150
ps.println (" package $PACKAGE " )
136
151
ps.println ()
@@ -171,8 +186,12 @@ class TheRouterSymbolProcessor(
171
186
172
187
private fun parseAutowired (resolver : Resolver ): Map <String , ArrayList <AutowiredItem >> {
173
188
val map = HashMap <String , ArrayList <AutowiredItem >>()
174
- resolver.getSymbolsWithAnnotation(Autowired ::class .java.name)
175
- .forEach { it.accept(AutowiredVisitor (map), Unit ) }
189
+ resolver.getSymbolsWithAnnotation(Autowired ::class .java.name).forEach {
190
+ it.containingFile?.let { file ->
191
+ autoWiredDependencies.add(file)
192
+ }
193
+ it.accept(AutowiredVisitor (map), Unit )
194
+ }
176
195
return map
177
196
}
178
197
@@ -257,12 +276,8 @@ class TheRouterSymbolProcessor(
257
276
val pkgName = fullClassName.substring(0 , fullClassName.lastIndexOf(' .' ))
258
277
var ps: PrintStream ? = null
259
278
try {
260
- ps = PrintStream (
261
- codeGenerator.createNewFile(
262
- Dependencies .ALL_FILES ,
263
- pkgName, simpleName
264
- )
265
- )
279
+ val dependencies = Dependencies (aggregating = false , * autoWiredDependencies.toTypedArray())
280
+ ps = PrintStream (codeGenerator.createNewFile(dependencies, pkgName, simpleName))
266
281
ps.println (" @file:JvmName(\" $simpleName \" )" )
267
282
ps.println (String .format(" package %s" , pkgName))
268
283
ps.println ()
@@ -328,8 +343,12 @@ class TheRouterSymbolProcessor(
328
343
329
344
private fun parseServiceProvider (resolver : Resolver ): ArrayList <ServiceProviderItem > {
330
345
val list: ArrayList <ServiceProviderItem > = ArrayList ()
331
- resolver.getSymbolsWithAnnotation(ServiceProvider ::class .java.name)
332
- .forEach { it.accept(ServiceProviderVisitor (list), Unit ) }
346
+ resolver.getSymbolsWithAnnotation(ServiceProvider ::class .java.name).forEach {
347
+ it.containingFile?.let { file ->
348
+ serviceProviderDependencies.add(file)
349
+ }
350
+ it.accept(ServiceProviderVisitor (list), Unit )
351
+ }
333
352
return list
334
353
}
335
354
@@ -479,8 +498,12 @@ class TheRouterSymbolProcessor(
479
498
480
499
private fun parseFlowTask (resolver : Resolver ): ArrayList <FlowTaskItem > {
481
500
val list = ArrayList <FlowTaskItem >()
482
- resolver.getSymbolsWithAnnotation(FlowTask ::class .java.name)
483
- .forEach { it.accept(FlowTaskVisitor (list), Unit ) }
501
+ resolver.getSymbolsWithAnnotation(FlowTask ::class .java.name).forEach {
502
+ it.containingFile?.let { file ->
503
+ serviceProviderDependencies.add(file)
504
+ }
505
+ it.accept(FlowTaskVisitor (list), Unit )
506
+ }
484
507
return list
485
508
}
486
509
@@ -528,8 +551,12 @@ class TheRouterSymbolProcessor(
528
551
529
552
private fun parseActionInterceptor (resolver : Resolver ): ArrayList <ActionInterceptorItem > {
530
553
val list = ArrayList <ActionInterceptorItem >()
531
- resolver.getSymbolsWithAnnotation(ActionInterceptor ::class .java.name)
532
- .forEach { it.accept(ActionInterceptorVisitor (list), Unit ) }
554
+ resolver.getSymbolsWithAnnotation(ActionInterceptor ::class .java.name).forEach {
555
+ it.containingFile?.let { file ->
556
+ serviceProviderDependencies.add(file)
557
+ }
558
+ it.accept(ActionInterceptorVisitor (list), Unit )
559
+ }
533
560
return list
534
561
}
535
562
@@ -590,7 +617,8 @@ class TheRouterSymbolProcessor(
590
617
)
591
618
var ps: PrintStream ? = null
592
619
try {
593
- ps = PrintStream (codeGenerator.createNewFile(Dependencies .ALL_FILES , PACKAGE , className))
620
+ val dependencies = Dependencies (aggregating = true , * serviceProviderDependencies.toTypedArray())
621
+ ps = PrintStream (codeGenerator.createNewFile(dependencies, PACKAGE , className))
594
622
ps.println (" @file:JvmName(\" $className \" )" )
595
623
ps.println (String .format(" package %s" , PACKAGE ))
596
624
ps.println ()
0 commit comments