[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 }
|
jvm -> common { kind=DEPENDS_ON }
|
||||||
js -> 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 }
|
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 jvm { platform=[JVM]; root=jvm; testRoot=jvmTest}
|
||||||
MODULE js { platform=[JS]; root=js }
|
MODULE js { platform=[JS]; root=js }
|
||||||
|
|
||||||
common -> STDLIB_COMMON { kind=DEPENDENCY }
|
common -> STDLIB_COMMON, KOTLIN_SDK { kind=DEPENDENCY }
|
||||||
jvm -> common { kind=DEPENDS_ON }
|
jvm -> common { kind=DEPENDS_ON }
|
||||||
jvm -> STDLIB_JVM, KOTLIN_TEST, KOTLIN_TEST_JVM, JUNIT, MOCK_JDK { kind=DEPENDENCY }
|
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] }
|
MODULE common { platform=[JVM, JS] }
|
||||||
|
|
||||||
jvm -> STDLIB_JVM, MOCK_JDK { kind=DEPENDENCY }
|
jvm -> STDLIB_JVM, MOCK_JDK { kind=DEPENDENCY }
|
||||||
js -> STDLIB_JS { kind=DEPENDENCY }
|
js -> STDLIB_JS, KOTLIN_SDK { kind=DEPENDENCY }
|
||||||
common -> STDLIB_COMMON, STDLIB_JVM { kind=DEPENDENCY }
|
common -> STDLIB_COMMON, STDLIB_JVM, KOTLIN_SDK { kind=DEPENDENCY }
|
||||||
jvm -> common { kind=DEPENDS_ON }
|
jvm -> common { kind=DEPENDS_ON }
|
||||||
|
|||||||
@@ -5,9 +5,11 @@ MODULE jvmWithSdk { platform=[JVM] }
|
|||||||
MODULE native { platform=[Native] }
|
MODULE native { platform=[Native] }
|
||||||
|
|
||||||
common -> STDLIB_COMMON { kind=DEPENDENCY }
|
common -> STDLIB_COMMON { kind=DEPENDENCY }
|
||||||
|
common -> KOTLIN_SDK { kind=DEPENDENCY }
|
||||||
|
|
||||||
js -> common { kind=DEPENDS_ON }
|
js -> common { kind=DEPENDS_ON }
|
||||||
js -> STDLIB_JS { kind=DEPENDENCY }
|
js -> STDLIB_JS { kind=DEPENDENCY }
|
||||||
|
js -> KOTLIN_SDK { kind=DEPENDENCY }
|
||||||
|
|
||||||
jvmNoSdk -> common { kind=DEPENDS_ON }
|
jvmNoSdk -> common { kind=DEPENDS_ON }
|
||||||
jvmNoSdk -> STDLIB_JVM { kind=DEPENDENCY }
|
jvmNoSdk -> STDLIB_JVM { kind=DEPENDENCY }
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
//
|
//
|
||||||
fun jvmSpecific(args: Array<String>) {
|
fun jvmSpecific(args: Array<String>) {
|
||||||
val x: Cloneable? = null
|
val x: Cloneable? = null
|
||||||
args.clone()
|
args.<!MISSING_DEPENDENCY_SUPERCLASS!>clone<!>()
|
||||||
}
|
}
|
||||||
|
|
||||||
//fun nativeSpecific() {
|
//fun nativeSpecific() {
|
||||||
|
|||||||
@@ -15,13 +15,14 @@ import org.jetbrains.kotlin.checkers.utils.clearFileFromDiagnosticMarkup
|
|||||||
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
|
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
|
||||||
import org.jetbrains.kotlin.idea.framework.CommonLibraryKind
|
import org.jetbrains.kotlin.idea.framework.CommonLibraryKind
|
||||||
import org.jetbrains.kotlin.idea.framework.JSLibraryKind
|
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.AbstractMultiModuleTest
|
||||||
import org.jetbrains.kotlin.idea.stubs.createMultiplatformFacetM1
|
import org.jetbrains.kotlin.idea.stubs.createMultiplatformFacetM1
|
||||||
import org.jetbrains.kotlin.idea.stubs.createMultiplatformFacetM3
|
import org.jetbrains.kotlin.idea.stubs.createMultiplatformFacetM3
|
||||||
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
|
import org.jetbrains.kotlin.idea.test.ConfigLibraryUtil
|
||||||
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
import org.jetbrains.kotlin.idea.test.PluginTestCaseBase
|
||||||
import org.jetbrains.kotlin.idea.util.application.executeWriteCommand
|
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.idea.util.sourceRoots
|
||||||
import org.jetbrains.kotlin.platform.CommonPlatforms
|
import org.jetbrains.kotlin.platform.CommonPlatforms
|
||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
@@ -93,19 +94,21 @@ fun AbstractMultiModuleTest.doSetup(projectModel: ProjectResolveModel) {
|
|||||||
}.toMap()
|
}.toMap()
|
||||||
|
|
||||||
for ((resolveModule, ideaModule) in resolveModulesToIdeaModules.entries) {
|
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 {
|
resolveModule.dependencies.closure(preserveOrder = true) { it.to.dependencies }.forEach {
|
||||||
when (val to = it.to) {
|
when (val dependency = it.to) {
|
||||||
FullJdk -> ConfigLibraryUtil.configureSdk(ideaModule, PluginTestCaseBase.addJdk(testRootDisposable) {
|
is ResolveSdk -> {
|
||||||
PluginTestCaseBase.jdk(TestJdkKind.FULL_JDK)
|
// 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) {
|
is ResolveLibrary -> ideaModule.addLibrary(dependency.root, dependency.name, dependency.kind)
|
||||||
PluginTestCaseBase.jdk(TestJdkKind.MOCK_JDK)
|
|
||||||
})
|
|
||||||
|
|
||||||
is ResolveLibrary -> ideaModule.addLibrary(to.root, to.name, to.kind)
|
else -> ideaModule.addDependency(resolveModulesToIdeaModules[dependency]!!)
|
||||||
|
|
||||||
else -> ideaModule.addDependency(resolveModulesToIdeaModules[to]!!)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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 Module.collectSourceFolders(): List<String> = sourceRoots.map { it.path }
|
||||||
|
|
||||||
private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List<RootInfo>) {
|
private fun AbstractMultiModuleTest.doSetupProject(rootInfos: List<RootInfo>) {
|
||||||
|
|||||||
@@ -171,20 +171,28 @@ sealed class KotlinTest(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ResolveSdk
|
||||||
|
|
||||||
object FullJdk : ResolveLibrary(
|
object FullJdk : ResolveLibrary(
|
||||||
"full-jdk",
|
"full-jdk",
|
||||||
File("fake file for full jdk"),
|
File("fake file for full jdk"),
|
||||||
JvmPlatforms.defaultJvmPlatform,
|
JvmPlatforms.defaultJvmPlatform,
|
||||||
null
|
null
|
||||||
)
|
), ResolveSdk
|
||||||
|
|
||||||
object MockJdk : ResolveLibrary(
|
object MockJdk : ResolveLibrary(
|
||||||
"mock-jdk",
|
"mock-jdk",
|
||||||
File("fake file for mock jdk"),
|
File("fake file for mock jdk"),
|
||||||
JvmPlatforms.defaultJvmPlatform,
|
JvmPlatforms.defaultJvmPlatform,
|
||||||
null
|
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 ResolveDependency(val to: ResolveModule, val kind: Kind) {
|
||||||
open class Builder {
|
open class Builder {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ open class ProjectStructureParser(private val projectRoot: File) {
|
|||||||
"STDLIB_COMMON" to ResolveLibrary.Builder(Stdlib.CommonStdlib),
|
"STDLIB_COMMON" to ResolveLibrary.Builder(Stdlib.CommonStdlib),
|
||||||
"FULL_JDK" to ResolveLibrary.Builder(FullJdk),
|
"FULL_JDK" to ResolveLibrary.Builder(FullJdk),
|
||||||
"MOCK_JDK" to ResolveLibrary.Builder(MockJdk),
|
"MOCK_JDK" to ResolveLibrary.Builder(MockJdk),
|
||||||
|
"KOTLIN_SDK" to ResolveLibrary.Builder(KotlinSdk),
|
||||||
"KOTLIN_TEST_JS" to ResolveLibrary.Builder(KotlinTest.JsKotlinTest),
|
"KOTLIN_TEST_JS" to ResolveLibrary.Builder(KotlinTest.JsKotlinTest),
|
||||||
"KOTLIN_TEST_JVM" to ResolveLibrary.Builder(KotlinTest.JvmKotlinTest),
|
"KOTLIN_TEST_JVM" to ResolveLibrary.Builder(KotlinTest.JvmKotlinTest),
|
||||||
"KOTLIN_TEST" to ResolveLibrary.Builder(KotlinTest.JustKotlinTest),
|
"KOTLIN_TEST" to ResolveLibrary.Builder(KotlinTest.JustKotlinTest),
|
||||||
|
|||||||
Reference in New Issue
Block a user