diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt index 0d74d90300f..131d218e850 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/providerApiUtils.kt @@ -6,8 +6,8 @@ package org.jetbrains.kotlin.gradle.utils import org.gradle.api.Project -import org.gradle.api.file.RegularFileProperty import org.gradle.api.file.RegularFile +import org.gradle.api.file.RegularFileProperty import org.gradle.api.provider.Property import org.gradle.api.provider.Provider import java.io.File @@ -38,9 +38,17 @@ private class OptionalProviderDelegate(private val provider: Provider) : internal fun Project.optionalProvider(initialize: () -> T?): ReadOnlyProperty = OptionalProviderDelegate(provider(initialize)) +// Before 5.0 fileProperty is created via ProjectLayout +// https://docs.gradle.org/current/javadoc/org/gradle/api/model/ObjectFactory.html#fileProperty-- internal fun Project.newFileProperty(initialize: (() -> File)? = null): RegularFileProperty = - project.objects.fileProperty().apply { - if (initialize != null) { - set(provider { RegularFile(initialize) }) + if (isGradleVersionAtLeast(5, 0)) { + project.objects.fileProperty().apply { + if (initialize != null) { + set(provider { RegularFile(initialize) }) + } } + } else { + val projectLayoutClass = Class.forName("org.gradle.api.file.ProjectLayout") + val filePropertyMethod = projectLayoutClass.getMethod("fileProperty") + filePropertyMethod(project.layout) as RegularFileProperty } \ No newline at end of file