From e1d22b8515fcb35bd5296b8cbc8cc20f20b511f0 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 22 May 2018 01:54:01 +0300 Subject: [PATCH] MPP: Fix implemented modules importing in Android projects (#KT-23697) --- .../KotlinGradleSourceSetDataService.kt.as31 | 4 +- .../KotlinGradleSourceSetDataService.kt.as32 | 4 +- .../MultiplatformProjectImportingTest.kt | 85 +++++++++++++++++++ 3 files changed, 91 insertions(+), 2 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt.as31 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt.as31 index ac49db4dc29..d4ac144394d 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt.as31 +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt.as31 @@ -222,7 +222,9 @@ fun configureFacetByGradleModule( } with(kotlinFacet.configuration.settings) { - implementedModuleNames = getImplementedModuleNames(moduleNode, sourceSetName, ideModule.project) + val sourceSetNameForImplementedModules = if (ideModule.getBuildSystemType() == AndroidGradle) null else sourceSetName + implementedModuleNames = getImplementedModuleNames(moduleNode, sourceSetNameForImplementedModules, ideModule.project) + productionOutputPath = getExplicitOutputPath(moduleNode, platformKind, "main") testOutputPath = getExplicitOutputPath(moduleNode, platformKind, "test") } diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt.as32 b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt.as32 index 032a789dea8..6409ae8e8c9 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt.as32 +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt.as32 @@ -221,7 +221,9 @@ fun configureFacetByGradleModule( } with(kotlinFacet.configuration.settings) { - implementedModuleNames = getImplementedModuleNames(moduleNode, sourceSetName, ideModule.project) + val sourceSetNameForImplementedModules = if (ideModule.getBuildSystemType() == AndroidGradle) null else sourceSetName + implementedModuleNames = getImplementedModuleNames(moduleNode, sourceSetNameForImplementedModules, ideModule.project) + productionOutputPath = getExplicitOutputPath(moduleNode, platformKind, "main") testOutputPath = getExplicitOutputPath(moduleNode, platformKind, "test") } 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 5885ca6b929..48a5bb6f199 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/MultiplatformProjectImportingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/MultiplatformProjectImportingTest.kt @@ -718,6 +718,91 @@ class MultiplatformProjectImportingTest : GradleImportingTestCase() { } } + @Test + fun simpleAndroidAppWithCommonModule() { + createProjectSubFile( + "settings.gradle", + "include ':app', ':jvm', ':cmn'" + ) + + val kotlinVersion = "1.2.41" + + createProjectSubFile( + "build.gradle", """ + buildscript { + repositories { + jcenter() + maven { url 'https://maven.google.com' } + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + classpath 'com.android.tools.build:gradle:2.3.3' + } + } + + project('cmn') { + apply plugin: 'kotlin-platform-common' + } + + project('jvm') { + apply plugin: 'kotlin-platform-jvm' + + dependencies { + expectedBy project(":cmn") + } + } + + project('app') { + repositories { + mavenCentral() + } + + apply plugin: 'com.android.application' + apply plugin: 'kotlin-android' + + android { + compileSdkVersion 26 + buildToolsVersion "23.0.1" + defaultConfig { + applicationId "org.jetbrains.kotlin" + minSdkVersion 18 + targetSdkVersion 26 + versionCode 1 + versionName "1.0" + } + } + + dependencies { + compile project(":jvm") + } + } + """ + ) + createProjectSubFile( + "local.properties", """ + sdk.dir=/${KotlinTestUtils.getAndroidSdkSystemIndependentPath()} + """ + ) + + val isResolveModulePerSourceSet = getCurrentExternalProjectSettings().isResolveModulePerSourceSet + try { + currentExternalProjectSettings.isResolveModulePerSourceSet = true + importProject() + + assertModuleModuleDepScope("app", "cmn", DependencyScope.COMPILE) + TestCase.assertEquals(listOf("cmn"), facetSettings("app").implementedModuleNames) + + currentExternalProjectSettings.isResolveModulePerSourceSet = false + importProject() + + assertModuleModuleDepScope("app", "cmn", DependencyScope.COMPILE) + TestCase.assertEquals(listOf("cmn"), facetSettings("app").implementedModuleNames) + } finally { + currentExternalProjectSettings.isResolveModulePerSourceSet = isResolveModulePerSourceSet + } + } + @Test fun testJsTestOutputFile() { createProjectSubFile(