Move foreign annotations logic into the corresponding configurator for the tests
This commit is contained in:
+2
-11
@@ -33,8 +33,6 @@ import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsS
|
|||||||
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider
|
||||||
|
|
||||||
abstract class AbstractForeignAnnotationsTestBase : AbstractKotlinCompilerTest() {
|
abstract class AbstractForeignAnnotationsTestBase : AbstractKotlinCompilerTest() {
|
||||||
protected open val foreignAnnotationsConfigurator: Constructor<JvmForeignAnnotationsConfigurator>? = null
|
|
||||||
|
|
||||||
override fun TestConfigurationBuilder.configuration() {
|
override fun TestConfigurationBuilder.configuration() {
|
||||||
globalDefaults {
|
globalDefaults {
|
||||||
frontend = FrontendKinds.ClassicFrontend
|
frontend = FrontendKinds.ClassicFrontend
|
||||||
@@ -51,11 +49,10 @@ abstract class AbstractForeignAnnotationsTestBase : AbstractKotlinCompilerTest()
|
|||||||
|
|
||||||
useConfigurators(
|
useConfigurators(
|
||||||
::CommonEnvironmentConfigurator,
|
::CommonEnvironmentConfigurator,
|
||||||
|
::JvmForeignAnnotationsConfigurator,
|
||||||
::JvmEnvironmentConfigurator
|
::JvmEnvironmentConfigurator
|
||||||
)
|
)
|
||||||
|
|
||||||
foreignAnnotationsConfigurator.takeIf { it != null }?.also { useConfigurators(it) }
|
|
||||||
|
|
||||||
useMetaInfoProcessors(::OldNewInferenceMetaInfoProcessor)
|
useMetaInfoProcessors(::OldNewInferenceMetaInfoProcessor)
|
||||||
useAdditionalSourceProviders(
|
useAdditionalSourceProviders(
|
||||||
::AdditionalDiagnosticsSourceFilesProvider,
|
::AdditionalDiagnosticsSourceFilesProvider,
|
||||||
@@ -96,15 +93,9 @@ abstract class AbstractForeignAnnotationsTestBase : AbstractKotlinCompilerTest()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class AbstractForeignAnnotationsSourceJavaTest : AbstractForeignAnnotationsTestBase() {
|
abstract class AbstractForeignAnnotationsSourceJavaTest : AbstractForeignAnnotationsTestBase()
|
||||||
override val foreignAnnotationsConfigurator: Constructor<JvmForeignAnnotationsConfigurator>
|
|
||||||
get() = ::JvmForeignAnnotationsConfigurator
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class AbstractForeignAnnotationsCompiledJavaTest : AbstractForeignAnnotationsTestBase() {
|
abstract class AbstractForeignAnnotationsCompiledJavaTest : AbstractForeignAnnotationsTestBase() {
|
||||||
override val foreignAnnotationsConfigurator: Constructor<JvmForeignAnnotationsConfigurator>
|
|
||||||
get() = ::JvmForeignAnnotationsConfigurator
|
|
||||||
|
|
||||||
override fun configure(builder: TestConfigurationBuilder) {
|
override fun configure(builder: TestConfigurationBuilder) {
|
||||||
super.configure(builder)
|
super.configure(builder)
|
||||||
with(builder) {
|
with(builder) {
|
||||||
|
|||||||
+1
-41
@@ -134,13 +134,6 @@ class JvmEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfig
|
|||||||
val javaBinaryFiles = if (ALL_JAVA_AS_BINARY !in registeredDirectives) {
|
val javaBinaryFiles = if (ALL_JAVA_AS_BINARY !in registeredDirectives) {
|
||||||
module.javaFiles.filter { INCLUDE_JAVA_AS_BINARY in it.directives }
|
module.javaFiles.filter { INCLUDE_JAVA_AS_BINARY in it.directives }
|
||||||
} else module.javaFiles
|
} else module.javaFiles
|
||||||
val withForeignAnnotations = JvmEnvironmentConfigurationDirectives.WITH_FOREIGN_ANNOTATIONS in registeredDirectives
|
|
||||||
|
|
||||||
assertTrue(javaVersionToCompile == null || javaBinaryFiles.isNotEmpty() || withForeignAnnotations) {
|
|
||||||
"'COMPILE_JAVA_USING' can't be use if there aren't any java files to compile " +
|
|
||||||
"(mark java files by 'INCLUDE_JAVA_AS_BINARY' or include foreign annotations using 'WITH_FOREIGN_ANNOTATIONS' " +
|
|
||||||
"which will be compiled by specified version of javac)"
|
|
||||||
}
|
|
||||||
|
|
||||||
val useJava9ToCompileIncludedJavaFiles = javaVersionToCompile == TestJavacVersion.JAVAC_9
|
val useJava9ToCompileIncludedJavaFiles = javaVersionToCompile == TestJavacVersion.JAVAC_9
|
||||||
|
|
||||||
@@ -159,40 +152,7 @@ class JvmEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfig
|
|||||||
configuration.addJvmClasspathRoot(ForTestCompileRuntime.runtimeJarForTestsWithJdk8())
|
configuration.addJvmClasspathRoot(ForTestCompileRuntime.runtimeJarForTestsWithJdk8())
|
||||||
}
|
}
|
||||||
|
|
||||||
if (withForeignAnnotations) {
|
configuration.addJvmClasspathRoot(KtTestUtil.getAnnotationsJar())
|
||||||
val annotationPath = registeredDirectives[ForeignAnnotationsDirectives.ANNOTATIONS_PATH].singleOrNull()
|
|
||||||
?: JavaForeignAnnotationType.Java8Annotations
|
|
||||||
val javaFilesDir = createTempDirectory().toFile().also {
|
|
||||||
File(annotationPath.path).copyRecursively(it)
|
|
||||||
}
|
|
||||||
val foreignAnnotationsJar = compileJavaFilesLibraryToJar(
|
|
||||||
javaFilesDir.path,
|
|
||||||
"foreign-annotations",
|
|
||||||
assertions = JUnit5Assertions,
|
|
||||||
extraClasspath = configuration.jvmClasspathRoots.map { it.absolutePath },
|
|
||||||
useJava9 = useJava9ToCompileIncludedJavaFiles
|
|
||||||
)
|
|
||||||
configuration.addModularRootIfNotNull(useJava9ToCompileIncludedJavaFiles, "java9_annotations", foreignAnnotationsJar)
|
|
||||||
configuration.addJvmClasspathRoot(ForTestCompileRuntime.jvmAnnotationsForTests())
|
|
||||||
} else {
|
|
||||||
// Add jetbrains annotations of an old version, without supporting type use target
|
|
||||||
configuration.addJvmClasspathRoot(KtTestUtil.getAnnotationsJar())
|
|
||||||
}
|
|
||||||
|
|
||||||
if (JvmEnvironmentConfigurationDirectives.WITH_JSR305_TEST_ANNOTATIONS in registeredDirectives) {
|
|
||||||
val javaFilesDir = createTempDirectory().toFile().also {
|
|
||||||
File(JSR_305_TEST_ANNOTATIONS_PATH).copyRecursively(it)
|
|
||||||
}
|
|
||||||
configuration.addJvmClasspathRoot(
|
|
||||||
compileJavaFilesLibraryToJar(
|
|
||||||
javaFilesDir.path,
|
|
||||||
"jsr-305-test-annotations",
|
|
||||||
assertions = JUnit5Assertions,
|
|
||||||
extraClasspath = configuration.jvmClasspathRoots.map { it.absolutePath }
|
|
||||||
)
|
|
||||||
)
|
|
||||||
configuration.addJvmClasspathRoot(KtTestUtil.getAnnotationsJar())
|
|
||||||
}
|
|
||||||
|
|
||||||
val isIr = module.targetBackend?.isIR == true
|
val isIr = module.targetBackend?.isIR == true
|
||||||
configuration.put(JVMConfigurationKeys.IR, isIr)
|
configuration.put(JVMConfigurationKeys.IR, isIr)
|
||||||
|
|||||||
+47
@@ -5,19 +5,31 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.test.services.configuration
|
package org.jetbrains.kotlin.test.services.configuration
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.cli.jvm.addModularRootIfNotNull
|
||||||
|
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoot
|
||||||
|
import org.jetbrains.kotlin.cli.jvm.config.jvmClasspathRoots
|
||||||
|
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
|
||||||
import org.jetbrains.kotlin.config.AnalysisFlag
|
import org.jetbrains.kotlin.config.AnalysisFlag
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.JvmAnalysisFlags
|
import org.jetbrains.kotlin.config.JvmAnalysisFlags
|
||||||
|
import org.jetbrains.kotlin.test.MockLibraryUtil
|
||||||
|
import org.jetbrains.kotlin.test.TestJavacVersion
|
||||||
import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives
|
import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives.JSPECIFY_STATE
|
import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives.JSPECIFY_STATE
|
||||||
import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives.JSR305_GLOBAL_REPORT
|
import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives.JSR305_GLOBAL_REPORT
|
||||||
import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives.JSR305_MIGRATION_REPORT
|
import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives.JSR305_MIGRATION_REPORT
|
||||||
import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives.JSR305_SPECIAL_REPORT
|
import org.jetbrains.kotlin.test.directives.ForeignAnnotationsDirectives.JSR305_SPECIAL_REPORT
|
||||||
|
import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
import org.jetbrains.kotlin.test.directives.model.DirectivesContainer
|
||||||
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
|
import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives
|
||||||
import org.jetbrains.kotlin.test.directives.model.singleOrZeroValue
|
import org.jetbrains.kotlin.test.directives.model.singleOrZeroValue
|
||||||
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
import org.jetbrains.kotlin.test.services.*
|
import org.jetbrains.kotlin.test.services.*
|
||||||
|
import org.jetbrains.kotlin.test.util.KtTestUtil
|
||||||
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
|
import org.jetbrains.kotlin.utils.JavaTypeEnhancementState
|
||||||
import org.jetbrains.kotlin.utils.ReportLevel
|
import org.jetbrains.kotlin.utils.ReportLevel
|
||||||
|
import java.io.File
|
||||||
|
import kotlin.io.path.createTempDirectory
|
||||||
|
|
||||||
enum class JavaForeignAnnotationType(val path: String) {
|
enum class JavaForeignAnnotationType(val path: String) {
|
||||||
Annotations("third-party/annotations"),
|
Annotations("third-party/annotations"),
|
||||||
@@ -51,4 +63,39 @@ open class JvmForeignAnnotationsConfigurator(testServices: TestServices) : Envir
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) {
|
||||||
|
val registeredDirectives = module.directives
|
||||||
|
val javaVersionToCompile = registeredDirectives[JvmEnvironmentConfigurationDirectives.COMPILE_JAVA_USING].singleOrNull()
|
||||||
|
val useJava9ToCompileIncludedJavaFiles = javaVersionToCompile == TestJavacVersion.JAVAC_9
|
||||||
|
val annotationPath = registeredDirectives[ForeignAnnotationsDirectives.ANNOTATIONS_PATH].singleOrNull()
|
||||||
|
?: JavaForeignAnnotationType.Java8Annotations
|
||||||
|
val javaFilesDir = createTempDirectory().toFile().also {
|
||||||
|
File(annotationPath.path).copyRecursively(it)
|
||||||
|
}
|
||||||
|
val foreignAnnotationsJar = MockLibraryUtil.compileJavaFilesLibraryToJar(
|
||||||
|
javaFilesDir.path,
|
||||||
|
"foreign-annotations",
|
||||||
|
assertions = JUnit5Assertions,
|
||||||
|
extraClasspath = configuration.jvmClasspathRoots.map { it.absolutePath },
|
||||||
|
useJava9 = useJava9ToCompileIncludedJavaFiles
|
||||||
|
)
|
||||||
|
configuration.addModularRootIfNotNull(useJava9ToCompileIncludedJavaFiles, "java9_annotations", foreignAnnotationsJar)
|
||||||
|
configuration.addJvmClasspathRoot(ForTestCompileRuntime.jvmAnnotationsForTests())
|
||||||
|
|
||||||
|
if (JvmEnvironmentConfigurationDirectives.WITH_JSR305_TEST_ANNOTATIONS in registeredDirectives) {
|
||||||
|
val jsr305AnnotationsDir = createTempDirectory().toFile().also {
|
||||||
|
File(JSR_305_TEST_ANNOTATIONS_PATH).copyRecursively(it)
|
||||||
|
}
|
||||||
|
configuration.addJvmClasspathRoot(
|
||||||
|
MockLibraryUtil.compileJavaFilesLibraryToJar(
|
||||||
|
jsr305AnnotationsDir.path,
|
||||||
|
"jsr-305-test-annotations",
|
||||||
|
assertions = JUnit5Assertions,
|
||||||
|
extraClasspath = configuration.jvmClasspathRoots.map { it.absolutePath }
|
||||||
|
)
|
||||||
|
)
|
||||||
|
configuration.addJvmClasspathRoot(KtTestUtil.getAnnotationsJar())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user