blob: 85f10a059a3a4005a369589e248081f9cbcb5d95 [file] [log] [blame] [view] [edit]
# Calling KSP2 In Programs
There are two flavors of KSP2 artifacts: `symbol-processing-aa` and `symbol-processing-aa-embeddable`. They are both
uber jars that include almost all runtime dependencies except `kotlin-stdlib`, `kotlinx-coroutines` and
`symbol-processing-common-deps`. The `-embeddable` version is the regular version with all the runtime dependencies
renamed, so that it can be used with a Kotlin compiler in the same classpath without name clash. When in doubt, use
`symbol-processing-aa-embeddable`.
Calling KSP2 consists of just 4 steps:
1. Load processors
2. Provide an implementation of `KSPLogger`, or use `KspGradleLogger`, which currently simply writes to stdout.
3. Fill `KSPConfig`
4. Call `KotlinSymbolProcessing(kspConfig, processors, kspLogger).execute()`
```kotlin
// Implement a logger or use KspGradleLogger
val logger = KspGradleLogger(KspGradleLogger.LOGGING_LEVEL_WARN)
// Load processors
val processorClassloader = URLClassLoader(classpath.map { File(it).toURI().toURL() }.toTypedArray())
val processorProviders = ServiceLoader.load(
processorClassloader.loadClass("com.google.devtools.ksp.processing.SymbolProcessorProvider"),
processorClassloader
).toList() as List<SymbolProcessorProvider>
// Fill the config
val kspConfig = KSPJvmConfig.Builder().apply {
// All configurations happen here. See KSPConfig.kt for all available options.
moduleName = "main"
sourceRoots = listOf(File("/path/to/src1"), File("/path/to/src2"))
kotlinOutputDir = File("/path/to/kotlin/out")
// ...
}.build()
// Run!
val exitCode = KotlinSymbolProcessing(kspConfig, processorProviders, kspLoggerImpl).execute()
```