Adjust tests for JSR305 annotations being extracted

See the previous commits
This commit is contained in:
Denis.Zharkov
2023-02-24 18:45:54 +01:00
committed by Space Team
parent c86c96f5e5
commit 13febaf978
4 changed files with 66 additions and 11 deletions
@@ -251,6 +251,12 @@ class JvmEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfig
}
configuration.addJavaSourceRoot(testServices.sourceFileProvider.javaSourceDirectory)
}
// We add that as a part of the classpath only when Java files are being analyzed as sources, so the relevant annotations
// are being resolved classes are being resolved properly.
configuration.addJvmClasspathRoots(
testServices.additionalClassPathForJavaCompilationOrAnalysis?.classPath?.map(::File).orEmpty()
)
}
if (javaBinaryFiles.isNotEmpty()) {
@@ -268,7 +274,9 @@ class JvmEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfig
compileJavaFilesLibraryToJar(
testServices.sourceFileProvider.javaBinaryDirectory.path,
JAVA_BINARIES_JAR_NAME,
extraClasspath = configuration.jvmClasspathRoots.map { it.absolutePath },
extraClasspath =
configuration.jvmClasspathRoots.map { it.absolutePath } +
testServices.additionalClassPathForJavaCompilationOrAnalysis?.classPath.orEmpty(),
assertions = JUnit5Assertions,
useJava11 = useJava11ToCompileIncludedJavaFiles
)
@@ -428,3 +436,12 @@ class JvmEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfig
}
// This should be used as a classpath entries when Java classes are being compiled/analyzed to become a binary/source dependencies of kt-files
// But in case the Java files are compiled it should not belong to the classpath of the module where test kt-files belong.
// Currently, it's used for jsr305.jar, for which it's necessary to make sure that once some library uses the annotation from that jar,
// we still don't need the jar itself when using the library to read the annotations.
// (as they have been written to the class-files as fully-qualified names)
class AdditionalClassPathForJavaCompilationOrAnalysis(val classPath: List<String>) : TestService
val TestServices.additionalClassPathForJavaCompilationOrAnalysis by TestServices.nullableTestServiceAccessor<AdditionalClassPathForJavaCompilationOrAnalysis>()
@@ -34,7 +34,8 @@ import kotlin.io.path.createTempDirectory
enum class JavaForeignAnnotationType(val path: String) {
Annotations("third-party/annotations"),
Java8Annotations("third-party/java8-annotations"),
Java9Annotations("third-party/java9-annotations");
Java9Annotations("third-party/java9-annotations"),
Jsr305("third-party/jsr305");
}
open class JvmForeignAnnotationsConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
@@ -87,14 +88,18 @@ open class JvmForeignAnnotationsConfigurator(testServices: TestServices) : Envir
val javaFilesDir = createTempDirectory().toFile().also {
File(annotationPath.path).copyRecursively(it)
}
val jsr305JarFile = createJsr305Jar(configuration)
val foreignAnnotationsJar = MockLibraryUtil.compileJavaFilesLibraryToJar(
javaFilesDir.path,
"foreign-annotations",
assertions = JUnit5Assertions,
extraClasspath = configuration.jvmClasspathRoots.map { it.absolutePath },
extraClasspath = configuration.jvmClasspathRoots.map { it.absolutePath } + jsr305JarFile.absolutePath,
useJava11 = useJava11ToCompileIncludedJavaFiles
)
configuration.addModularRootIfNotNull(useJava11ToCompileIncludedJavaFiles, "java9_annotations", foreignAnnotationsJar)
testServices.register(AdditionalClassPathForJavaCompilationOrAnalysis::class, AdditionalClassPathForJavaCompilationOrAnalysis(listOf(jsr305JarFile.absolutePath)))
configuration.addJvmClasspathRoot(testServices.standardLibrariesPathProvider.jvmAnnotationsForTests())
if (JvmEnvironmentConfigurationDirectives.WITH_JSR305_TEST_ANNOTATIONS in registeredDirectives) {
@@ -106,10 +111,23 @@ open class JvmForeignAnnotationsConfigurator(testServices: TestServices) : Envir
jsr305AnnotationsDir.path,
"jsr-305-test-annotations",
assertions = JUnit5Assertions,
extraClasspath = configuration.jvmClasspathRoots.map { it.absolutePath }
extraClasspath = configuration.jvmClasspathRoots.map { it.absolutePath } + jsr305JarFile.absolutePath
)
)
configuration.addJvmClasspathRoot(KtTestUtil.getAnnotationsJar())
}
}
private fun createJsr305Jar(configuration: CompilerConfiguration): File {
val jsr305FilesDir = createTempDirectory().toFile().also {
File(JavaForeignAnnotationType.Jsr305.path).copyRecursively(it)
}
return MockLibraryUtil.compileJavaFilesLibraryToJar(
jsr305FilesDir.path,
"jsr305",
assertions = JUnit5Assertions,
extraClasspath = configuration.jvmClasspathRoots.map { it.absolutePath },
)
}
}