Skip to content

Commit 5736129

Browse files
authored
Merge pull request #184 from hust-twj/ksp_processor_opti
优化ksp编译性能
2 parents 5ab8202 + d3b8502 commit 5736129

File tree

2 files changed

+50
-18
lines changed

2 files changed

+50
-18
lines changed

apt/src/main/java/com/therouter/ksp/TheRouterSymbolProcessor.kt

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.therouter.ksp
22

3+
import com.google.devtools.ksp.containingFile
34
import com.google.devtools.ksp.processing.CodeGenerator
45
import com.google.devtools.ksp.processing.Dependencies
56
import com.google.devtools.ksp.processing.KSPLogger
@@ -9,6 +10,7 @@ import com.google.devtools.ksp.symbol.FunctionKind
910
import com.google.devtools.ksp.symbol.KSAnnotated
1011
import com.google.devtools.ksp.symbol.KSClassDeclaration
1112
import com.google.devtools.ksp.symbol.KSDeclaration
13+
import com.google.devtools.ksp.symbol.KSFile
1214
import com.google.devtools.ksp.symbol.KSFunctionDeclaration
1315
import com.google.devtools.ksp.symbol.KSPropertyDeclaration
1416
import com.google.devtools.ksp.symbol.KSType
@@ -49,7 +51,15 @@ class TheRouterSymbolProcessor(
4951
) : SymbolProcessor {
5052
private var sourcePath = ""
5153

54+
private val routeDependencies = mutableSetOf<KSFile>()
55+
private val autoWiredDependencies = mutableSetOf<KSFile>()
56+
private val serviceProviderDependencies = mutableSetOf<KSFile>()
57+
5258
override fun process(resolver: Resolver): List<KSAnnotated> {
59+
routeDependencies.clear()
60+
autoWiredDependencies.clear()
61+
serviceProviderDependencies.clear()
62+
5363
genRouterMapFile(parseRoute(resolver))
5464
genAutowiredFile(parseAutowired(resolver))
5565
val providerItemList = parseServiceProvider(resolver)
@@ -61,8 +71,12 @@ class TheRouterSymbolProcessor(
6171

6272
private fun parseRoute(resolver: Resolver): List<RouteItem> {
6373
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+
}
6680
return list
6781
}
6882

@@ -130,7 +144,8 @@ class TheRouterSymbolProcessor(
130144
val json = gson.toJson(routePagelist)
131145
var ps: PrintStream? = null
132146
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))
134149
ps.println("@file:JvmName(\"$className\")")
135150
ps.println("package $PACKAGE")
136151
ps.println()
@@ -171,8 +186,12 @@ class TheRouterSymbolProcessor(
171186

172187
private fun parseAutowired(resolver: Resolver): Map<String, ArrayList<AutowiredItem>> {
173188
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+
}
176195
return map
177196
}
178197

@@ -257,12 +276,8 @@ class TheRouterSymbolProcessor(
257276
val pkgName = fullClassName.substring(0, fullClassName.lastIndexOf('.'))
258277
var ps: PrintStream? = null
259278
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))
266281
ps.println("@file:JvmName(\"$simpleName\")")
267282
ps.println(String.format("package %s", pkgName))
268283
ps.println()
@@ -328,8 +343,12 @@ class TheRouterSymbolProcessor(
328343

329344
private fun parseServiceProvider(resolver: Resolver): ArrayList<ServiceProviderItem> {
330345
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+
}
333352
return list
334353
}
335354

@@ -479,8 +498,12 @@ class TheRouterSymbolProcessor(
479498

480499
private fun parseFlowTask(resolver: Resolver): ArrayList<FlowTaskItem> {
481500
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+
}
484507
return list
485508
}
486509

@@ -528,8 +551,12 @@ class TheRouterSymbolProcessor(
528551

529552
private fun parseActionInterceptor(resolver: Resolver): ArrayList<ActionInterceptorItem> {
530553
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+
}
533560
return list
534561
}
535562

@@ -590,7 +617,8 @@ class TheRouterSymbolProcessor(
590617
)
591618
var ps: PrintStream? = null
592619
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))
594622
ps.println("@file:JvmName(\"$className\")")
595623
ps.println(String.format("package %s", PACKAGE))
596624
ps.println()

gradle.properties

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,8 @@ android.disableAutomaticComponentCreation=true
2020
# Automatically convert third-party libraries to use AndroidX
2121
USE_KAPT=false
2222

23+
ksp.incremental=true
24+
ksp.incremental.log=true
25+
ksp.incremental.intermodule=true
26+
2327
TheRouterVersion=1.2.3-beta18

0 commit comments

Comments
 (0)