Create KotlinCoreEnvironment a bit later in tests
Before this change, diagnostic tests with Java source files failed because KotlinCoreEnvironment was being created in the test's setUp, even before the test data file has been split into .java/.kt and the resulting .java files have been copied to a temporary directory. In KotlinCoreEnvironment's constructor, we now inspect all roots for module-info files, which involves calling VirtualFile.getChildren on all roots in the configuration. CoreLocalVirtualFile.getChildren is cached on the first access, and so because the temporary directory with .java files was empty at this point, the VirtualFile for that directory returned empty array in getChildren later in the test, resulting in unresolved reference errors. This is fixed by creating the environment _after_ the .java files have been copied to a temporary directory. Note that slow assertions for flexible types are now enabled in KtUsefulTestCase instead of KotlinTestWithEnvironmentManagement, because BaseDiagnosticsTest no longer inherits from the latter
This commit is contained in:
+15
-23
@@ -24,22 +24,11 @@ import org.jetbrains.kotlin.codegen.CodegenTestUtil
|
||||
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment
|
||||
import org.jetbrains.kotlin.test.TestJdkKind
|
||||
import org.jetbrains.kotlin.test.*
|
||||
import java.io.File
|
||||
import java.io.StringWriter
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
abstract class AbstractAnnotationProcessorBoxTest : KotlinTestWithEnvironment() {
|
||||
private var javaSourceRoot: File by Delegates.notNull()
|
||||
|
||||
override fun setUp() {
|
||||
javaSourceRoot = KotlinTestUtils.tmpDir("java-files")
|
||||
super.setUp()
|
||||
}
|
||||
|
||||
abstract class AbstractAnnotationProcessorBoxTest : KotlinTestWithEnvironmentManagement() {
|
||||
fun doTest(path: String) {
|
||||
val testDir = File(path)
|
||||
|
||||
@@ -53,9 +42,19 @@ abstract class AbstractAnnotationProcessorBoxTest : KotlinTestWithEnvironment()
|
||||
val supportStubs = testName.contains("stubs", ignoreCase = true)
|
||||
|
||||
val javaFiles = filesByExtension("java")
|
||||
if (javaFiles.isNotEmpty()) {
|
||||
javaFiles.forEach { it.copyTo(File(javaSourceRoot, it.name)) }
|
||||
}
|
||||
val javaSourceRoot =
|
||||
if (javaFiles.isNotEmpty()) {
|
||||
KotlinTestUtils.tmpDir("java-files").also { javaSourceRoot ->
|
||||
javaFiles.forEach { javaFile -> javaFile.copyTo(File(javaSourceRoot, javaFile.name)) }
|
||||
}
|
||||
}
|
||||
else null
|
||||
|
||||
val configuration = KotlinTestUtils.newConfiguration(
|
||||
ConfigurationKind.ALL, TestJdkKind.MOCK_JDK, listOf(KotlinTestUtils.getAnnotationsJar()), listOfNotNull(javaSourceRoot)
|
||||
)
|
||||
val environment = KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
||||
val project = environment.project
|
||||
|
||||
val collectorExtension = AnnotationCollectorExtensionForTests(supportInheritedAnnotations)
|
||||
ClassBuilderInterceptorExtension.registerExtension(project, collectorExtension)
|
||||
@@ -76,13 +75,6 @@ abstract class AbstractAnnotationProcessorBoxTest : KotlinTestWithEnvironment()
|
||||
KotlinTestUtils.assertEqualsToFile(expectedAnnotationsFile, actualAnnotations)
|
||||
}
|
||||
|
||||
override fun createEnvironment(): KotlinCoreEnvironment {
|
||||
val configuration = KotlinTestUtils.newConfiguration(
|
||||
ConfigurationKind.ALL, TestJdkKind.MOCK_JDK, listOf(KotlinTestUtils.getAnnotationsJar()), listOf(javaSourceRoot)
|
||||
)
|
||||
return KotlinCoreEnvironment.createForTests(testRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
||||
}
|
||||
|
||||
private class AnnotationCollectorExtensionForTests(
|
||||
supportInheritedAnnotations: Boolean
|
||||
) : AnnotationCollectorExtensionBase(supportInheritedAnnotations) {
|
||||
|
||||
Reference in New Issue
Block a user