Fix Gradle 5.0 deprecation warnings:

* DefaultSourceDirectorySet constructor is deprecated -> objects()
* IvyRepository.layout('pattern') { } is deprecated -> patternLayout { }

Issue #KT-26808 Fixed
This commit is contained in:
Sergey Igushkin
2018-10-24 15:51:42 +03:00
parent 557fb07f44
commit 67e82a54e5
3 changed files with 28 additions and 9 deletions
@@ -47,7 +47,7 @@ enum class KotlinPlatformType: Named, Serializable {
fun setupAttributesMatchingStrategy(attributesSchema: AttributesSchema) {
attributesSchema.attribute(KotlinPlatformType.attribute).run {
if (isGradleVersionAtLeast(4, 0)) {
if (isGradleAtLeast(4, 0)) {
compatibilityRules.add(CompatibilityRule::class.java)
disambiguationRules.add(DisambiguationRule::class.java)
}
@@ -56,5 +56,5 @@ enum class KotlinPlatformType: Named, Serializable {
}
}
private fun isGradleVersionAtLeast(major: Int, minor: Int) =
private fun isGradleAtLeast(major: Int, minor: Int) =
GradleVersion.current() >= GradleVersion.version("$major.$minor")
@@ -5,10 +5,12 @@
package org.jetbrains.kotlin.gradle.plugin.mpp
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.repositories.IvyArtifactRepository
import org.gradle.api.artifacts.repositories.IvyPatternRepositoryLayout
import org.gradle.api.artifacts.repositories.RepositoryLayout
import org.gradle.api.internal.file.FileResolver
import org.gradle.api.plugins.JavaPlugin
import org.gradle.internal.reflect.Instantiator
@@ -23,6 +25,7 @@ import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinT
import org.jetbrains.kotlin.gradle.tasks.AndroidTasksProvider
import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
import org.jetbrains.kotlin.gradle.utils.NativeCompilerDownloader
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.konan.KonanVersion
import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
@@ -280,7 +283,16 @@ class KotlinNativeTargetPreset(
this.repositories.ivy { repo ->
repo.name = KOTLIN_NATIVE_FAKE_REPO_NAME
repo.setUrl("file://$konanHome/klib")
repo.layout("pattern") {
fun IvyArtifactRepository.layoutCompatible(configureAction: (RepositoryLayout) -> Unit) =
if (isGradleVersionAtLeast(5, 0)) {
val patternLayoutFunction = javaClass.getMethod("patternLayout", Action::class.java)
patternLayoutFunction(repo, Action<RepositoryLayout> { configureAction(it) })
} else {
layout("pattern", configureAction)
}
repo.layoutCompatible {
val layout = it as IvyPatternRepositoryLayout
layout.artifact("common/[artifact]")
layout.artifact("platform/[classifier]/[artifact]")
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
import org.jetbrains.kotlin.gradle.plugin.mpp.DefaultKotlinDependencyHandler
import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import java.lang.reflect.Constructor
import java.util.*
@@ -53,7 +54,7 @@ class DefaultKotlinSourceSet(
override val runtimeOnlyMetadataConfigurationName: String
get() = lowerCamelCaseName(runtimeOnlyConfigurationName, METADATA_CONFIGURATION_NAME_SUFFIX)
override val kotlin: SourceDirectorySet = createDefaultSourceDirectorySet(name + " Kotlin source", fileResolver).apply {
override val kotlin: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name Kotlin source", fileResolver).apply {
filter.include("**/*.java")
filter.include("**/*.kt")
filter.include("**/*.kts")
@@ -61,7 +62,7 @@ class DefaultKotlinSourceSet(
override val languageSettings: LanguageSettingsBuilder = DefaultLanguageSettingsBuilder()
override val resources: SourceDirectorySet = createDefaultSourceDirectorySet(displayName + " resources", fileResolver)
override val resources: SourceDirectorySet = createDefaultSourceDirectorySet(project, "$name resources", fileResolver)
override fun kotlin(configureClosure: Closure<Any?>): SourceDirectorySet =
kotlin.apply { ConfigureUtil.configure(configureClosure, this) }
@@ -137,20 +138,26 @@ internal fun KotlinSourceSet.disambiguateName(simpleName: String): String {
return lowerCamelCaseName(*nameParts.toTypedArray())
}
private val createDefaultSourceDirectorySet: (name: String?, resolver: FileResolver?) -> SourceDirectorySet = run {
private fun createDefaultSourceDirectorySet(project: Project, name: String?, resolver: FileResolver?): SourceDirectorySet {
if (isGradleVersionAtLeast(5, 0)) {
val objects = project.objects
val sourceDirectorySetMethod = objects.javaClass.methods.single { it.name == "sourceDirectorySet" && it.parameterCount == 2 }
return sourceDirectorySetMethod(objects, name, name) as SourceDirectorySet
}
val klass = DefaultSourceDirectorySet::class.java
val defaultConstructor = klass.constructorOrNull(String::class.java, FileResolver::class.java)
if (defaultConstructor != null && defaultConstructor.getAnnotation(java.lang.Deprecated::class.java) == null) {
return if (defaultConstructor != null && defaultConstructor.getAnnotation(java.lang.Deprecated::class.java) == null) {
// TODO: drop when gradle < 2.12 are obsolete
{ name, resolver -> defaultConstructor.newInstance(name, resolver) }
defaultConstructor.newInstance(name, resolver)
} else {
val directoryFileTreeFactoryClass = Class.forName("org.gradle.api.internal.file.collections.DirectoryFileTreeFactory")
val alternativeConstructor = klass.getConstructor(String::class.java, FileResolver::class.java, directoryFileTreeFactoryClass)
val defaultFileTreeFactoryClass = Class.forName("org.gradle.api.internal.file.collections.DefaultDirectoryFileTreeFactory")
val defaultFileTreeFactory = defaultFileTreeFactoryClass.getConstructor().newInstance()
return@run { name, resolver -> alternativeConstructor.newInstance(name, resolver, defaultFileTreeFactory) }
alternativeConstructor.newInstance(name, resolver, defaultFileTreeFactory)
}
}