From 801c97f4564cb60c343c3fafcaeff6b76ea6078e Mon Sep 17 00:00:00 2001 From: Alex Plate Date: Wed, 19 Feb 2020 14:35:37 +0300 Subject: [PATCH] Use ModuleOrderEntry instead of ModuleOrderEntryImpl `isProductionOnTestDependency` function was moved from implementation to interface. The fix is important for the new IJ project model. --- .../kotlin/idea/caches/project/IdeaModuleInfos.kt | 5 ++--- .../kotlin/idea/KotlinJavaMPPSourceSetDataService.kt | 3 +-- idea/idea-gradle/src/org/jetbrains/kotlin/idea/utils.kt | 7 +++---- .../kotlin/gradle/MultiplatformProjectImportingTest.kt | 4 ++-- .../org/jetbrains/kotlin/gradle/projectStructureDSL.kt | 3 +-- 5 files changed, 9 insertions(+), 13 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt index 45b081285e7..232198f748e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt @@ -11,7 +11,6 @@ import com.intellij.openapi.module.impl.scopes.LibraryScopeBase import com.intellij.openapi.project.Project import com.intellij.openapi.projectRoots.Sdk import com.intellij.openapi.roots.* -import com.intellij.openapi.roots.impl.ModuleOrderEntryImpl import com.intellij.openapi.roots.impl.libraries.LibraryEx import com.intellij.openapi.roots.libraries.Library import com.intellij.openapi.util.ModificationTracker @@ -92,7 +91,7 @@ private fun orderEntryToModuleInfo(project: Project, orderEntry: OrderEntry, for } is ModuleOrderEntry -> { val module = orderEntry.module ?: return emptyList() - if (forProduction && orderEntry is ModuleOrderEntryImpl && orderEntry.isProductionOnTestDependency) { + if (forProduction && orderEntry.isProductionOnTestDependency) { listOfNotNull(module.testSourceInfo()) } else { module.toInfos() @@ -131,7 +130,7 @@ private fun OrderEntry.acceptAsDependency(forProduction: Boolean): Boolean { return this !is ExportableOrderEntry || !forProduction // this is needed for Maven/Gradle projects with "production-on-test" dependency - || this is ModuleOrderEntryImpl && isProductionOnTestDependency + || this is ModuleOrderEntry && isProductionOnTestDependency || scope.isForProductionCompile } 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 325e445dcf2..540bf3e9eb3 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/KotlinJavaMPPSourceSetDataService.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/KotlinJavaMPPSourceSetDataService.kt @@ -15,7 +15,6 @@ 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.configuration.KotlinTargetData import org.jetbrains.kotlin.idea.configuration.kotlinSourceSet @@ -48,7 +47,7 @@ class KotlinJavaMPPSourceSetDataService : AbstractProjectDataService() moduleEntries.filter { isTestModuleById(it.moduleName, toImport) }.forEach { moduleOrderEntry -> - (moduleOrderEntry as? ModuleOrderEntryImpl)?.isProductionOnTestDependency = true + moduleOrderEntry.isProductionOnTestDependency = true } val libraryEntries = rootModel.orderEntries.filterIsInstance() libraryEntries.forEach { libraryEntry -> diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/utils.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/utils.kt index 57678bae961..94e877d11b9 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/utils.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/utils.kt @@ -5,11 +5,10 @@ package org.jetbrains.kotlin.idea +import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.module.Module import com.intellij.openapi.roots.DependencyScope import com.intellij.openapi.roots.ModifiableRootModel -import com.intellij.openapi.roots.impl.ModuleOrderEntryImpl -import com.intellij.openapi.diagnostic.Logger /** * Returns the dependency scope which has flags specific to the both provided scopes @@ -57,7 +56,7 @@ fun addModuleDependencyIfNeeded( dependOnTest: Boolean ) { val existingEntry = rootModel.findModuleOrderEntry(dependeeModule) - val existingDependOnTest = (existingEntry as? ModuleOrderEntryImpl)?.isProductionOnTestDependency ?: false + val existingDependOnTest = existingEntry?.isProductionOnTestDependency ?: false val requiredScope = getScopeContainingBoth(if (testScope) DependencyScope.TEST else DependencyScope.COMPILE, existingEntry?.scope) if (existingEntry != null) { @@ -72,6 +71,6 @@ fun addModuleDependencyIfNeeded( } rootModel.addModuleOrderEntry(dependeeModule).also { it.scope = requiredScope - (it as? ModuleOrderEntryImpl)?.isProductionOnTestDependency = dependOnTest || existingDependOnTest + it.isProductionOnTestDependency = dependOnTest || existingDependOnTest } } \ No newline at end of file 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 48a972645ba..3c3da21ca5b 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/MultiplatformProjectImportingTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/MultiplatformProjectImportingTest.kt @@ -18,8 +18,8 @@ package org.jetbrains.kotlin.gradle import com.intellij.openapi.roots.DependencyScope 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.VirtualFile import com.intellij.util.PathUtil import junit.framework.TestCase @@ -43,7 +43,7 @@ class MultiplatformProjectImportingTest : MultiplePluginVersionGradleImportingTe val depOrderEntry = getModule(moduleName) .rootManager .orderEntries - .filterIsInstance() + .filterIsInstance() .first { it.moduleName == depModuleName } assert(depOrderEntry.isProductionOnTestDependency == expected) } diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt index 7545fde60db..3f0965e0ad5 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/gradle/projectStructureDSL.kt @@ -10,7 +10,6 @@ import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.project.Project import com.intellij.openapi.project.rootManager import com.intellij.openapi.roots.* -import com.intellij.openapi.roots.impl.ModuleOrderEntryImpl import com.intellij.openapi.util.io.FileUtil import org.jetbrains.jps.model.module.JpsModuleSourceRootType import org.jetbrains.jps.util.JpsPathUtil @@ -319,7 +318,7 @@ class ModuleInfo( private fun checkProductionOnTest(library: ExportableOrderEntry, productionOnTest: Boolean?) { if (productionOnTest == null) return - val actualFlag = (library as? ModuleOrderEntryImpl)?.isProductionOnTestDependency + val actualFlag = (library as? ModuleOrderEntry)?.isProductionOnTestDependency if (actualFlag == null) { projectInfo.messageCollector.report( "Module '${module.name}': Dependency '${library.presentableName}' has no productionOnTest property"