[MPP] Add KotlinSDK to the set of predefined test SDKs

^KT-45145 Fixed
This commit is contained in:
Pavel Kirpichenkov
2021-03-02 19:25:04 +03:00
committed by TeamCityServer
parent d8a3dacdc5
commit 4bc019736b
8 changed files with 56 additions and 20 deletions
@@ -5,6 +5,6 @@ MODULE js { platform=[JS] }
jvm -> common { kind=DEPENDS_ON }
js -> common { kind=DEPENDS_ON }
common -> STDLIB_COMMON { kind=DEPENDENCY }
common -> STDLIB_COMMON, KOTLIN_SDK { kind=DEPENDENCY }
jvm -> STDLIB_JVM, KOTLIN_TEST, KOTLIN_TEST_JVM, JUNIT, MOCK_JDK { kind=DEPENDENCY }
js -> STDLIB_JS { kind=DEPENDENCY }
js -> STDLIB_JS, KOTLIN_SDK { kind=DEPENDENCY }
@@ -2,7 +2,7 @@ MODULE common { platform=[JVM, JS, Native]; root=common }
MODULE jvm { platform=[JVM]; root=jvm; testRoot=jvmTest}
MODULE js { platform=[JS]; root=js }
common -> STDLIB_COMMON { kind=DEPENDENCY }
common -> STDLIB_COMMON, KOTLIN_SDK { kind=DEPENDENCY }
jvm -> common { kind=DEPENDS_ON }
jvm -> STDLIB_JVM, KOTLIN_TEST, KOTLIN_TEST_JVM, JUNIT, MOCK_JDK { kind=DEPENDENCY }
js -> common { kind=DEPENDS_ON }
js -> common, KOTLIN_SDK { kind=DEPENDS_ON }
@@ -5,6 +5,6 @@ MODULE js { platform=[JS] }
MODULE common { platform=[JVM, JS] }
jvm -> STDLIB_JVM, MOCK_JDK { kind=DEPENDENCY }
js -> STDLIB_JS { kind=DEPENDENCY }
common -> STDLIB_COMMON, STDLIB_JVM { kind=DEPENDENCY }
js -> STDLIB_JS, KOTLIN_SDK { kind=DEPENDENCY }
common -> STDLIB_COMMON, STDLIB_JVM, KOTLIN_SDK { kind=DEPENDENCY }
jvm -> common { kind=DEPENDS_ON }
@@ -5,9 +5,11 @@ MODULE jvmWithSdk { platform=[JVM] }
MODULE native { platform=[Native] }
common -> STDLIB_COMMON { kind=DEPENDENCY }
common -> KOTLIN_SDK { kind=DEPENDENCY }
js -> common { kind=DEPENDS_ON }
js -> STDLIB_JS { kind=DEPENDENCY }
js -> KOTLIN_SDK { kind=DEPENDENCY }
jvmNoSdk -> common { kind=DEPENDS_ON }
jvmNoSdk -> STDLIB_JVM { kind=DEPENDENCY }
@@ -5,7 +5,7 @@
//
fun jvmSpecific(args: Array<String>) {
val x: Cloneable? = null
args.clone()
args.<!MISSING_DEPENDENCY_SUPERCLASS!>clone<!>()
}
//fun nativeSpecific() {
@@ -15,13 +15,14 @@ import org.jetbrains.kotlin.checkers.utils.clearFileFromDiagnosticMarkup
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.idea.framework.CommonLibraryKind
import org.jetbrains.kotlin.idea.framework.JSLibraryKind
import org.jetbrains.kotlin.idea.framework.KotlinSdkType
import org.jetbrains.kotlin.idea.stubs.AbstractMultiModuleTest
import org.jetbrains.kotlin.idea.stubs.createMultiplatformFacetM1
import org.jetbrains.kotlin.idea.stubs.createMultiplatformFacetM3
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
import org.jetbrains.kotlin.idea.util.projectStructure.getModuleDir
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import org.jetbrains.kotlin.idea.util.sourceRoots
import org.jetbrains.kotlin.platform.CommonPlatforms
import org.jetbrains.kotlin.platform.TargetPlatform
@@ -93,19 +94,21 @@ fun AbstractMultiModuleTest.doSetup(projectModel: ProjectResolveModel) {
}.toMap()
for ((resolveModule, ideaModule) in resolveModulesToIdeaModules.entries) {
val directDependencies: Set<ResolveModule> = resolveModule.dependencies.mapTo(mutableSetOf()) { it.to }
resolveModule.dependencies.closure(preserveOrder = true) { it.to.dependencies }.forEach {
when (val to = it.to) {
FullJdk -> ConfigLibraryUtil.configureSdk(ideaModule, PluginTestCaseBase.addJdk(testRootDisposable) {
PluginTestCaseBase.jdk(TestJdkKind.FULL_JDK)
})
when (val dependency = it.to) {
is ResolveSdk -> {
// Only set module SDK if it is specified in module's dependencies explicitly.
// Otherwise the last transitive SDK dependency will be written as Module's SDK, which doesn't happen in the real IDE
// This check is not lifted to capture an SDK dependency and avoid configuring it as a library or module one
if (dependency in directDependencies)
setUpSdkForModule(ideaModule, dependency)
}
MockJdk -> ConfigLibraryUtil.configureSdk(ideaModule, PluginTestCaseBase.addJdk(testRootDisposable) {
PluginTestCaseBase.jdk(TestJdkKind.MOCK_JDK)
})
is ResolveLibrary -> ideaModule.addLibrary(dependency.root, dependency.name, dependency.kind)
is ResolveLibrary -> ideaModule.addLibrary(to.root, to.name, to.kind)
else -> ideaModule.addDependency(resolveModulesToIdeaModules[to]!!)
else -> ideaModule.addDependency(resolveModulesToIdeaModules[dependency]!!)
}
}
}
@@ -123,6 +126,28 @@ fun AbstractMultiModuleTest.doSetup(projectModel: ProjectResolveModel) {
}
}
private fun AbstractMultiModuleTest.setUpSdkForModule(ideaModule: Module, sdk: ResolveSdk) {
when (sdk) {
FullJdk -> ConfigLibraryUtil.configureSdk(ideaModule, PluginTestCaseBase.addJdk(testRootDisposable) {
PluginTestCaseBase.jdk(TestJdkKind.FULL_JDK)
})
MockJdk -> ConfigLibraryUtil.configureSdk(ideaModule, PluginTestCaseBase.addJdk(testRootDisposable) {
PluginTestCaseBase.jdk(TestJdkKind.MOCK_JDK)
})
KotlinSdk -> {
KotlinSdkType.setUpIfNeeded(testRootDisposable)
ConfigLibraryUtil.configureSdk(
ideaModule,
getProjectJdkTableSafe().findMostRecentSdkOfType(KotlinSdkType.INSTANCE) ?: error("Kotlin SDK wasn't created")
)
}
else -> error("Don't know how to set up SDK of type: ${sdk::class}")
}
}
private fun Module.collectSourceFolders(): List<String> = sourceRoots.map { it.path }
private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List<RootInfo>) {
@@ -171,20 +171,28 @@ sealed class KotlinTest(
)
}
interface ResolveSdk
object FullJdk : ResolveLibrary(
"full-jdk",
File("fake file for full jdk"),
JvmPlatforms.defaultJvmPlatform,
null
)
), ResolveSdk
object MockJdk : ResolveLibrary(
"mock-jdk",
File("fake file for mock jdk"),
JvmPlatforms.defaultJvmPlatform,
null
)
), ResolveSdk
object KotlinSdk : ResolveLibrary(
"kotlin-sdk",
File("fake file for kotlin sdk"),
CommonPlatforms.defaultCommonPlatform,
null,
), ResolveSdk
open class ResolveDependency(val to: ResolveModule, val kind: Kind) {
open class Builder {
@@ -22,6 +22,7 @@ open class ProjectStructureParser(private val projectRoot: File) {
"STDLIB_COMMON" to ResolveLibrary.Builder(Stdlib.CommonStdlib),
"FULL_JDK" to ResolveLibrary.Builder(FullJdk),
"MOCK_JDK" to ResolveLibrary.Builder(MockJdk),
"KOTLIN_SDK" to ResolveLibrary.Builder(KotlinSdk),
"KOTLIN_TEST_JS" to ResolveLibrary.Builder(KotlinTest.JsKotlinTest),
"KOTLIN_TEST_JVM" to ResolveLibrary.Builder(KotlinTest.JvmKotlinTest),
"KOTLIN_TEST" to ResolveLibrary.Builder(KotlinTest.JustKotlinTest),