Fixed import of MPP project with single Android target

#KT-34639 Fixed
This commit is contained in:
Andrey Uskov
2019-10-28 19:43:43 +03:00
parent 5c3b00cd0c
commit fd2b75e39b
7 changed files with 175 additions and 5 deletions
@@ -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()
@@ -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
@@ -242,7 +242,13 @@ class KotlinPlatformContainerImpl() : KotlinPlatformContainer {
override fun supports(simplePlatform: KotlinPlatform): Boolean = platforms.contains(simplePlatform)
override fun addSimplePlatforms(platforms: Collection<KotlinPlatform>) {
(myPlatforms ?: HashSet<KotlinPlatform>().apply { myPlatforms = this }).addAll(platforms)
(myPlatforms ?: HashSet<KotlinPlatform>().apply { myPlatforms = this }).let {
it.addAll(platforms)
if (it.contains(KotlinPlatform.COMMON)) {
it.clear()
it.addAll(defaultCommonPlatform)
}
}
}
}
@@ -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')
}
}
}
}
@@ -0,0 +1,13 @@
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
}
}
repositories {
google()
jcenter()
}
@@ -0,0 +1 @@
kotlin.code.style=official
@@ -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'