From 0b8ad5c6c0b4990d4f4e08063a73240003e500f6 Mon Sep 17 00:00:00 2001 From: Andrey Uskov Date: Wed, 24 Jul 2019 17:43:15 +0300 Subject: [PATCH] Fixed setting production-on-test flag if project was not build Make importing production-on-test flag more accurate when the project to be imported was not previously build --- .../kotlin/idea/KotlinJavaMPPSourceSetDataService.kt | 12 ++++++++++++ .../gradle/NewMultiplatformProjectImportingTest.kt | 3 +-- .../productionOnTestFlag/javaModule/build.gradle | 6 +++--- .../productionOnTestFlag/settings.gradle | 3 ++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/KotlinJavaMPPSourceSetDataService.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/KotlinJavaMPPSourceSetDataService.kt index 2ff602603d3..731b4d1ea58 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/KotlinJavaMPPSourceSetDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/KotlinJavaMPPSourceSetDataService.kt @@ -13,8 +13,11 @@ import com.intellij.openapi.externalSystem.service.project.manage.AbstractProjec import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.project.Project import com.intellij.openapi.roots.LibraryOrderEntry +import com.intellij.openapi.roots.ModuleOrderEntry import com.intellij.openapi.roots.OrderRootType +import com.intellij.openapi.roots.impl.ModuleOrderEntryImpl import com.intellij.openapi.vfs.VfsUtil +import org.jetbrains.kotlin.idea.caches.project.isTestModule import org.jetbrains.kotlin.idea.configuration.KotlinTargetData import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData @@ -22,6 +25,9 @@ import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData class KotlinJavaMPPSourceSetDataService : AbstractProjectDataService() { override fun getTargetDataKey() = GradleSourceSetData.KEY + private fun isTestModuleById(id: String, toImport: Collection>): Boolean = + toImport.firstOrNull { it.data.internalName == id }?.kotlinSourceSet?.isTestModule ?: false + override fun postProcess( toImport: MutableCollection>, projectData: ProjectData?, @@ -40,8 +46,14 @@ class KotlinJavaMPPSourceSetDataService : AbstractProjectDataService() + moduleEntries.filter { isTestModuleById(it.moduleName, toImport) }.forEach {moduleOrderEntry -> + (moduleOrderEntry as? ModuleOrderEntryImpl)?.isProductionOnTestDependency = true + } val libraryEntries = rootModel.orderEntries.filterIsInstance() libraryEntries.forEach { libraryEntry -> + //TODO check that this code is nessecary any more. In general case all dependencies on MPP are already resolved into module dependencies val library = libraryEntry.library ?: return@forEach val libraryModel = modelsProvider.getModifiableLibraryModel(library) val classesUrl = libraryModel.getUrls(OrderRootType.CLASSES).singleOrNull() ?: return@forEach 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 da1ebe0dc47..a1501077731 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/NewMultiplatformProjectImportingTest.kt @@ -585,8 +585,7 @@ class NewMultiplatformProjectImportingTest : MultiplePluginVersionGradleImportin checkProjectStructure(false, false, false ) { module("project.javaModule.test") { - moduleDependency("project.mppModule.jvmTest", DependencyScope.TEST, true) - moduleDependency("project.mppModule.jvmMain", DependencyScope.COMPILE, false) + moduleDependency("project.mppModule.jvmTest", DependencyScope.COMPILE, true) } } } diff --git a/idea/testData/gradle/newMultiplatformImport/productionOnTestFlag/javaModule/build.gradle b/idea/testData/gradle/newMultiplatformImport/productionOnTestFlag/javaModule/build.gradle index a58b2b14715..663dfd4a6f9 100644 --- a/idea/testData/gradle/newMultiplatformImport/productionOnTestFlag/javaModule/build.gradle +++ b/idea/testData/gradle/newMultiplatformImport/productionOnTestFlag/javaModule/build.gradle @@ -1,6 +1,6 @@ apply plugin: 'kotlin' - +evaluationDependsOn(":mppModule") dependencies { - testCompile project(':mppModule') -} + testCompile project(':mppModule').kotlin.targets.jvm.compilations.test.output.allOutputs +} \ No newline at end of file diff --git a/idea/testData/gradle/newMultiplatformImport/productionOnTestFlag/settings.gradle b/idea/testData/gradle/newMultiplatformImport/productionOnTestFlag/settings.gradle index 30c76d69ad9..7e0ca8d3d6d 100644 --- a/idea/testData/gradle/newMultiplatformImport/productionOnTestFlag/settings.gradle +++ b/idea/testData/gradle/newMultiplatformImport/productionOnTestFlag/settings.gradle @@ -1,2 +1,3 @@ -include 'javaModule' include 'mppModule' +include 'javaModule' +