Refactor MPP versioning
- Use 'null' as indicator of non-MPP version. Consequently, remove useless 'isMpp' method, and lift all methods to extensions (to be able to call them on nullable 'facetSettings.mppVersion') - Change semantics of extensions to check for exact equality rather than for "at least specified version" - Deprecate old MPP-versioning in favour of 'facetSettings.mppVersion'
This commit is contained in:
+6
-2
@@ -15,6 +15,9 @@ import org.jetbrains.kotlin.analyzer.ModuleInfo
|
|||||||
import org.jetbrains.kotlin.caches.project.cacheInvalidatingOnRootModifications
|
import org.jetbrains.kotlin.caches.project.cacheInvalidatingOnRootModifications
|
||||||
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
|
import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
|
||||||
import org.jetbrains.kotlin.config.KotlinFacetSettings
|
import org.jetbrains.kotlin.config.KotlinFacetSettings
|
||||||
|
import org.jetbrains.kotlin.config.KotlinMultiplatformVersion
|
||||||
|
import org.jetbrains.kotlin.config.isHmpp
|
||||||
|
import org.jetbrains.kotlin.config.isNewMPP
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.project.SourceType.PRODUCTION
|
import org.jetbrains.kotlin.idea.caches.project.SourceType.PRODUCTION
|
||||||
import org.jetbrains.kotlin.idea.caches.project.SourceType.TEST
|
import org.jetbrains.kotlin.idea.caches.project.SourceType.TEST
|
||||||
@@ -28,7 +31,8 @@ import org.jetbrains.kotlin.platform.TargetPlatform
|
|||||||
import org.jetbrains.kotlin.platform.isCommon
|
import org.jetbrains.kotlin.platform.isCommon
|
||||||
|
|
||||||
val Module.isNewMPPModule: Boolean
|
val Module.isNewMPPModule: Boolean
|
||||||
get() = facetSettings?.kind?.isNewMPP ?: false
|
get() = facetSettings?.mppVersion.isNewMPP ||
|
||||||
|
facetSettings?.mppVersion.isHmpp // TODO: review clients, correct them to use precise checks for MPP version
|
||||||
|
|
||||||
val Module.externalProjectId: String
|
val Module.externalProjectId: String
|
||||||
get() = facetSettings?.externalProjectId ?: ""
|
get() = facetSettings?.externalProjectId ?: ""
|
||||||
@@ -43,7 +47,7 @@ val Module.isTestModule: Boolean
|
|||||||
get() = facetSettings?.isTestModule ?: false
|
get() = facetSettings?.isTestModule ?: false
|
||||||
|
|
||||||
val KotlinFacetSettings.isMPPModule: Boolean
|
val KotlinFacetSettings.isMPPModule: Boolean
|
||||||
get() = this.mppVersion?.isMPPModule ?: false
|
get() = this.mppVersion != null
|
||||||
|
|
||||||
private val Module.facetSettings get() = KotlinFacet.get(this)?.configuration?.settings
|
private val Module.facetSettings get() = KotlinFacet.get(this)?.configuration?.settings
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -12,6 +12,7 @@ import com.intellij.openapi.util.registry.Registry
|
|||||||
import com.intellij.util.text.nullize
|
import com.intellij.util.text.nullize
|
||||||
import org.jetbrains.kotlin.caches.project.cacheByClassInvalidatingOnRootModifications
|
import org.jetbrains.kotlin.caches.project.cacheByClassInvalidatingOnRootModifications
|
||||||
import org.jetbrains.kotlin.cli.common.toBooleanLenient
|
import org.jetbrains.kotlin.cli.common.toBooleanLenient
|
||||||
|
import org.jetbrains.kotlin.config.isHmpp
|
||||||
import org.jetbrains.kotlin.idea.facet.KotlinFacet
|
import org.jetbrains.kotlin.idea.facet.KotlinFacet
|
||||||
|
|
||||||
object KotlinMultiplatformAnalysisModeComponent {
|
object KotlinMultiplatformAnalysisModeComponent {
|
||||||
@@ -38,7 +39,7 @@ object KotlinMultiplatformAnalysisModeComponent {
|
|||||||
cacheByClassInvalidatingOnRootModifications(KotlinMultiplatformAnalysisModeComponent::class.java) {
|
cacheByClassInvalidatingOnRootModifications(KotlinMultiplatformAnalysisModeComponent::class.java) {
|
||||||
ModuleManager.getInstance(this).modules.asSequence()
|
ModuleManager.getInstance(this).modules.asSequence()
|
||||||
.mapNotNull { KotlinFacet.get(it) }
|
.mapNotNull { KotlinFacet.get(it) }
|
||||||
.any { it.configuration.settings.isHmppEnabled }
|
.any { it.configuration.settings.mppVersion.isHmpp }
|
||||||
}
|
}
|
||||||
|
|
||||||
enum class Mode {
|
enum class Mode {
|
||||||
|
|||||||
@@ -134,6 +134,7 @@ enum class KotlinModuleKind {
|
|||||||
SOURCE_SET_HOLDER,
|
SOURCE_SET_HOLDER,
|
||||||
COMPILATION_AND_SOURCE_SET_HOLDER;
|
COMPILATION_AND_SOURCE_SET_HOLDER;
|
||||||
|
|
||||||
|
@Deprecated("Use KotlinFacetSettings.mppVersion.isNewMpp")
|
||||||
val isNewMPP: Boolean
|
val isNewMPP: Boolean
|
||||||
get() = this != DEFAULT
|
get() = this != DEFAULT
|
||||||
}
|
}
|
||||||
@@ -141,18 +142,18 @@ enum class KotlinModuleKind {
|
|||||||
enum class KotlinMultiplatformVersion(val version: Int) {
|
enum class KotlinMultiplatformVersion(val version: Int) {
|
||||||
M1(1), // the first implementation of MPP. Aka 1.2.0 MPP
|
M1(1), // the first implementation of MPP. Aka 1.2.0 MPP
|
||||||
M2(2), // the "New" MPP. Aka 1.3.0 MPP
|
M2(2), // the "New" MPP. Aka 1.3.0 MPP
|
||||||
M3(3); // the "Hierarchical" MPP.
|
M3(3) // the "Hierarchical" MPP.
|
||||||
|
|
||||||
val isMPPModule: Boolean
|
|
||||||
get() = version >= 1
|
|
||||||
|
|
||||||
val isNewMPP: Boolean
|
|
||||||
get() = version >= 2
|
|
||||||
|
|
||||||
val isHMPP: Boolean
|
|
||||||
get() = version >= 3
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val KotlinMultiplatformVersion?.isOldMpp: Boolean
|
||||||
|
get() = this == KotlinMultiplatformVersion.M1
|
||||||
|
|
||||||
|
val KotlinMultiplatformVersion?.isNewMPP: Boolean
|
||||||
|
get() = this == KotlinMultiplatformVersion.M2
|
||||||
|
|
||||||
|
val KotlinMultiplatformVersion?.isHmpp: Boolean
|
||||||
|
get() = this == KotlinMultiplatformVersion.M3
|
||||||
|
|
||||||
data class ExternalSystemTestTask(val testName: String, val externalSystemProjectId: String, val targetName: String?) {
|
data class ExternalSystemTestTask(val testName: String, val externalSystemProjectId: String, val targetName: String?) {
|
||||||
|
|
||||||
fun toStringRepresentation() = "$testName|$externalSystemProjectId|$targetName"
|
fun toStringRepresentation() = "$testName|$externalSystemProjectId|$targetName"
|
||||||
|
|||||||
@@ -331,7 +331,7 @@ private fun KotlinFacetSettings.writeLatestConfig(element: Element) {
|
|||||||
element.setAttribute("externalProjectId", externalProjectId)
|
element.setAttribute("externalProjectId", externalProjectId)
|
||||||
}
|
}
|
||||||
if (isHmppEnabled) {
|
if (isHmppEnabled) {
|
||||||
element.setAttribute("isHmppProject", isHmppEnabled.toString())
|
element.setAttribute("isHmppProject", mppVersion.isHmpp.toString())
|
||||||
}
|
}
|
||||||
if (externalSystemTestTasks.isNotEmpty()) {
|
if (externalSystemTestTasks.isNotEmpty()) {
|
||||||
saveElementsList(
|
saveElementsList(
|
||||||
|
|||||||
Reference in New Issue
Block a user