33 */
44package com.tschuchort.compiletesting
55
6+ import org.jetbrains.kotlin.cli.common.messages.MessageRenderer
7+ import org.jetbrains.kotlin.cli.common.messages.PrintingMessageCollector
68import org.jetbrains.kotlin.com.intellij.mock.MockProject
79import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
810import org.jetbrains.kotlin.config.CompilerConfiguration
911import org.jetbrains.kotlin.ksp.AbstractKotlinSymbolProcessingExtension
1012import org.jetbrains.kotlin.ksp.KspOptions
13+ import org.jetbrains.kotlin.ksp.processing.KSPLogger
1114import org.jetbrains.kotlin.ksp.processing.SymbolProcessor
15+ import org.jetbrains.kotlin.ksp.processing.impl.MessageCollectorBasedKSPLogger
1216import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
1317import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
1418import java.io.File
@@ -30,6 +34,14 @@ var KotlinCompilation.symbolProcessors: List<SymbolProcessor>
3034val KotlinCompilation .kspSourcesDir: File
3135 get() = kspWorkingDir.resolve(" sources" )
3236
37+ private val KotlinCompilation .kspJavaSourceDir: File
38+ get() = kspSourcesDir.resolve(" java" )
39+
40+ private val KotlinCompilation .kspKotlinSourceDir: File
41+ get() = kspSourcesDir.resolve(" kotlin" )
42+
43+ private val KotlinCompilation .kspResourceDir: File
44+ get() = kspSourcesDir.resolve(" resource" )
3345/* *
3446 * The working directory for KSP
3547 */
@@ -51,9 +63,11 @@ private val KotlinCompilation.kspClassesDir: File
5163 */
5264private class KspTestExtension (
5365 options : KspOptions ,
54- private val processors : List <SymbolProcessor >
66+ private val processors : List <SymbolProcessor >,
67+ logger : KSPLogger
5568) : AbstractKotlinSymbolProcessingExtension(
5669 options = options,
70+ logger = logger,
5771 testMode = false
5872) {
5973 override fun loadProcessors () = processors
@@ -71,16 +85,27 @@ private class KspCompileTestingComponentRegistrar(
7185 return
7286 }
7387 val options = KspOptions .Builder ().apply {
74- this .classesOutputDir = compilation.kspClassesDir.also {
88+ this .classOutputDir = compilation.kspClassesDir.also {
89+ it.deleteRecursively()
90+ it.mkdirs()
91+ }
92+ this .javaOutputDir = compilation.kspJavaSourceDir.also {
93+ it.deleteRecursively()
94+ it.mkdirs()
95+ }
96+ this .kotlinOutputDir = compilation.kspKotlinSourceDir.also {
7597 it.deleteRecursively()
7698 it.mkdirs()
7799 }
78- this .sourcesOutputDir = compilation.kspSourcesDir .also {
100+ this .resourceOutputDir = compilation.kspResourceDir .also {
79101 it.deleteRecursively()
80102 it.mkdirs()
81103 }
82104 }.build()
83- val registrar = KspTestExtension (options, processors)
105+ // TODO: replace with KotlinCompilation.internalMessageStream
106+ val registrar = KspTestExtension (options, processors, MessageCollectorBasedKSPLogger (
107+ PrintingMessageCollector (System .err, MessageRenderer .GRADLE_STYLE , compilation.verbose)
108+ ))
84109 AnalysisHandlerExtension .registerExtension(project, registrar)
85110 }
86111}
0 commit comments