Gradle: Support 'expectedBy' configuration

This commit is contained in:
Alexey Sedunov
2017-10-13 19:06:50 +03:00
parent a2a8335bab
commit db34bae05b
2 changed files with 52 additions and 3 deletions
@@ -66,6 +66,52 @@ class MultiplatformProjectImportingTest : GradleImportingTestCase() {
assertModuleModuleDepScope("js_test", "common_test", DependencyScope.COMPILE)
}
@Test
fun testPlatformToCommonExpectedByDependency() {
createProjectSubFile("settings.gradle", "include ':common', ':jvm', ':js'")
val kotlinVersion = "1.2.0-beta-74"
createProjectSubFile("build.gradle", """
buildscript {
repositories {
mavenCentral()
maven { url 'http://dl.bintray.com/kotlin/kotlin-dev' }
}
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
}
}
project('common') {
apply plugin: 'kotlin-platform-common'
}
project('jvm') {
apply plugin: 'kotlin-platform-jvm'
dependencies {
expectedBy project(':common')
}
}
project('js') {
apply plugin: 'kotlin-platform-js'
dependencies {
expectedBy project(':common')
}
}
""")
importProject()
assertModuleModuleDepScope("jvm_main", "common_main", DependencyScope.COMPILE)
assertModuleModuleDepScope("jvm_test", "common_test", DependencyScope.COMPILE)
assertModuleModuleDepScope("js_main", "common_main", DependencyScope.COMPILE)
assertModuleModuleDepScope("js_test", "common_test", DependencyScope.COMPILE)
}
@Test
fun testPlatformToCommonDependencyRoot() {
createProjectSubFile("settings.gradle", "rootProject.name = 'foo'\ninclude ':jvm', ':js'")
@@ -18,7 +18,9 @@ package org.jetbrains.kotlin.gradle
import org.gradle.api.Project
import org.gradle.api.Task
import org.gradle.api.artifacts.Dependency
import org.gradle.api.artifacts.ProjectDependency
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
import org.jetbrains.plugins.gradle.tooling.ErrorMessageBuilder
import org.jetbrains.plugins.gradle.tooling.ModelBuilderService
import java.io.File
@@ -87,9 +89,10 @@ class KotlinGradleModelBuilder : AbstractKotlinGradleModelBuilder() {
override fun canBuild(modelName: String?): Boolean = modelName == KotlinGradleModel::class.java.name
private fun getImplements(project: Project): Project? {
val implementsConfiguration = project.configurations.run { findByName("implement") } ?: return null
val implementsProjectDependency = implementsConfiguration.dependencies.filterIsInstance<ProjectDependency>().firstOrNull()
return implementsProjectDependency?.dependencyProject
return listOf("expectedBy", "implement")
.flatMap { project.configurations.findByName(it)?.dependencies ?: emptySet<Dependency>() }
.firstIsInstanceOrNull<ProjectDependency>()
?.dependencyProject
}
// see GradleProjectResolverUtil.getModuleId() in IDEA codebase