[Test] Add new directive for specifying target platform for module
This commit is contained in:
committed by
TeamCityServer
parent
06b2efe65f
commit
73a63359df
+4
@@ -52,4 +52,8 @@ object ModuleStructureDirectives : SimpleDirectivesContainer() {
|
||||
Declares backend for analyzing current module
|
||||
""".trimIndent()
|
||||
)
|
||||
|
||||
val TARGET_PLATFORM by enumDirective<TargetPlatformEnum>(
|
||||
"Declares target platform for current module"
|
||||
)
|
||||
}
|
||||
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.test.directives
|
||||
|
||||
import org.jetbrains.kotlin.config.JvmTarget
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
||||
import org.jetbrains.kotlin.platform.jvm.JdkPlatform
|
||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||
import org.jetbrains.kotlin.platform.konan.NativePlatformUnspecifiedTarget
|
||||
import org.jetbrains.kotlin.platform.konan.NativePlatforms
|
||||
|
||||
enum class TargetPlatformEnum(val targetPlatform: TargetPlatform) {
|
||||
Common(
|
||||
TargetPlatform(
|
||||
setOf(
|
||||
JdkPlatform(JvmTarget.DEFAULT),
|
||||
JsPlatforms.DefaultSimpleJsPlatform,
|
||||
NativePlatformUnspecifiedTarget
|
||||
)
|
||||
)
|
||||
),
|
||||
|
||||
JVM(JvmPlatforms.unspecifiedJvmPlatform),
|
||||
JVM_1_6(JvmPlatforms.jvm16),
|
||||
JVM_1_8(JvmPlatforms.jvm18),
|
||||
|
||||
JS(JsPlatforms.defaultJsPlatform),
|
||||
Native(NativePlatforms.unspecifiedNativePlatform)
|
||||
}
|
||||
+17
-1
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.test.services.impl
|
||||
|
||||
import org.jetbrains.kotlin.platform.CommonPlatforms
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.platform.isCommon
|
||||
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||
import org.jetbrains.kotlin.platform.konan.NativePlatforms
|
||||
@@ -17,6 +16,7 @@ import org.jetbrains.kotlin.test.TestInfrastructureInternals
|
||||
import org.jetbrains.kotlin.test.builders.LanguageVersionSettingsBuilder
|
||||
import org.jetbrains.kotlin.test.directives.AdditionalFilesDirectives
|
||||
import org.jetbrains.kotlin.test.directives.ModuleStructureDirectives
|
||||
import org.jetbrains.kotlin.test.directives.TargetPlatformEnum
|
||||
import org.jetbrains.kotlin.test.directives.model.ComposedRegisteredDirectives
|
||||
import org.jetbrains.kotlin.test.directives.model.Directive
|
||||
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
||||
@@ -220,6 +220,22 @@ class ModuleStructureExtractorImpl(
|
||||
}
|
||||
currentFileName = (values.first() as String).also(::validateFileName)
|
||||
}
|
||||
ModuleStructureDirectives.TARGET_PLATFORM -> {
|
||||
if (currentModuleTargetPlatform != null) {
|
||||
assertions.fail { "Target platform already specified twice for module $currentModuleName" }
|
||||
}
|
||||
val platforms = values.map { (it as TargetPlatformEnum).targetPlatform }
|
||||
currentModuleTargetPlatform = when (platforms.size) {
|
||||
0 -> assertions.fail { "Target platform specified incorrectly\nUsage: ${directive.description}" }
|
||||
1 -> platforms.single()
|
||||
else -> {
|
||||
if (TargetPlatformEnum.Common in values) {
|
||||
assertions.fail { "You can't specify `Common` platform in combination with others" }
|
||||
}
|
||||
TargetPlatform(platforms.flatMapTo(mutableSetOf()) { it.componentPlatforms })
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> return false
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user