From c208f038ad46ba8625f13c6df42a8d488f01ca38 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 29 Jan 2020 16:33:12 +0300 Subject: [PATCH] [Gradle, JS] Fix gradle <5.1 incompatibility with fileProperty --- .../kotlin/gradle/utils/providerApiUtils.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) 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