[MPP] Add KotlinSDK to the set of predefined test SDKs
^KT-45145 Fixed
This commit is contained in:
committed by
TeamCityServer
parent
d8a3dacdc5
commit
4bc019736b
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user