diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt index 8d741f3e2c7..d1171f89556 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinGradleBuildServices.kt @@ -72,8 +72,8 @@ internal class KotlinGradleBuildServices private constructor(gradle: Gradle): Bu private val log = Logging.getLogger(this.javaClass) private val cleanup = CompilerServicesCleanup() private var startMemory: Long? = null - private val workingDir = File(gradle.rootProject.buildDir, "kotlin-build").apply { mkdirs() } - private val buildCacheStorage = BuildCacheStorage(workingDir) + private val workingDir: File by lazy { File(gradle.rootProject.buildDir, "kotlin-build").apply { mkdirs() } } + private val buildCacheStorage: BuildCacheStorage by lazy { BuildCacheStorage(workingDir) } private val shouldReportMemoryUsage = System.getProperty(SHOULD_REPORT_MEMORY_USAGE_PROPERTY) != null internal val artifactDifferenceRegistryProvider: ArtifactDifferenceRegistryProvider 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 bd4af82fab2..0d11767021c 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 @@ -95,7 +95,7 @@ internal abstract class KotlinSourceSetProcessor>( val kotlinCompile = doCreateTask(project, name) kotlinCompile.description = taskDescription kotlinCompile.mapClasspath { sourceSet.compileClasspath } - kotlinCompile.destinationDir = defaultKotlinDestinationDir + kotlinCompile.setDestinationDir { defaultKotlinDestinationDir } sourceSet.output.tryAddClassesDir { project.files(kotlinTask.destinationDir).builtBy(kotlinTask) } return kotlinCompile } 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 e3a2a05b5ad..fd8e6a4e05a 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 @@ -97,6 +97,20 @@ abstract class AbstractKotlinCompile() : AbstractKo System.setProperty("kotlin.incremental.compilation.experimental", value.toString()) } + private lateinit var destinationDirProvider: Lazy + + override fun getDestinationDir(): File { + return destinationDirProvider.value + } + + fun setDestinationDir(provider: () -> File) { + destinationDirProvider = lazy(provider) + } + + override fun setDestinationDir(destinationDir: File) { + destinationDirProvider = lazyOf(destinationDir) + } + init { incremental = true //to execute the setter as well }