diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsCompiledJavaDiagnosticTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsCompiledJavaDiagnosticTest.kt new file mode 100644 index 00000000000..2f06585782b --- /dev/null +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsCompiledJavaDiagnosticTest.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2010-2020 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.checkers + +import org.jetbrains.kotlin.test.KotlinTestUtils +import org.jetbrains.kotlin.test.MockLibraryUtil.compileJavaFilesLibraryToJar +import java.io.File +import kotlin.io.path.ExperimentalPathApi +import kotlin.io.path.createTempDirectory + +abstract class AbstractForeignAnnotationsCompiledJavaDiagnosticTest : AbstractDiagnosticsTest() { + @OptIn(ExperimentalPathApi::class) + override fun doMultiFileTest( + wholeFile: File, + files: List + ) { + val ktFiles = files.filter { !it.name.endsWith(".java") } + + val dir = createTempDirectory() + val javaFile = File("${wholeFile.parentFile.path}/${wholeFile.nameWithoutExtension}.java") + + File("$dir/${wholeFile.nameWithoutExtension}.java").apply { createNewFile() }.writeText(javaFile.readText()) + File(FOREIGN_JDK8_ANNOTATIONS_SOURCES_PATH).copyRecursively(File("$dir/annotations/")) + + super.doMultiFileTest( + wholeFile, + ktFiles, + compileJavaFilesLibraryToJar(dir.toString(), "foreign-annotations"), + usePsiClassFilesReading = false, + excludeNonTypeUseJetbrainsAnnotations = true + ) + } + + override fun doTest(filePath: String) { + val file = File(filePath) + val expectedText = KotlinTestUtils.doLoadFile(file) + + doMultiFileTest(file, createTestFilesFromFile(file, expectedText)) + } +} diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractJspecifyAnnotationsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractJspecifyAnnotationsTest.kt index 7978bd93e43..f4e9707b930 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractJspecifyAnnotationsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractJspecifyAnnotationsTest.kt @@ -27,7 +27,9 @@ abstract class AbstractJspecifyAnnotationsTest : AbstractDiagnosticsTest() { super.doMultiFileTest( wholeFile, files, - MockLibraryUtil.compileJavaFilesLibraryToJar(FOREIGN_JDK8_ANNOTATIONS_SOURCES_PATH, "foreign-annotations") + MockLibraryUtil.compileJavaFilesLibraryToJar(FOREIGN_JDK8_ANNOTATIONS_SOURCES_PATH, "foreign-annotations"), + usePsiClassFilesReading = false, + excludeNonTypeUseJetbrainsAnnotations = true ) } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt index 5cd4b9a80c9..df464dec6f1 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt @@ -86,9 +86,12 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava, - additionalClasspath: File? = null + additionalClasspath: File? = null, + usePsiClassFilesReading: Boolean = true, + excludeNonTypeUseJetbrainsAnnotations: Boolean = false ) { - environment = createEnvironment(wholeFile, files, additionalClasspath) + environment = + createEnvironment(wholeFile, files, additionalClasspath, usePsiClassFilesReading, excludeNonTypeUseJetbrainsAnnotations) //after environment initialization cause of `tearDown` logic, maybe it's obsolete if (shouldSkipTest(wholeFile, files)) { println("${wholeFile.name} test is skipped") diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/KotlinMultiFileTestWithJava.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/KotlinMultiFileTestWithJava.kt index 83f9942cde0..8f239d5fc43 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/KotlinMultiFileTestWithJava.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/KotlinMultiFileTestWithJava.kt @@ -46,13 +46,16 @@ abstract class KotlinMultiFileTestWithJava, - additionalClasspath: File? = null + additionalClasspath: File? = null, + usePsiClassFilesReading: Boolean = true, + excludeNonTypeUseJetbrainsAnnotations: Boolean = false ): KotlinCoreEnvironment { + val defaultClasspath = getClasspath(file, excludeNonTypeUseJetbrainsAnnotations) val configuration = createConfiguration( extractConfigurationKind(files), getTestJdkKind(files), backend, - if (additionalClasspath == null) getClasspath(file) else getClasspath(file) + additionalClasspath, + if (additionalClasspath == null) defaultClasspath else defaultClasspath + additionalClasspath, if (isJavaSourceRootNeeded()) listOf(javaFilesDir) else emptyList(), files ) @@ -63,9 +66,9 @@ abstract class KotlinMultiFileTestWithJava { + private fun getClasspath(file: File, excludeNonTypeUseJetbrainsAnnotations: Boolean): List { val result: MutableList = ArrayList() - result.add(KtTestUtil.getAnnotationsJar()) + if (!excludeNonTypeUseJetbrainsAnnotations) { + result.add(KtTestUtil.getAnnotationsJar()) + } result.addAll(getExtraClasspath()) val fileText = file.readText(Charsets.UTF_8) if (InTextDirectivesUtils.isDirectiveDefined(fileText, "ANDROID_ANNOTATIONS")) { @@ -129,7 +134,7 @@ abstract class KotlinMultiFileTestWithJava) { model("foreignAnnotationsJava8/tests/jspecify/kotlin") } + testClass { + model("foreignAnnotationsJava8/tests/typeEnhancementOnCompiledJava") + } + testClass { model("loadJava8/compiledJava", extension = "java", testMethod = "doTestCompiledJava") model("loadJava8/sourceJava", extension = "java", testMethod = "doTestSourceJava")