1*68017707SAndroid Build Coastguard Worker @file:JvmName("KotlinConfiguration") 2*68017707SAndroid Build Coastguard Worker 3*68017707SAndroid Build Coastguard Worker import org.gradle.api.Project 4*68017707SAndroid Build Coastguard Worker import org.gradle.api.artifacts.dsl.RepositoryHandler 5*68017707SAndroid Build Coastguard Worker import java.net.URI 6*68017707SAndroid Build Coastguard Worker import java.util.logging.Logger 7*68017707SAndroid Build Coastguard Worker 8*68017707SAndroid Build Coastguard Worker /* 9*68017707SAndroid Build Coastguard Worker * Functions in this file are responsible for configuring atomicfu build 10*68017707SAndroid Build Coastguard Worker * against a custom development version of Kotlin compiler. 11*68017707SAndroid Build Coastguard Worker * Such configuration is used in Kotlin aggregate builds and builds of Kotlin user projects 12*68017707SAndroid Build Coastguard Worker * in order to check whether not-yet-released changes are compatible with our libraries 13*68017707SAndroid Build Coastguard Worker * (aka "integration testing that substitutes lack of unit testing"). 14*68017707SAndroid Build Coastguard Worker */ 15*68017707SAndroid Build Coastguard Worker 16*68017707SAndroid Build Coastguard Worker private val LOGGER: Logger = Logger.getLogger("Kotlin settings logger") 17*68017707SAndroid Build Coastguard Worker 18*68017707SAndroid Build Coastguard Worker /** 19*68017707SAndroid Build Coastguard Worker * Should be used for running against a non-released Kotlin compiler on a system test level. 20*68017707SAndroid Build Coastguard Worker * 21*68017707SAndroid Build Coastguard Worker * @return a custom repository with development builds of the Kotlin compiler taken from: 22*68017707SAndroid Build Coastguard Worker * 23*68017707SAndroid Build Coastguard Worker * 1. the Kotlin community project Gradle plugin, 24*68017707SAndroid Build Coastguard Worker * 2. or `kotlin_repo_url` Gradle property (from command line or from `gradle.properties`), 25*68017707SAndroid Build Coastguard Worker * 26*68017707SAndroid Build Coastguard Worker * or null otherwise 27*68017707SAndroid Build Coastguard Worker */ getCustomKotlinRepositoryURLnull28*68017707SAndroid Build Coastguard Workerfun getCustomKotlinRepositoryURL(project: Project): String? { 29*68017707SAndroid Build Coastguard Worker val communityPluginKotlinRepoURL = project.findProperty("community.project.kotlin.repo") as? String 30*68017707SAndroid Build Coastguard Worker val gradlePropertyKotlinRepoURL = project.findProperty("kotlin_repo_url") as? String 31*68017707SAndroid Build Coastguard Worker val kotlinRepoURL = when { 32*68017707SAndroid Build Coastguard Worker communityPluginKotlinRepoURL != null -> communityPluginKotlinRepoURL 33*68017707SAndroid Build Coastguard Worker gradlePropertyKotlinRepoURL != null -> gradlePropertyKotlinRepoURL 34*68017707SAndroid Build Coastguard Worker else -> return null 35*68017707SAndroid Build Coastguard Worker } 36*68017707SAndroid Build Coastguard Worker LOGGER.info("A custom Kotlin repository $kotlinRepoURL was found for project ${project.name}") 37*68017707SAndroid Build Coastguard Worker return kotlinRepoURL 38*68017707SAndroid Build Coastguard Worker } 39*68017707SAndroid Build Coastguard Worker 40*68017707SAndroid Build Coastguard Worker /** 41*68017707SAndroid Build Coastguard Worker * Should be used for running against a non-released Kotlin compiler on a system test level. 42*68017707SAndroid Build Coastguard Worker * 43*68017707SAndroid Build Coastguard Worker * Adds a custom repository with development builds of the Kotlin compiler to [repositoryHandler] 44*68017707SAndroid Build Coastguard Worker * if the URL is provided (see [getCustomKotlinRepositoryURL]). 45*68017707SAndroid Build Coastguard Worker */ addCustomKotlinRepositoryIfEnablednull46*68017707SAndroid Build Coastguard Workerfun addCustomKotlinRepositoryIfEnabled(repositoryHandler: RepositoryHandler, project: Project) { 47*68017707SAndroid Build Coastguard Worker val kotlinRepoURL = getCustomKotlinRepositoryURL(project) ?: return 48*68017707SAndroid Build Coastguard Worker repositoryHandler.maven { url = URI.create(kotlinRepoURL) } 49*68017707SAndroid Build Coastguard Worker 50*68017707SAndroid Build Coastguard Worker } 51*68017707SAndroid Build Coastguard Worker 52*68017707SAndroid Build Coastguard Worker /** 53*68017707SAndroid Build Coastguard Worker * Should be used for running against a non-released Kotlin compiler on a system test level. 54*68017707SAndroid Build Coastguard Worker * 55*68017707SAndroid Build Coastguard Worker * @return a Kotlin version taken from the Kotlin community project Gradle plugin, 56*68017707SAndroid Build Coastguard Worker * or null otherwise 57*68017707SAndroid Build Coastguard Worker */ getOverridingKotlinVersionnull58*68017707SAndroid Build Coastguard Workerfun getOverridingKotlinVersion(project: Project): String? { 59*68017707SAndroid Build Coastguard Worker val communityPluginKotlinVersion = project.findProperty("community.project.kotlin.version") as? String 60*68017707SAndroid Build Coastguard Worker // add any other ways of overriding the Kotlin version here 61*68017707SAndroid Build Coastguard Worker val kotlinVersion = when { 62*68017707SAndroid Build Coastguard Worker communityPluginKotlinVersion != null -> communityPluginKotlinVersion 63*68017707SAndroid Build Coastguard Worker // add any other ways of overriding the Kotlin version here 64*68017707SAndroid Build Coastguard Worker else -> return null 65*68017707SAndroid Build Coastguard Worker } 66*68017707SAndroid Build Coastguard Worker LOGGER.info("An overriding Kotlin version of $kotlinVersion was found for project ${project.name}") 67*68017707SAndroid Build Coastguard Worker return kotlinVersion 68*68017707SAndroid Build Coastguard Worker } 69*68017707SAndroid Build Coastguard Worker 70*68017707SAndroid Build Coastguard Worker /** 71*68017707SAndroid Build Coastguard Worker * Should be used for running against a non-released Kotlin compiler on a system test level. 72*68017707SAndroid Build Coastguard Worker * 73*68017707SAndroid Build Coastguard Worker * @return a Kotlin language version taken from: 74*68017707SAndroid Build Coastguard Worker * 75*68017707SAndroid Build Coastguard Worker * 1. the Kotlin community project Gradle plugin, 76*68017707SAndroid Build Coastguard Worker * 2. or `kotlin_language_version` Gradle property (from command line or from `gradle.properties`), 77*68017707SAndroid Build Coastguard Worker * 78*68017707SAndroid Build Coastguard Worker * or null otherwise 79*68017707SAndroid Build Coastguard Worker */ getOverridingKotlinLanguageVersionnull80*68017707SAndroid Build Coastguard Workerfun getOverridingKotlinLanguageVersion(project: Project): String? { 81*68017707SAndroid Build Coastguard Worker val communityPluginLanguageVersion = project.findProperty("community.project.kotlin.languageVersion") as? String 82*68017707SAndroid Build Coastguard Worker val gradlePropertyLanguageVersion = project.findProperty("kotlin_language_version") as? String 83*68017707SAndroid Build Coastguard Worker val languageVersion = when { 84*68017707SAndroid Build Coastguard Worker communityPluginLanguageVersion != null -> communityPluginLanguageVersion 85*68017707SAndroid Build Coastguard Worker gradlePropertyLanguageVersion != null -> gradlePropertyLanguageVersion 86*68017707SAndroid Build Coastguard Worker else -> return null 87*68017707SAndroid Build Coastguard Worker } 88*68017707SAndroid Build Coastguard Worker LOGGER.info("An overriding Kotlin language version of $languageVersion was found for project ${project.name}") 89*68017707SAndroid Build Coastguard Worker return languageVersion 90*68017707SAndroid Build Coastguard Worker } 91*68017707SAndroid Build Coastguard Worker 92*68017707SAndroid Build Coastguard Worker /** 93*68017707SAndroid Build Coastguard Worker * Should be used for running against a non-released Kotlin compiler on a system test level. 94*68017707SAndroid Build Coastguard Worker * 95*68017707SAndroid Build Coastguard Worker * @return a Kotlin API version taken from: 96*68017707SAndroid Build Coastguard Worker * 97*68017707SAndroid Build Coastguard Worker * 1. the Kotlin community project Gradle plugin, 98*68017707SAndroid Build Coastguard Worker * 2. or `kotlin_language_version` Gradle property (from command line or from `gradle.properties`), 99*68017707SAndroid Build Coastguard Worker * 100*68017707SAndroid Build Coastguard Worker * or null otherwise 101*68017707SAndroid Build Coastguard Worker */ getOverridingKotlinApiVersionnull102*68017707SAndroid Build Coastguard Workerfun getOverridingKotlinApiVersion(project: Project): String? { 103*68017707SAndroid Build Coastguard Worker val communityPluginApiVersion = project.findProperty("community.project.kotlin.apiVersion") as? String 104*68017707SAndroid Build Coastguard Worker val gradlePropertyApiVersion = project.findProperty("kotlin_api_version") as? String 105*68017707SAndroid Build Coastguard Worker val apiVersion = when { 106*68017707SAndroid Build Coastguard Worker communityPluginApiVersion != null -> communityPluginApiVersion 107*68017707SAndroid Build Coastguard Worker gradlePropertyApiVersion != null -> gradlePropertyApiVersion 108*68017707SAndroid Build Coastguard Worker else -> return null 109*68017707SAndroid Build Coastguard Worker } 110*68017707SAndroid Build Coastguard Worker LOGGER.info("An overriding Kotlin api version of $apiVersion was found for project ${project.name}") 111*68017707SAndroid Build Coastguard Worker return apiVersion 112*68017707SAndroid Build Coastguard Worker } 113