diff --git a/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt b/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt index b3b82b88630..c1a059d2ff5 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt @@ -16,11 +16,10 @@ package org.jetbrains.kotlin.checkers -import com.intellij.lang.java.JavaLanguage +import com.intellij.openapi.project.Project import com.intellij.openapi.util.Condition import com.intellij.openapi.util.Conditions import com.intellij.openapi.util.TextRange -import com.intellij.psi.PsiFileFactory import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.util.PsiTreeUtil import com.intellij.util.containers.ContainerUtil @@ -28,6 +27,7 @@ import org.jetbrains.kotlin.asJava.getJvmSignatureDiagnostics import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest.TestFile import org.jetbrains.kotlin.checkers.BaseDiagnosticsTest.TestModule import org.jetbrains.kotlin.checkers.CheckerTestUtil.ActualDiagnostic +import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.diagnostics.* @@ -42,8 +42,19 @@ import org.junit.Assert import java.io.File import java.util.* import java.util.regex.Pattern +import kotlin.reflect.jvm.javaField abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava() { + protected lateinit var environment: KotlinCoreEnvironment + + protected val project: Project + get() = environment.project + + override fun tearDown() { + this::environment.javaField!![this] = null + super.tearDown() + } + override fun createTestModule(name: String): TestModule = TestModule(name) @@ -61,6 +72,8 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava = ArrayList() val expectedText: String private val clearText: String - val ktFile: KtFile? + private val createKtFile: Lazy private val whatDiagnosticsToConsider: Condition val customLanguageVersionSettings: LanguageVersionSettings? val declareCheckType: Boolean @@ -137,19 +150,20 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava extends KotlinTestWithEnvironment { +public abstract class KotlinMultiFileTestWithJava extends KtUsefulTestCase { private File javaFilesDir; private File kotlinSourceRoot; + @Override + public void setUp() throws Exception { + super.setUp(); + // TODO: do not create temporary directory for tests without Java sources + javaFilesDir = KotlinTestUtils.tmpDir("java-files"); + if (isKotlinSourceRootNeeded()) { + kotlinSourceRoot = KotlinTestUtils.tmpDir("kotlin-src"); + } + } + + @Override + protected void tearDown() throws Exception { + if (javaFilesDir != null) FileUtil.delete(javaFilesDir); + if (kotlinSourceRoot != null) FileUtil.delete(kotlinSourceRoot); + super.tearDown(); + } + public class ModuleAndDependencies { final M module; final List dependencies; @@ -55,10 +72,8 @@ public abstract class KotlinMultiFileTestWithJava extends KotlinTestWithEn } } - @Override - protected KotlinCoreEnvironment createEnvironment() throws Exception { - // TODO: do not create temporary directory for tests without Java sources - javaFilesDir = KotlinTestUtils.tmpDir("java-files"); + @NotNull + protected KotlinCoreEnvironment createEnvironment() { CompilerConfiguration configuration = KotlinTestUtils.newConfiguration( getConfigurationKind(), getTestJdkKind(), @@ -67,18 +82,11 @@ public abstract class KotlinMultiFileTestWithJava extends KotlinTestWithEn ); configuration.add(JVMConfigurationKeys.SCRIPT_DEFINITIONS, StandardScriptDefinition.INSTANCE); if (isKotlinSourceRootNeeded()) { - kotlinSourceRoot = KotlinTestUtils.tmpDir("kotlin-src"); ContentRootsKt.addKotlinSourceRoot(configuration, kotlinSourceRoot.getPath()); } return KotlinCoreEnvironment.createForTests(getTestRootDisposable(), configuration, getEnvironmentConfigFiles()); } - @Override - protected void removeEnvironment() throws Exception { - if (javaFilesDir != null) FileUtil.delete(javaFilesDir); - if (kotlinSourceRoot != null) FileUtil.delete(kotlinSourceRoot); - } - @NotNull protected ConfigurationKind getConfigurationKind() { return ConfigurationKind.JDK_ONLY; diff --git a/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java b/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java index bb7bc83e6e3..cb8e08075ec 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java +++ b/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironment.java @@ -31,13 +31,11 @@ public abstract class KotlinTestWithEnvironment extends KotlinTestWithEnvironmen @Override protected void tearDown() throws Exception { - removeEnvironment(); environment = null; super.tearDown(); } protected abstract KotlinCoreEnvironment createEnvironment() throws Exception; - protected void removeEnvironment() throws Exception {} @NotNull public KotlinCoreEnvironment getEnvironment() { diff --git a/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironmentManagement.java b/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironmentManagement.java index 57dc5f3a193..6151f4177c7 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironmentManagement.java +++ b/compiler/tests-common/org/jetbrains/kotlin/test/KotlinTestWithEnvironmentManagement.java @@ -19,12 +19,10 @@ package org.jetbrains.kotlin.test; import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment; import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase; -import org.jetbrains.kotlin.types.FlexibleTypeImpl; public abstract class KotlinTestWithEnvironmentManagement extends KtUsefulTestCase { static { System.setProperty("java.awt.headless", "true"); - FlexibleTypeImpl.RUN_SLOW_ASSERTIONS = true; } @NotNull diff --git a/compiler/tests-common/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java b/compiler/tests-common/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java index b30e84ef779..9210b4ac756 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java +++ b/compiler/tests-common/org/jetbrains/kotlin/test/testFramework/KtUsefulTestCase.java @@ -38,6 +38,7 @@ import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.kotlin.types.FlexibleTypeImpl; import org.jetbrains.kotlin.utils.ExceptionUtilsKt; import org.junit.Assert; @@ -80,6 +81,8 @@ public abstract class KtUsefulTestCase extends TestCase { static { // Radar #5755208: Command line Java applications need a way to launch without a Dock icon. System.setProperty("apple.awt.UIElement", "true"); + + FlexibleTypeImpl.RUN_SLOW_ASSERTIONS = true; } private boolean oldDisposerDebug; diff --git a/compiler/tests-common/tests-common.iml b/compiler/tests-common/tests-common.iml index 346329a992f..b62f8eb6ecc 100644 --- a/compiler/tests-common/tests-common.iml +++ b/compiler/tests-common/tests-common.iml @@ -31,5 +31,6 @@ + \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/asJava/AbstractCompilerLightClassTest.java b/compiler/tests/org/jetbrains/kotlin/asJava/AbstractCompilerLightClassTest.java index d89b6d4f1d1..a54a2662bbc 100644 --- a/compiler/tests/org/jetbrains/kotlin/asJava/AbstractCompilerLightClassTest.java +++ b/compiler/tests/org/jetbrains/kotlin/asJava/AbstractCompilerLightClassTest.java @@ -52,10 +52,11 @@ public abstract class AbstractCompilerLightClassTest extends KotlinMultiFileTest @Override protected void doMultiFileTest(File file, Map modules, List files) throws IOException { + KotlinCoreEnvironment environment = createEnvironment(); File expectedFile = KotlinTestUtils.replaceExtension(file, "java"); LightClassTestCommon.INSTANCE.testLightClass(expectedFile, file, s -> { try { - return createFinder(getEnvironment()).findClass(s, GlobalSearchScope.allScope(getEnvironment().getProject())); + return createFinder(environment).findClass(s, GlobalSearchScope.allScope(environment.getProject())); } catch (IOException e) { throw ExceptionUtilsKt.rethrow(e); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.kt b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.kt index 7d8c1f7ca2a..d059d040c28 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.kt +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsTestWithJsStdLib.kt @@ -36,22 +36,19 @@ import org.jetbrains.kotlin.serialization.js.ModuleKind import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.test.KotlinTestUtils import java.util.* -import kotlin.reflect.jvm.javaField abstract class AbstractDiagnosticsTestWithJsStdLib : AbstractDiagnosticsTest() { - protected lateinit var config: JsConfig - private set - - override fun setUp() { - super.setUp() - config = JsConfig(project, environment.configuration.copy().apply { + private var lazyConfig: Lazy? = lazy(LazyThreadSafetyMode.NONE) { + JsConfig(project, environment.configuration.copy().apply { put(CommonConfigurationKeys.MODULE_NAME, KotlinTestUtils.TEST_MODULE_NAME) put(JSConfigurationKeys.LIBRARIES, JsConfig.JS_STDLIB) }) } + protected val config: JsConfig get() = lazyConfig!!.value + override fun tearDown() { - (AbstractDiagnosticsTestWithJsStdLib::config).javaField!!.set(this, null) + lazyConfig = null super.tearDown() } diff --git a/plugins/plugins-tests/tests/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt b/plugins/plugins-tests/tests/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt index c1c4feb939c..65f7b56cf92 100644 --- a/plugins/plugins-tests/tests/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt +++ b/plugins/plugins-tests/tests/org/jetbrains/kotlin/annotation/AbstractAnnotationProcessorBoxTest.kt @@ -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) {