Allow specific native targets to depend on unspecified native target
^KT-38769 Fixed
This commit is contained in:
+19
-12
@@ -56,6 +56,8 @@ import org.jetbrains.kotlin.platform.isCommon
|
|||||||
import org.jetbrains.kotlin.platform.js.isJs
|
import org.jetbrains.kotlin.platform.js.isJs
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
import org.jetbrains.kotlin.platform.jvm.isJvm
|
import org.jetbrains.kotlin.platform.jvm.isJvm
|
||||||
|
import org.jetbrains.kotlin.platform.konan.NativePlatform
|
||||||
|
import org.jetbrains.kotlin.platform.konan.NativePlatforms
|
||||||
import org.jetbrains.kotlin.platform.konan.isNative
|
import org.jetbrains.kotlin.platform.konan.isNative
|
||||||
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
||||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||||
@@ -138,17 +140,6 @@ private fun ideaModelDependencies(
|
|||||||
forProduction: Boolean,
|
forProduction: Boolean,
|
||||||
platform: TargetPlatform
|
platform: TargetPlatform
|
||||||
): List<IdeaModuleInfo> {
|
): List<IdeaModuleInfo> {
|
||||||
fun TargetPlatform.canDependOn(other: TargetPlatform): Boolean {
|
|
||||||
return if (module.isHMPPEnabled) {
|
|
||||||
other.componentPlatforms.containsAll(this.componentPlatforms)
|
|
||||||
} else {
|
|
||||||
this.isJvm() && other.isJvm() ||
|
|
||||||
this.isJs() && other.isJs() ||
|
|
||||||
this.isNative() && other.isNative() ||
|
|
||||||
this.isCommon() && other.isCommon()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//NOTE: lib dependencies can be processed several times during recursive traversal
|
//NOTE: lib dependencies can be processed several times during recursive traversal
|
||||||
val result = LinkedHashSet<IdeaModuleInfo>()
|
val result = LinkedHashSet<IdeaModuleInfo>()
|
||||||
val dependencyEnumerator = ModuleRootManager.getInstance(module).orderEntries().compileOnly().recursively().exportedOnly()
|
val dependencyEnumerator = ModuleRootManager.getInstance(module).orderEntries().compileOnly().recursively().exportedOnly()
|
||||||
@@ -161,7 +152,23 @@ private fun ideaModelDependencies(
|
|||||||
}
|
}
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
return result.filterNot { it is LibraryInfo && !platform.canDependOn(it.platform) }
|
return result.filterNot { it is LibraryInfo && !platform.canDependOn(it.platform, module.isHMPPEnabled) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun TargetPlatform.canDependOn(other: TargetPlatform, isHmppEnabled: Boolean): Boolean {
|
||||||
|
if (isHmppEnabled) {
|
||||||
|
val platformsWhichAreNotContainedInOther = this.componentPlatforms - other.componentPlatforms
|
||||||
|
if (platformsWhichAreNotContainedInOther.isEmpty()) return true
|
||||||
|
|
||||||
|
// unspecifiedNativePlatform is effectively a wildcard for NativePlatform
|
||||||
|
return platformsWhichAreNotContainedInOther.all { it is NativePlatform } &&
|
||||||
|
NativePlatforms.unspecifiedNativePlatform.componentPlatforms.single() in other.componentPlatforms
|
||||||
|
} else {
|
||||||
|
return this.isJvm() && other.isJvm() ||
|
||||||
|
this.isJs() && other.isJs() ||
|
||||||
|
this.isNative() && other.isNative() ||
|
||||||
|
this.isCommon() && other.isCommon()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
interface ModuleSourceInfo : IdeaModuleInfo, TrackableModuleInfo {
|
interface ModuleSourceInfo : IdeaModuleInfo, TrackableModuleInfo {
|
||||||
|
|||||||
Reference in New Issue
Block a user