Copy compiler args from compileKotlin to kspKotlin
diff --git a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt
index 886af00..f49d51a 100644
--- a/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt
+++ b/gradle-plugin/src/main/kotlin/com/google/devtools/ksp/gradle/KspSubplugin.kt
@@ -18,28 +18,35 @@
 package com.google.devtools.ksp.gradle
 
 import com.google.devtools.ksp.gradle.model.builder.KspModelBuilder
+import java.io.File
+import javax.inject.Inject
+import kotlin.reflect.KProperty1
 import org.gradle.api.Project
 import org.gradle.api.Task
 import org.gradle.api.UnknownTaskException
 import org.gradle.api.artifacts.Configuration
-import org.gradle.api.file.ConfigurableFileCollection
+import org.gradle.api.file.FileCollection
 import org.gradle.api.provider.Provider
 import org.gradle.api.tasks.Input
-import org.gradle.api.tasks.SourceSetOutput
 import org.gradle.api.tasks.TaskProvider
 import org.gradle.api.tasks.compile.JavaCompile
 import org.gradle.language.jvm.tasks.ProcessResources
 import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry
+import org.jetbrains.kotlin.cli.common.arguments.Argument
 import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments
-import org.jetbrains.kotlin.gradle.plugin.*
+import org.jetbrains.kotlin.gradle.plugin.FilesSubpluginOption
+import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
+import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
+import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin
+import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact
+import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
 import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
 import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation
 import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinWithJavaCompilation
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 import org.jetbrains.kotlin.incremental.ChangedFiles
+import org.jetbrains.kotlin.incremental.destinationAsFile
 import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty
-import java.io.File
-import javax.inject.Inject
 
 class KspGradleSubplugin @Inject internal constructor(private val registry: ToolingModelBuilderRegistry) :
         KotlinCompilerPluginSupportPlugin {
@@ -131,8 +138,9 @@
 
         val kspTaskProvider = project.tasks.register(kspTaskName, KspTask::class.java) { kspTask ->
             kspTask.setDestinationDir(destinationDir)
-            kspTask.mapClasspath { kotlinCompileProvider.get().classpath }
             kspTask.options = options
+            kspTask.kotlinCompile = kotlinCompileProvider.get()
+            kspTask.destination = destinationDir
             kspTask.outputs.dirs(kotlinOutputDir, javaOutputDir, classOutputDir, resourceOutputDir)
             kspTask.dependsOn(kspConfiguration.buildDependencies)
             // depends on the processor; if the processor changes, it needs to be reprocessed.
@@ -185,6 +193,8 @@
 
 open class KspTask : KspTaskJ() {
     lateinit var options: List<SubpluginOption>
+    lateinit var kotlinCompile: KotlinCompile
+    lateinit var destination: File
 
     @Input
     open fun getApOptions(): Map<String, String> {
@@ -203,9 +213,13 @@
             defaultsOnly: Boolean,
             ignoreClasspathResolutionErrors: Boolean
     ) {
-        super.setupCompilerArgs(args, defaultsOnly, ignoreClasspathResolutionErrors)
+        // Start with / copy from kotlinCompile.
+        kotlinCompile.setupCompilerArgs(args, defaultsOnly, ignoreClasspathResolutionErrors)
         args.addPluginOptions(options)
+        args.destinationAsFile = destination
     }
+
+    override fun getClasspath() = kotlinCompile.classpath
 }
 
 fun K2JVMCompilerArguments.addPluginOptions(options: List<SubpluginOption>) {
@@ -220,4 +234,24 @@
         changedFiles.removed.ifNotEmpty { options += SubpluginOption("knownRemoved", map { it.path }.joinToString(":")) }
         options.ifNotEmpty { addPluginOptions(this) }
     }
-}
\ No newline at end of file
+}
+
+@Suppress("unused")
+internal fun dumpArgs(args: K2JVMCompilerArguments): Map<String, String> {
+    @Suppress("UNCHECKED_CAST")
+    val argumentProperties =
+        args::class.members.mapNotNull { member ->
+            (member as? KProperty1<K2JVMCompilerArguments, *>)?.takeIf { it.annotations.any { ann -> ann is Argument } }
+        }
+
+    fun toPair(property: KProperty1<K2JVMCompilerArguments, *>): Pair<String, String> {
+        @Suppress("UNCHECKED_CAST")
+        val value = (property as KProperty1<K2JVMCompilerArguments, *>).get(args)
+        return property.name to if (value is Array<*>)
+            value.asList().toString()
+        else
+            value.toString()
+    }
+
+    return argumentProperties.associate(::toPair).toSortedMap()
+}