diff --git a/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt index 1a15dc2dd48..30330655168 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/agp25/kotlin/org/jetbrains/kotlin/gradle/plugin/android/Android25ProjectHandler.kt @@ -8,7 +8,7 @@ import org.gradle.api.tasks.compile.AbstractCompile import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin import org.jetbrains.kotlin.gradle.internal.Kapt3KotlinGradleSubplugin import org.jetbrains.kotlin.gradle.internal.KaptTask -import org.jetbrains.kotlin.gradle.internal.WrappedVariantData +import org.jetbrains.kotlin.gradle.internal.KaptVariantData import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import java.io.File @@ -18,26 +18,15 @@ class Android25ProjectHandler(kotlinConfigurationTools: KotlinConfigurationTools : AbstractAndroidProjectHandler(kotlinConfigurationTools) { override fun forEachVariant(project: Project, action: (BaseVariant) -> Unit) { - project.plugins.all { plugin -> - val androidExtension = project.extensions.getByName("android") - var testedExtension: TestedExtension? = null - when (plugin.javaClass) { - AppPlugin::class.java -> { - (androidExtension as AppExtension).applicationVariants.all(action) - testedExtension = androidExtension - } - LibraryPlugin::class.java -> { - (androidExtension as LibraryExtension).libraryVariants.all(action) - testedExtension = androidExtension - } - TestPlugin::class.java -> { - (androidExtension as TestExtension).applicationVariants.all(action) - } - } - testedExtension?.apply { - testVariants.all(action) - unitTestVariants.all(action) - } + val androidExtension = project.extensions.getByName("android") + when (androidExtension) { + is AppExtension -> androidExtension.applicationVariants.all(action) + is LibraryExtension -> androidExtension.libraryVariants.all(action) + is TestExtension -> androidExtension.applicationVariants.all(action) + } + if (androidExtension is TestedExtension) { + androidExtension.testVariants.all(action) + androidExtension.unitTestVariants.all(action) } } @@ -49,50 +38,44 @@ class Android25ProjectHandler(kotlinConfigurationTools: KotlinConfigurationTools kotlinTask: KotlinCompile, kotlinAfterJavaTask: KotlinCompile?) { - val preJavaKotlinOutput = - (if (kotlinAfterJavaTask == null) - project.files(kotlinTask.destinationDir).let { kotlinOutput -> - if (Kapt3GradleSubplugin.isEnabled(project)) - // Add Kapt3 output as well, since there's no SyncOutputTask with the new API - kotlinOutput.from(Kapt3KotlinGradleSubplugin.getKaptClasssesDir(project, getVariantName(variantData))) - else - kotlinOutput - } - else - // Don't register the output, but add the task to the pipeline - project.files() - ).builtBy(kotlinTask) - + val preJavaKotlinOutput = project.files().builtBy(kotlinTask) + if (kotlinAfterJavaTask == null) { + preJavaKotlinOutput.add(project.files(kotlinTask.destinationDir)) + } + if (Kapt3GradleSubplugin.isEnabled(project)) { + // Add Kapt3 output as well, since there's no SyncOutputTask with the new API + val kaptClasssesDir = Kapt3KotlinGradleSubplugin.getKaptClasssesDir(project, getVariantName(variantData)) + preJavaKotlinOutput.add(project.files(kaptClasssesDir)) + } val preJavaClasspathKey = variantData.registerPreJavacGeneratedBytecode(preJavaKotlinOutput) kotlinTask.dependsOn(variantData.getSourceFolders(SourceKind.JAVA)) - kotlinTask.conventionMapping.map("classpath") { + kotlinTask.mapClasspath { val kotlinClasspath = variantData.getCompileClasspath(preJavaClasspathKey) kotlinClasspath + project.files(AndroidGradleWrapper.getRuntimeJars(androidPlugin, androidExt)) } - kotlinTask.setJavaOutput(javaTask.destinationDir) - kotlinAfterJavaTask?.setJavaOutput(javaTask.destinationDir) + kotlinTask.javaOutputDir = javaTask.destinationDir + kotlinAfterJavaTask?.javaOutputDir = javaTask.destinationDir // Use kapt1 annotations file for up-to-date check since annotation processing is done with javac - kotlinTask.annotationsFile?.let { javaTask.inputs.file(it) } + kotlinTask.kaptOptions.annotationsFile?.let { javaTask.inputs.file(it) } if (kotlinAfterJavaTask != null) { val kotlinAfterJavaOutput = project.files(kotlinAfterJavaTask.destinationDir).builtBy(kotlinAfterJavaTask) variantData.registerPostJavacGeneratedBytecode(kotlinAfterJavaOutput) - // Then don't register kotlinTask output, but only use it for Java compilation + // Then we don't need the kotlinTask output in artifacts, but we need to use it for Java compilation. + // Add it to Java classpath -- note the `from` used to avoid accident classpath resolution. javaTask.classpath = project.files(kotlinTask.destinationDir).from(javaTask.classpath) } - getTestedVariantData(variantData)?.let { - // Find the classpath entry that comes from the tested variant and register it as the friend path, lazily - kotlinTask.setFriendClasspathEntries(lazy { - variantData.getCompileClasspathArtifacts(preJavaClasspathKey) - .filter { it.id.componentIdentifier is TestedComponentIdentifier } - .map { it.file.absolutePath } - }) + // Find the classpath entries that comes from the tested variant and register it as the friend path, lazily + kotlinTask.friendClasspathEntries = lazy { + variantData.getCompileClasspathArtifacts(preJavaClasspathKey) + .filter { it.id.componentIdentifier is TestedComponentIdentifier } + .map { it.file.absolutePath } } } @@ -104,8 +87,6 @@ class Android25ProjectHandler(kotlinConfigurationTools: KotlinConfigurationTools override fun getVariantName(variant: BaseVariant): String = variant.name - override fun checkVariant(variant: BaseVariant) = Unit - override fun getTestedVariantData(variantData: BaseVariant): BaseVariant? = when (variantData) { is TestVariant -> variantData.testedVariant is UnitTestVariant -> variantData.testedVariant as? BaseVariant @@ -129,14 +110,20 @@ class Android25ProjectHandler(kotlinConfigurationTools: KotlinConfigurationTools // to some degree -- the dependent projects will rebuild non-incrementally when a library project changes } - private inner class WrappedVariant(variantData: BaseVariant) : org.jetbrains.kotlin.gradle.internal.WrappedVariantData(variantData) { + private inner class KaptVariant(variantData: BaseVariant) : KaptVariantData(variantData) { override val name: String = getVariantName(variantData) override val sourceProviders: Iterable = getSourceProviders(variantData) - override fun addJavaSourceFoldersToModel(generatedFilesDir: File) = addJavaSourceDirectoryToVariantModel(variantData, generatedFilesDir) + override fun addJavaSourceFoldersToModel(generatedFilesDir: File) = + addJavaSourceDirectoryToVariantModel(variantData, generatedFilesDir) - override val annotationProcessorOptions: Map? = variantData.javaCompileOptions.annotationProcessorOptions.arguments + override val annotationProcessorOptions: Map? = + variantData.javaCompileOptions.annotationProcessorOptions.arguments + + override fun wireKaptTask(project: Project, + task: KaptTask, + kotlinTask: KotlinCompile, + javaTask: AbstractCompile) { - override fun wireKaptTask(project: Project, task: KaptTask, kotlinTask: KotlinCompile, javaTask: AbstractCompile) { task.dependsOn(kotlinTask.dependsOn.minus(task)) val kaptSourceOutput = project.fileTree(task.destinationDir).builtBy(task) @@ -144,5 +131,6 @@ class Android25ProjectHandler(kotlinConfigurationTools: KotlinConfigurationTools } } - override fun wrapVariantData(variantData: BaseVariant): WrappedVariantData = WrappedVariant(variantData) + override fun wrapVariantDataForKapt(variantData: BaseVariant): KaptVariantData = + KaptVariant(variantData) } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt index e19297d6138..d7ecddc263d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/Kapt3KotlinGradleSubplugin.kt @@ -18,7 +18,6 @@ package org.jetbrains.kotlin.gradle.internal import com.android.build.gradle.BaseExtension import com.android.build.gradle.api.AndroidSourceSet -import com.android.build.gradle.internal.variant.BaseVariantData import com.android.builder.model.SourceProvider import org.gradle.api.Plugin import org.gradle.api.Project @@ -44,7 +43,7 @@ class Kapt3GradleSubplugin : Plugin { override fun apply(project: Project) {} } -abstract class WrappedVariantData(val variantData: T) { +abstract class KaptVariantData(val variantData: T) { abstract val name: String abstract val sourceProviders: Iterable abstract fun addJavaSourceFoldersToModel(generatedFilesDir: File) @@ -102,7 +101,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { val project: Project, val kotlinCompile: KotlinCompile, val javaCompile: AbstractCompile, - val variantData: Any?, + val kaptVariantData: KaptVariantData<*>?, val sourceSetName: String, val kaptExtension: KaptExtension, val kaptClasspath: MutableList) { @@ -138,12 +137,14 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { } } - val sourceSetName = if (variantData != null) { - for (provider in (variantData as WrappedVariantData<*>).sourceProviders) { + val kaptVariantData = variantData as? KaptVariantData<*> + + val sourceSetName = if (kaptVariantData != null) { + for (provider in kaptVariantData.sourceProviders) { handleSourceSet((provider as AndroidSourceSet).name) } - variantData.name + kaptVariantData.name } else { if (javaSourceSet == null) error("Java source set should not be null") @@ -155,7 +156,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { val kaptExtension = project.extensions.getByType(KaptExtension::class.java) val context = Kapt3SubpluginContext(project, kotlinCompile, javaCompile, - variantData, sourceSetName, kaptExtension, kaptClasspath) + kaptVariantData, sourceSetName, kaptExtension, kaptClasspath) val kaptGenerateStubsTask = context.createKaptGenerateStubsTask() context.createKaptKotlinTask(kaptGenerateStubsTask) @@ -174,9 +175,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { val pluginOptions = mutableListOf() val generatedFilesDir = getKaptGeneratedDir(project, sourceSetName) - if (variantData != null) { - (variantData as WrappedVariantData<*>).addJavaSourceFoldersToModel(generatedFilesDir) - } + kaptVariantData?.addJavaSourceFoldersToModel(generatedFilesDir) pluginOptions += SubpluginOption("aptMode", aptMode) disableAnnotationProcessingInJavaTask() @@ -198,12 +197,12 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { pluginOptions += SubpluginOption("processors", annotationProcessors) } - val androidPlugin = variantData?.let { + val androidPlugin = kaptVariantData?.let { project.extensions.findByName("android") as? BaseExtension } - val androidOptions = if (variantData != null) - (variantData as WrappedVariantData<*>).annotationProcessorOptions ?: emptyMap() + val androidOptions = if (kaptVariantData != null) + kaptVariantData.annotationProcessorOptions ?: emptyMap() else emptyMap() @@ -211,7 +210,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { val apOptions = kaptExtension.getAdditionalArguments( project, - (variantData as WrappedVariantData<*>).variantData, + kaptVariantData?.variantData, androidPlugin ) + androidOptions + mapOf("kapt.kotlin.generated" to kotlinSourcesOutputDir.absolutePath) @@ -282,10 +281,14 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { kaptTask.dependsOn(kaptGenerateStubsTask) kotlinCompile.dependsOn(kaptTask) - (variantData as WrappedVariantData<*>).wireKaptTask(project, kaptTask, kotlinCompile, javaCompile) - kotlinCompile.source(sourcesOutputDir, kotlinSourcesOutputDir) + if (kaptVariantData != null) { + kaptVariantData.wireKaptTask(project, kaptTask, kotlinCompile, javaCompile) + } else { + wireKaptTaskForJavaProject(kaptTask, kotlinCompile, javaCompile) + } + buildAndAddOptionsTo(kaptTask.pluginOptions, aptMode = "apt") } @@ -330,10 +333,12 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin { } } - private val BaseVariantData<*>.sourceProviders: List - get() = variantConfiguration.sortedSourceProviders - override fun getCompilerPluginId() = "org.jetbrains.kotlin.kapt3" override fun getGroupName() = "org.jetbrains.kotlin" override fun getArtifactName() = "kotlin-annotation-processing" +} + +internal fun wireKaptTaskForJavaProject(task: KaptTask, kotlinTask: KotlinCompile, javaTask: AbstractCompile) { + task.dependsOn(*(javaTask.dependsOn.filter { it !== kotlinTask && it != kotlinTask.name }.toTypedArray())) + javaTask.source(task.destinationDir) } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index aa210c102e3..7d93f8dfd3c 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -373,10 +373,6 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT protected val artifactDifferenceRegistryProvider get() = kotlinConfigurationTools.kotlinGradleBuildServices.artifactDifferenceRegistryProvider - protected val KotlinCompile.annotationsFile: File? get() = kaptOptions.annotationsFile - protected fun KotlinCompile.setJavaOutput(file: File) { javaOutputDir = file } - protected fun KotlinCompile.setFriendClasspathEntries(lazyEntries: Lazy?>) { friendClasspathEntries = lazyEntries } - protected val logger = Logging.getLogger(this.javaClass) protected abstract fun forEachVariant(project: Project, action: (V) -> Unit): Unit @@ -384,11 +380,12 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT protected abstract fun getSourceProviders(variantData: V): Iterable protected abstract fun getAllJavaSources(variantData: V): Iterable protected abstract fun getVariantName(variant: V): String - protected abstract fun checkVariant(variant: V): Unit protected abstract fun getTestedVariantData(variantData: V): V? protected abstract fun getJavaTask(variantData: V): AbstractCompile? protected abstract fun addJavaSourceDirectoryToVariantModel(variantData: V, javaSourceDirectory: File): Unit + protected open fun checkVariantIsValid(variant: V) = Unit + protected abstract fun wireKotlinTasks(project: Project, androidPlugin: BasePlugin, androidExt: BaseExtension, @@ -403,7 +400,7 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT kotlinTask: KotlinCompile, kotlinAfterJavaTask: KotlinCompile?) - protected abstract fun wrapVariantData(variantData: V): WrappedVariantData + protected abstract fun wrapVariantDataForKapt(variantData: V): KaptVariantData fun handleProject(project: Project) { val ext = project.extensions.getByName("android") as BaseExtension @@ -447,7 +444,7 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT rootKotlinOptions: KotlinJvmOptionsImpl, tasksProvider: KotlinTasksProvider, subpluginEnvironment: SubpluginEnvironment) { - checkVariant(variantData) + checkVariantIsValid(variantData) val variantDataName = getVariantName(variantData) logger.kotlinDebug("Process variant [$variantDataName]") @@ -515,7 +512,7 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT configureMultiProjectIc(project, variantData, javaTask, kotlinTask, kotlinAfterJavaTask) val appliedPlugins = subpluginEnvironment.addSubpluginOptions( - project, kotlinTask, javaTask, wrapVariantData(variantData), null) + project, kotlinTask, javaTask, wrapVariantDataForKapt(variantData), null) appliedPlugins.flatMap { it.getSubpluginKotlinTasks(project, kotlinTask) } .forEach { configureSources(it, variantData) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/LegacyAndroidAndroidProjectHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/LegacyAndroidAndroidProjectHandler.kt index 4c1dc15d741..68cf2dfa0a8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/LegacyAndroidAndroidProjectHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/LegacyAndroidAndroidProjectHandler.kt @@ -10,7 +10,8 @@ import org.gradle.api.Project import org.gradle.api.ProjectConfigurationException import org.gradle.api.tasks.compile.AbstractCompile import org.jetbrains.kotlin.gradle.internal.KaptTask -import org.jetbrains.kotlin.gradle.internal.WrappedVariantData +import org.jetbrains.kotlin.gradle.internal.KaptVariantData +import org.jetbrains.kotlin.gradle.internal.wireKaptTaskForJavaProject import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.incremental.configureMultiProjectIncrementalCompilation @@ -60,7 +61,7 @@ internal class LegacyAndroidAndroidProjectHandler(kotlinConfigurationTools: Kotl override fun getVariantName(variant: BaseVariantData): String = variant.name - override fun checkVariant(variant: BaseVariantData): Unit { + override fun checkVariantIsValid(variant: BaseVariantData): Unit { if (AndroidGradleWrapper.isJackEnabled(variant)) { throw ProjectConfigurationException( "Kotlin Gradle plugin does not support the deprecated Jack toolchain.\n" + @@ -106,8 +107,8 @@ internal class LegacyAndroidAndroidProjectHandler(kotlinConfigurationTools: Kotl private val BaseVariantData<*>.sourceProviders: List get() = variantConfiguration.sortedSourceProviders - private inner class WrappedLegacyVariantData(variantData: BaseVariantData) - : WrappedVariantData>(variantData) { + private inner class KaptLegacyVariantData(variantData: BaseVariantData) + : KaptVariantData>(variantData) { override val name: String = variantData.name override val sourceProviders: Iterable = getSourceProviders(variantData) @@ -117,13 +118,11 @@ internal class LegacyAndroidAndroidProjectHandler(kotlinConfigurationTools: Kotl override val annotationProcessorOptions: Map? = AndroidGradleWrapper.getAnnotationProcessorOptionsFromAndroidVariant(variantData) - override fun wireKaptTask(project: Project, task: KaptTask, kotlinTask: KotlinCompile, javaTask: AbstractCompile) { - task.dependsOn(*(javaTask.dependsOn.filter { it !== kotlinTask && it != kotlinTask.name }.toTypedArray())) - javaTask.source(task.destinationDir) - } + override fun wireKaptTask(project: Project, task: KaptTask, kotlinTask: KotlinCompile, javaTask: AbstractCompile) = + wireKaptTaskForJavaProject(task, kotlinTask, javaTask) } - override fun wrapVariantData(variantData: BaseVariantData) - : WrappedVariantData> = - WrappedLegacyVariantData(variantData) + override fun wrapVariantDataForKapt(variantData: BaseVariantData) + : KaptVariantData> = + KaptLegacyVariantData(variantData) } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt index 9e9a72bcb90..699b30987c9 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/gradleUtils.kt @@ -47,7 +47,7 @@ internal fun Task.finalizedByIfNotFailed(finalizer: Task) { this.finalizedBy(finalizer) } -internal fun AbstractCompile.mapClasspath(fn: () -> FileCollection) { +fun AbstractCompile.mapClasspath(fn: () -> FileCollection) { conventionMapping.map("classpath", fn) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index 9f619ec07cf..8b50ada0c7a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -38,9 +38,9 @@ import org.jetbrains.kotlin.gradle.dsl.* import org.jetbrains.kotlin.gradle.plugin.kotlinDebug import org.jetbrains.kotlin.gradle.plugin.kotlinInfo import org.jetbrains.kotlin.gradle.utils.ParsedGradleVersion +import org.jetbrains.kotlin.incremental.* import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistry import org.jetbrains.kotlin.incremental.multiproject.ArtifactDifferenceRegistryProvider -import org.jetbrains.kotlin.incremental.* import org.jetbrains.kotlin.utils.LibraryUtils import java.io.File import java.util.* @@ -112,13 +112,14 @@ abstract class AbstractKotlinCompile() : AbstractCo // TODO: consider more reliable approach (see usage) internal var anyClassesCompiled: Boolean = false internal var friendTaskName: String? = null - internal var javaOutputDir: File? = null internal var sourceSetName: String by Delegates.notNull() internal val moduleName: String get() = "${project.name}_$sourceSetName" - // In case the friend classpath entries are known at the task configuration time, they will be set - internal var friendClasspathEntries: Lazy?> = lazyOf(null) + var javaOutputDir: File? = null + + // In case the way to retrieve friend classpath entries is known at configuration time, it will be set + var friendClasspathEntries: Lazy?> = lazyOf(null) override fun compile() { assert(false, { "unexpected call to compile()" }) @@ -184,7 +185,8 @@ open class KotlinCompile : AbstractKotlinCompile(), Kotl private var kaptAnnotationsFileUpdater: AnnotationFileUpdater? = null - internal val kaptOptions = KaptOptions() + val kaptOptions = KaptOptions() + internal val pluginOptions = CompilerPluginOptions() internal var artifactDifferenceRegistryProvider: ArtifactDifferenceRegistryProvider? = null internal var artifactFile: File? = null