[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
|
Declares backend for analyzing current module
|
||||||
""".trimIndent()
|
""".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.CommonPlatforms
|
||||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||||
import org.jetbrains.kotlin.platform.isCommon
|
|
||||||
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
import org.jetbrains.kotlin.platform.js.JsPlatforms
|
||||||
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
|
||||||
import org.jetbrains.kotlin.platform.konan.NativePlatforms
|
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.builders.LanguageVersionSettingsBuilder
|
||||||
import org.jetbrains.kotlin.test.directives.AdditionalFilesDirectives
|
import org.jetbrains.kotlin.test.directives.AdditionalFilesDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.ModuleStructureDirectives
|
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.ComposedRegisteredDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.model.Directive
|
import org.jetbrains.kotlin.test.directives.model.Directive
|
||||||
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
||||||
@@ -220,6 +220,22 @@ class ModuleStructureExtractorImpl(
|
|||||||
}
|
}
|
||||||
currentFileName = (values.first() as String).also(::validateFileName)
|
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
|
else -> return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user