From db34bae05b1fe1c0d70b5235469cf4177a620fec Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 13 Oct 2017 19:06:50 +0300 Subject: [PATCH] Gradle: Support 'expectedBy' configuration --- .../MultiplatformProjectImportingTest.kt | 46 +++++++++++++++++++ .../src/KotlinGradleModelBuilder.kt | 9 ++-- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/MultiplatformProjectImportingTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/MultiplatformProjectImportingTest.kt index 13f6658d3aa..ba22c1e8f4f 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/MultiplatformProjectImportingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/MultiplatformProjectImportingTest.kt @@ -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'") diff --git a/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt index e168d10e127..1527715171f 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt @@ -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().firstOrNull() - return implementsProjectDependency?.dependencyProject + return listOf("expectedBy", "implement") + .flatMap { project.configurations.findByName(it)?.dependencies ?: emptySet() } + .firstIsInstanceOrNull() + ?.dependencyProject } // see GradleProjectResolverUtil.getModuleId() in IDEA codebase