From fd2b75e39b285e27eccc9b97a334d33b6ea0764b Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Mon, 28 Oct 2019 19:43:43 +0300 Subject: [PATCH] Fixed import of MPP project with single Android target #KT-34639 Fixed --- .../NewMultiplatformProjectImportingTest.kt | 62 +++++++++++++++- .../src/KotlinMPPGradleModelBuilder.kt | 12 +++ .../src/KotlinMPPGradleModelImpl.kt | 8 +- .../singleAndroidTarget/app/build.gradle | 74 +++++++++++++++++++ .../singleAndroidTarget/build.gradle | 13 ++++ .../singleAndroidTarget/gradle.properties | 1 + .../singleAndroidTarget/settings.gradle | 10 +++ 7 files changed, 175 insertions(+), 5 deletions(-) create mode 100644 idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/app/build.gradle create mode 100644 idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/build.gradle create mode 100644 idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/gradle.properties create mode 100644 idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/settings.gradle diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt index 78375bee289..1e4f9ee904d 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt @@ -8,10 +8,7 @@ package org.jetbrains.kotlin.gradle import com.intellij.openapi.roots.DependencyScope import org.jetbrains.jps.model.java.JavaResourceRootType import org.jetbrains.jps.model.java.JavaSourceRootType -import org.jetbrains.kotlin.config.ResourceKotlinRootType -import org.jetbrains.kotlin.config.SourceKotlinRootType -import org.jetbrains.kotlin.config.TestResourceKotlinRootType -import org.jetbrains.kotlin.config.TestSourceKotlinRootType +import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.idea.codeInsight.gradle.MultiplePluginVersionGradleImportingTestCase import org.jetbrains.kotlin.platform.CommonPlatforms import org.jetbrains.kotlin.platform.js.JsPlatforms @@ -429,6 +426,63 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin } } + + @Test + fun testSingleAndroidTarget() { + configureByFiles() + importProject() + checkProjectStructure(exhaustiveDependencyList = false) { + module("app") { + sourceFolder("app/src/androidAndroidTest/kotlin", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/androidAndroidTestDebug/kotlin", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/androidDebug/kotlin", JavaSourceRootType.SOURCE) + sourceFolder("app/src/androidDebugAndroidTest/kotlin", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/androidDebugUnitTest/kotlin", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/androidMain/kotlin", JavaSourceRootType.SOURCE) + sourceFolder("app/src/androidRelease/kotlin", JavaSourceRootType.SOURCE) + sourceFolder("app/src/androidReleaseUnitTest/kotlin", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/androidTest/java", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/androidTest/kotlin", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/androidTestDebug/java", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/androidTestDebug/kotlin", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/androidTestRelease/kotlin", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/debug/java", JavaSourceRootType.SOURCE) + sourceFolder("app/src/debug/kotlin", JavaSourceRootType.SOURCE) + sourceFolder("app/src/main/java", JavaSourceRootType.SOURCE) + sourceFolder("app/src/main/kotlin", JavaSourceRootType.SOURCE) + sourceFolder("app/src/release/java", JavaSourceRootType.SOURCE) + sourceFolder("app/src/release/kotlin", JavaSourceRootType.SOURCE) + sourceFolder("app/src/test/java", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/test/kotlin", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/testDebug/java", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/testDebug/kotlin", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/testRelease/java", JavaSourceRootType.TEST_SOURCE) + sourceFolder("app/src/testRelease/kotlin", JavaSourceRootType.TEST_SOURCE) + + sourceFolder("app/src/androidAndroidTest/resources", JavaResourceRootType.TEST_RESOURCE) + sourceFolder("app/src/androidAndroidTestDebug/resources", JavaResourceRootType.TEST_RESOURCE) + sourceFolder("app/src/androidDebug/resources", JavaResourceRootType.RESOURCE) + sourceFolder("app/src/androidDebugAndroidTest/resources", JavaResourceRootType.TEST_RESOURCE) + sourceFolder("app/src/androidDebugUnitTest/resources", JavaResourceRootType.TEST_RESOURCE) + sourceFolder("app/src/androidMain/resources", JavaResourceRootType.RESOURCE) + sourceFolder("app/src/androidRelease/resources", JavaResourceRootType.RESOURCE) + sourceFolder("app/src/androidReleaseUnitTest/resources", JavaResourceRootType.TEST_RESOURCE) + sourceFolder("app/src/androidTest/resources", JavaResourceRootType.TEST_RESOURCE) + sourceFolder("app/src/androidTestDebug/resources", JavaResourceRootType.TEST_RESOURCE) + sourceFolder("app/src/androidTestRelease/resources", JavaResourceRootType.TEST_RESOURCE) + } + module("app_commonMain") { + sourceFolder("app/src/commonMain/kotlin", SourceKotlinRootType) + sourceFolder("app/src/commonMain/resources", ResourceKotlinRootType) + } + module("app_commonTest") { + sourceFolder("app/src/commonTest/kotlin", TestSourceKotlinRootType) + sourceFolder("app/src/commonTest/resources", TestResourceKotlinRootType) + } + module("project") + } + } + @Test fun testDependencyOnRoot() { configureByFiles() diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt index bcded8dbc30..de92719d8fa 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelBuilder.kt @@ -668,6 +668,18 @@ class KotlinMPPGradleModelBuilder : ModelBuilderService { } for (sourceSet in sourceSets.values) { + if (!isHMPPEnabled) { + val name = sourceSet.name + if (name == KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME) { + sourceSet.isTestModule = false + continue + } + if (name == KotlinSourceSet.COMMON_TEST_SOURCE_SET_NAME) { + sourceSet.isTestModule = true + continue + } + } + (allSourceSetToCompilations[sourceSet]?.all { it.isTestModule } ?: if (!isHMPPEnabled && sourceSet.name == KotlinSourceSet.COMMON_TEST_SOURCE_SET_NAME) true else null)?.let { isTest -> sourceSet.isTestModule = isTest diff --git a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt index 9d940d918e4..5c89900b365 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinMPPGradleModelImpl.kt @@ -242,7 +242,13 @@ class KotlinPlatformContainerImpl() : KotlinPlatformContainer { override fun supports(simplePlatform: KotlinPlatform): Boolean = platforms.contains(simplePlatform) override fun addSimplePlatforms(platforms: Collection) { - (myPlatforms ?: HashSet().apply { myPlatforms = this }).addAll(platforms) + (myPlatforms ?: HashSet().apply { myPlatforms = this }).let { + it.addAll(platforms) + if (it.contains(KotlinPlatform.COMMON)) { + it.clear() + it.addAll(defaultCommonPlatform) + } + } } } diff --git a/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/app/build.gradle b/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/app/build.gradle new file mode 100644 index 00000000000..33052cb2355 --- /dev/null +++ b/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/app/build.gradle @@ -0,0 +1,74 @@ +buildscript { + repositories { + mavenCentral() + maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' } + } + + dependencies { + apply from: "../include.gradle" + def kotlinVersion = gradleKotlinPluginVersion('1.3.50') + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + } +} + +apply plugin: 'kotlin-multiplatform' +repositories { + google() + jcenter() + maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' } + mavenCentral() +} +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android-extensions' + +android { + compileSdkVersion 28 + defaultConfig { + applicationId 'org.jetbrains.kotlin.mpp_app_android' + minSdkVersion 15 + targetSdkVersion 28 + versionCode 1 + versionName '1.0' + testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' + } + buildTypes { + release { + minifyEnabled false + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.android.support.constraint:constraint-layout:1.1.3' + androidTestImplementation 'com.android.support.test:runner:1.0.2' +} + +kotlin { + android("android") + sourceSets { + commonMain { + dependencies { + implementation kotlin('stdlib-common') + } + } + commonTest { + dependencies { + implementation kotlin('test-common') + implementation kotlin('test-annotations-common') + } + } + androidMain { + dependencies { + implementation kotlin('stdlib') + } + } + androidTest { + dependencies { + implementation kotlin('test') + implementation kotlin('test-junit') + } + } + } +} diff --git a/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/build.gradle b/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/build.gradle new file mode 100644 index 00000000000..48f8cec3fc4 --- /dev/null +++ b/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/build.gradle @@ -0,0 +1,13 @@ +buildscript { + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.2.1' + } +} +repositories { + google() + jcenter() +} diff --git a/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/gradle.properties b/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/gradle.properties new file mode 100644 index 00000000000..7fc6f1ff272 --- /dev/null +++ b/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/gradle.properties @@ -0,0 +1 @@ +kotlin.code.style=official diff --git a/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/settings.gradle b/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/settings.gradle new file mode 100644 index 00000000000..9f7e6e905f4 --- /dev/null +++ b/idea/testData/gradle/newMultiplatformImport/singleAndroidTarget/settings.gradle @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + maven { url 'https://dl.bintray.com/kotlin/kotlin-dev' } + + mavenCentral() + + maven { url 'https://plugins.gradle.org/m2/' } + } +} +include ':app'