diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractDiagnosticsTestWithStdLibUsingJavac.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractDiagnosticsTestWithStdLibUsingJavac.kt index e979d2b2ba7..688c21da794 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractDiagnosticsTestWithStdLibUsingJavac.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractDiagnosticsTestWithStdLibUsingJavac.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.checkers.javac import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTestWithStdLib +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.KotlinTestUtils.getHomeDirectory @@ -24,24 +25,24 @@ import java.io.File abstract class AbstractDiagnosticsTestWithStdLibUsingJavac : AbstractDiagnosticsTestWithStdLib() { - override fun analyzeAndCheck(testDataFile: File, files: List) { + + override fun shouldSkipTest(wholeFile: File, files: List): Boolean { + return isJavacSkipTest(wholeFile, files) + } + + override fun setupEnvironment(environment: KotlinCoreEnvironment, testDataFile: File, files: MutableList) { val testDataFileText = testDataFile.readText() - if (InTextDirectivesUtils.isDirectiveDefined(testDataFileText, "// JAVAC_SKIP")) { - println("${testDataFile.name} test is skipped") - return - } + val groupedByModule = files.groupBy(TestFile::module) val allKtFiles = groupedByModule.values.flatMap { getKtFiles(it, true) } if (InTextDirectivesUtils.isDirectiveDefined(testDataFileText, "// FULL_JDK")) { environment.registerJavac(kotlinFiles = allKtFiles) - } - else { + } else { val mockJdk = listOf(File(getHomeDirectory(), "compiler/testData/mockJDK/jre/lib/rt.jar")) environment.registerJavac(kotlinFiles = allKtFiles, bootClasspath = mockJdk) } environment.configuration.put(JVMConfigurationKeys.USE_JAVAC, true) - super.analyzeAndCheck(testDataFile, files) } } \ No newline at end of file diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractJavacForeignAnnotationsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractJavacForeignAnnotationsTest.kt index 701c8f59275..af906e9e1a4 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractJavacForeignAnnotationsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractJavacForeignAnnotationsTest.kt @@ -17,18 +17,16 @@ package org.jetbrains.kotlin.checkers.javac import org.jetbrains.kotlin.checkers.AbstractForeignAnnotationsTest +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.JVMConfigurationKeys import java.io.File abstract class AbstractJavacForeignAnnotationsTest : AbstractForeignAnnotationsTest() { - override fun analyzeAndCheck(testDataFile: File, files: List) { + override fun setupEnvironment(environment: KotlinCoreEnvironment, testDataFile: File, files: MutableList) { val groupedByModule = files.groupBy(TestFile::module) val allKtFiles = groupedByModule.values.flatMap { getKtFiles(it, true) } environment.registerJavac(kotlinFiles = allKtFiles) environment.configuration.put(JVMConfigurationKeys.USE_JAVAC, true) - - super.analyzeAndCheck(testDataFile, files) } - } \ No newline at end of file diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractJavacForeignJava8AnnotationsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractJavacForeignJava8AnnotationsTest.kt index 7a2180f4b48..b5d5a40d7c5 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractJavacForeignJava8AnnotationsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/cfg/javac/AbstractJavacForeignJava8AnnotationsTest.kt @@ -17,21 +17,22 @@ package org.jetbrains.kotlin.checkers.javac import org.jetbrains.kotlin.checkers.AbstractForeignJava8AnnotationsTest +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.test.InTextDirectivesUtils import java.io.File abstract class AbstractJavacForeignJava8AnnotationsTest : AbstractForeignJava8AnnotationsTest() { - override fun analyzeAndCheck(testDataFile: File, files: List) { - if (files.any { file -> InTextDirectivesUtils.isDirectiveDefined(file.expectedText, "// SKIP_JAVAC") }) return + override fun shouldSkipTest(wholeFile: File, files: List): Boolean { + return isSkipJavacTest(wholeFile, files) + } + override fun setupEnvironment(environment: KotlinCoreEnvironment, testDataFile: File, files: MutableList) { val groupedByModule = files.groupBy(TestFile::module) val allKtFiles = groupedByModule.values.flatMap { getKtFiles(it, true) } environment.registerJavac(kotlinFiles = allKtFiles) environment.configuration.put(JVMConfigurationKeys.USE_JAVAC, true) - - super.analyzeAndCheck(testDataFile, files) } } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsNoAnnotationInClasspathTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsNoAnnotationInClasspathTest.kt index 9bc6d7868c4..eb43b0551f5 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsNoAnnotationInClasspathTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsNoAnnotationInClasspathTest.kt @@ -42,9 +42,8 @@ abstract class AbstractForeignAnnotationsNoAnnotationInClasspathTest : AbstractF return listOf(compiledJavaPath) + testAnnotations } - override fun analyzeAndCheck(testDataFile: File, files: List) { - if (files.any { file -> InTextDirectivesUtils.isDirectiveDefined(file.expectedText, "// SOURCE_RETENTION_ANNOTATIONS") }) return - super.analyzeAndCheck(testDataFile, files) + override fun shouldSkipTest(wholeFile: File, files: List): Boolean { + return files.any { file -> InTextDirectivesUtils.isDirectiveDefined(file.expectedText, "// SOURCE_RETENTION_ANNOTATIONS") } } override fun isJavaSourceRootNeeded() = false diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractForeignJava8AnnotationsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractForeignJava8AnnotationsTest.kt index 16d37c7a90f..b359b287ced 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractForeignJava8AnnotationsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractForeignJava8AnnotationsTest.kt @@ -28,9 +28,8 @@ abstract class AbstractForeignJava8AnnotationsNoAnnotationInClasspathTest : Abst override val annotationsPath: String get() = JAVA8_ANNOTATION_SOURCES_PATH - override fun analyzeAndCheck(testDataFile: File, files: List) { - if (skipForCompiledVersion(files)) return - super.analyzeAndCheck(testDataFile, files) + override fun shouldSkipTest(wholeFile: File, files: List): Boolean { + return skipForCompiledVersion(files) } } @@ -39,9 +38,8 @@ abstract class AbstractForeignJava8AnnotationsNoAnnotationInClasspathWithPsiClas override val annotationsPath: String get() = JAVA8_ANNOTATION_SOURCES_PATH - override fun analyzeAndCheck(testDataFile: File, files: List) { - if (skipForCompiledVersion(files)) return - super.analyzeAndCheck(testDataFile, files) + override fun shouldSkipTest(wholeFile: File, files: List): Boolean { + return skipForCompiledVersion(files) } } 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 7bf93b2c559..c8c21547d89 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt @@ -52,6 +52,7 @@ import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactoryImpl +import org.jetbrains.kotlin.test.InTextDirectivesUtils.isDirectiveDefined import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinBaseTest import org.jetbrains.kotlin.test.util.trimTrailingWhitespacesAndAddNewlineAtEOF @@ -91,10 +92,17 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava ) { environment = createEnvironment(wholeFile) + //after environment initialization cause of `tearDown` logic, maybe it's obsolete + if (shouldSkipTest(wholeFile, files)) { + println("${wholeFile.name} test is skipped") + return + } setupEnvironment(environment) analyzeAndCheck(wholeFile, files) } + protected open fun shouldSkipTest(wholeFile: File, files: List) : Boolean = false + protected abstract fun analyzeAndCheck(testDataFile: File, files: List) protected open fun getKtFiles(testFiles: List, includeExtras: Boolean): List { @@ -477,6 +485,23 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava): Boolean { + val testDataFileText = wholeFile.readText() + if (isDirectiveDefined(testDataFileText, "// JAVAC_SKIP")) { + return true + } + return false + } + + //TODO: merge with isJavacSkipTest + fun isSkipJavacTest(wholeFile: File, files: List): Boolean { + val testDataFileText = wholeFile.readText() + if (isDirectiveDefined(testDataFileText, "// SKIP_JAVAC")) { + return true + } + return false + } } private fun parseJvmTarget(directiveMap: Map) = directiveMap[JVM_TARGET]?.let { JvmTarget.fromString(it) } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/KotlinMultiFileTestWithJava.java b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/KotlinMultiFileTestWithJava.java index f542b1952df..30adfc20d8a 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/KotlinMultiFileTestWithJava.java +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/KotlinMultiFileTestWithJava.java @@ -97,6 +97,10 @@ public abstract class KotlinMultiFileTestWithJava files) { + setupEnvironment(environment); + } + @NotNull protected ConfigurationKind getConfigurationKind() { return ConfigurationKind.JDK_ONLY; diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractDiagnosticsUsingJavacTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractDiagnosticsUsingJavacTest.kt index bd0ee9944c2..bae50169ce1 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractDiagnosticsUsingJavacTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractDiagnosticsUsingJavacTest.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.checkers.javac import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.KotlinTestUtils.getHomeDirectory @@ -24,24 +25,22 @@ import java.io.File abstract class AbstractDiagnosticsUsingJavacTest : AbstractDiagnosticsTest() { - override fun analyzeAndCheck(testDataFile: File, files: List) { + override fun shouldSkipTest(wholeFile: File, files: List): Boolean { + return isJavacSkipTest(wholeFile, files) + } + + override fun setupEnvironment(environment: KotlinCoreEnvironment, testDataFile: File, files: MutableList) { val testDataFileText = testDataFile.readText() - if (InTextDirectivesUtils.isDirectiveDefined(testDataFileText, "// JAVAC_SKIP")) { - println("${testDataFile.name} test is skipped") - return - } val groupedByModule = files.groupBy(TestFile::module) val allKtFiles = groupedByModule.values.flatMap { getKtFiles(it, true) } if (InTextDirectivesUtils.isDirectiveDefined(testDataFileText, "// FULL_JDK")) { environment.registerJavac(kotlinFiles = allKtFiles) - } - else { + } else { val mockJdk = listOf(File(getHomeDirectory(), "compiler/testData/mockJDK/jre/lib/rt.jar")) environment.registerJavac(kotlinFiles = allKtFiles, bootClasspath = mockJdk) } environment.configuration.put(JVMConfigurationKeys.USE_JAVAC, true) - super.analyzeAndCheck(testDataFile, files) } } \ No newline at end of file diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractJavacDiagnosticsTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractJavacDiagnosticsTest.kt index 51e61d6bf01..55bad1044b3 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractJavacDiagnosticsTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractJavacDiagnosticsTest.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.checkers.javac import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.test.KotlinTestUtils import java.io.File @@ -25,14 +26,13 @@ abstract class AbstractJavacDiagnosticsTest : AbstractDiagnosticsTest() { private var useJavac = true - override fun analyzeAndCheck(testDataFile: File, files: List) { + override fun setupEnvironment(environment: KotlinCoreEnvironment, testDataFile: File, files: MutableList) { if (useJavac) { val groupedByModule = files.groupBy(TestFile::module) val allKtFiles = groupedByModule.values.flatMap { getKtFiles(it, true) } environment.registerJavac(kotlinFiles = allKtFiles) environment.configuration.put(JVMConfigurationKeys.USE_JAVAC, true) } - super.analyzeAndCheck(testDataFile, files) } fun doTestWithoutJavacWrapper(path: String) { diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractJavacFieldResolutionTest.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractJavacFieldResolutionTest.kt index 303c4105672..1dfc628a457 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractJavacFieldResolutionTest.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/javac/AbstractJavacFieldResolutionTest.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.checkers.javac import org.jetbrains.kotlin.checkers.AbstractDiagnosticsTest +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.JVMConfigurationKeys import java.io.File @@ -24,14 +25,13 @@ abstract class AbstractJavacFieldResolutionTest : AbstractDiagnosticsTest() { private var useJavac = true - override fun analyzeAndCheck(testDataFile: File, files: List) { + override fun setupEnvironment(environment: KotlinCoreEnvironment, testDataFile: File, files: MutableList) { if (useJavac) { val groupedByModule = files.groupBy(TestFile::module) val allKtFiles = groupedByModule.values.flatMap { getKtFiles(it, true) } environment.registerJavac(kotlinFiles = allKtFiles) environment.configuration.put(JVMConfigurationKeys.USE_JAVAC, true) } - super.analyzeAndCheck(testDataFile, files) } fun doTestWithoutJavacWrapper(path: String) {