diff --git a/compiler/tests-gen/org/jetbrains/kotlin/checkers/DiagnosticsNativeTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticsNativeTestGenerated.java similarity index 78% rename from compiler/tests-gen/org/jetbrains/kotlin/checkers/DiagnosticsNativeTestGenerated.java rename to compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticsNativeTestGenerated.java index ea672d9b2e1..755e934ed4c 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/checkers/DiagnosticsNativeTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticsNativeTestGenerated.java @@ -3,52 +3,52 @@ * 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; +package org.jetbrains.kotlin.test.runners; import com.intellij.testFramework.TestDataPath; -import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; -import org.jetbrains.kotlin.test.KotlinTestUtils; import org.jetbrains.kotlin.test.util.KtTestUtil; import org.jetbrains.kotlin.test.TestMetadata; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; import java.io.File; import java.util.regex.Pattern; -/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +/** This class is generated by {@link GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @TestMetadata("compiler/testData/diagnostics/nativeTests") @TestDataPath("$PROJECT_ROOT") -@RunWith(JUnit3RunnerWithInners.class) public class DiagnosticsNativeTestGenerated extends AbstractDiagnosticsNativeTest { - private void runTest(String testDataFilePath) throws Exception { - KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); - } - + @Test public void testAllFilesPresentInNativeTests() throws Exception { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/nativeTests"), Pattern.compile("^(.+)\\.kt$"), null, true); } + @Test @TestMetadata("sharedImmutable.kt") public void testSharedImmutable() throws Exception { runTest("compiler/testData/diagnostics/nativeTests/sharedImmutable.kt"); } + @Test @TestMetadata("threadLocal.kt") public void testThreadLocal() throws Exception { runTest("compiler/testData/diagnostics/nativeTests/threadLocal.kt"); } + @Test @TestMetadata("throws.kt") public void testThrows() throws Exception { runTest("compiler/testData/diagnostics/nativeTests/throws.kt"); } + @Test @TestMetadata("throwsClash.kt") public void testThrowsClash() throws Exception { runTest("compiler/testData/diagnostics/nativeTests/throwsClash.kt"); } + @Test @TestMetadata("topLevelSingleton.kt") public void testTopLevelSingleton() throws Exception { runTest("compiler/testData/diagnostics/nativeTests/topLevelSingleton.kt"); diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt index a15d042fdeb..2a8879be9bd 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/classic/ClassicFrontendFacade.kt @@ -9,6 +9,8 @@ import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analyzer.AnalysisResult import org.jetbrains.kotlin.analyzer.common.CommonResolverForModuleFactory +import org.jetbrains.kotlin.builtins.DefaultBuiltIns +import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.builtins.jvm.JvmBuiltIns import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider import org.jetbrains.kotlin.cli.jvm.compiler.NoScopeRecordCliBindingTrace @@ -17,8 +19,8 @@ import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.JVMConfigurationKeys import org.jetbrains.kotlin.config.JVMConfigurationKeys.JVM_TARGET import org.jetbrains.kotlin.config.JvmTarget -import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.container.get +import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.context.ProjectContext import org.jetbrains.kotlin.context.withModule import org.jetbrains.kotlin.descriptors.impl.CompositePackageFragmentProvider @@ -31,6 +33,7 @@ import org.jetbrains.kotlin.js.analyze.TopDownAnalyzerFacadeForJS import org.jetbrains.kotlin.js.config.JsConfig import org.jetbrains.kotlin.load.java.lazy.SingleModuleClassResolver import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.native.FakeTopDownAnalyzerFacadeForNative import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.platform.js.isJs import org.jetbrains.kotlin.platform.jvm.JvmPlatforms @@ -44,6 +47,7 @@ import org.jetbrains.kotlin.resolve.jvm.JavaDescriptorResolver import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory import org.jetbrains.kotlin.serialization.deserialization.MetadataPartProvider +import org.jetbrains.kotlin.storage.StorageManager import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.model.FrontendFacade @@ -99,7 +103,6 @@ class ClassicFrontendFacade( configuration, packagePartProviderFactory, ktFiles, - languageVersionSettings, dependentDescriptors, hasCommonModules ) @@ -131,7 +134,6 @@ class ClassicFrontendFacade( configuration: CompilerConfiguration, packagePartProviderFactory: (GlobalSearchScope) -> JvmPackagePartProvider, files: List, - languageVersionSettings: LanguageVersionSettings, dependentDescriptors: List, hasCommonModules: Boolean ): AnalysisResult { @@ -147,8 +149,8 @@ class ClassicFrontendFacade( hasCommonModules ) targetPlatform.isJs() -> performJsModuleResolve(project, configuration, files, dependentDescriptors) - targetPlatform.isNative() -> TODO() - targetPlatform.isCommon() -> performCommonModuleResolve(module, files, languageVersionSettings) + targetPlatform.isNative() -> performNativeModuleResolve(module, project, files) + targetPlatform.isCommon() -> performCommonModuleResolve(module, files) else -> error("Should not be here") } } @@ -175,21 +177,12 @@ class ClassicFrontendFacade( ) } - val projectContext = ProjectContext(project, "test project context") - val storageManager = projectContext.storageManager - - val builtIns = JvmBuiltIns(storageManager, JvmBuiltIns.Kind.FROM_CLASS_LOADER) - val moduleDescriptor = ModuleDescriptorImpl(Name.special("<${module.name}>"), storageManager, builtIns, module.targetPlatform) - val dependencies = buildList { - add(moduleDescriptor) - add(moduleDescriptor.builtIns.builtInsModule) - addAll(dependentDescriptors) - } - moduleDescriptor.setDependencies(dependencies) - val moduleContentScope = GlobalSearchScope.allScope(project) val moduleClassResolver = SingleModuleClassResolver() - val moduleContext = projectContext.withModule(moduleDescriptor) + val moduleContext = createModuleContext(module, project, dependentDescriptors) { + JvmBuiltIns(it, JvmBuiltIns.Kind.FROM_CLASS_LOADER) + } + val moduleDescriptor = moduleContext.module as ModuleDescriptorImpl val jvmTarget = configuration[JVM_TARGET] ?: JvmTarget.DEFAULT val container = createContainerForLazyResolveWithJava( JvmPlatforms.jvmPlatformByTargetVersion(jvmTarget), // TODO(dsavvinov): do not pass JvmTarget around @@ -243,16 +236,32 @@ class ClassicFrontendFacade( ) } + private fun performNativeModuleResolve( + module: TestModule, + project: Project, + files: List, + ): AnalysisResult { + val moduleTrace = NoScopeRecordCliBindingTrace() + val moduleContext = createModuleContext(module, project, dependentDescriptors = emptyList()) { + DefaultBuiltIns() + } + return FakeTopDownAnalyzerFacadeForNative.analyzeFilesWithGivenTrace( + files, + moduleTrace, + moduleContext, + module.languageVersionSettings + ) + } + private fun performCommonModuleResolve( module: TestModule, files: List, - languageVersionSettings: LanguageVersionSettings, ): AnalysisResult { return CommonResolverForModuleFactory.analyzeFiles( files, Name.special("<${module.name}>"), dependOnBuiltIns = true, - languageVersionSettings, + module.languageVersionSettings, module.targetPlatform, // TODO: add dependency manager ) { _ -> @@ -260,4 +269,26 @@ class ClassicFrontendFacade( MetadataPartProvider.Empty } } + + @OptIn(ExperimentalStdlibApi::class) + private fun createModuleContext( + module: TestModule, + project: Project, + dependentDescriptors: List, + builtInsFactory: (StorageManager) -> KotlinBuiltIns, + ): ModuleContext { + val projectContext = ProjectContext(project, "test project context") + val storageManager = projectContext.storageManager + + val builtIns = builtInsFactory(storageManager) + val moduleDescriptor = ModuleDescriptorImpl(Name.special("<${module.name}>"), storageManager, builtIns, module.targetPlatform) + val dependencies = buildList { + add(moduleDescriptor) + add(moduleDescriptor.builtIns.builtInsModule) + addAll(dependentDescriptors) + } + moduleDescriptor.setDependencies(dependencies) + + return projectContext.withModule(moduleDescriptor) + } } diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/generators/GenerateNewCompilerTests.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/generators/GenerateNewCompilerTests.kt index eb9a06cde4c..a9ea608954a 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/generators/GenerateNewCompilerTests.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/generators/GenerateNewCompilerTests.kt @@ -39,6 +39,10 @@ fun main(args: Array) { testClass { model("diagnostics/testsWithJvmBackend", targetBackend = TargetBackend.JVM_IR) } + + testClass { + model("diagnostics/nativeTests") + } } testGroup("compiler/tests-common-new/tests-gen", "compiler/fir/analysis-tests/testData") { diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticsNativeTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticsNativeTest.kt new file mode 100644 index 00000000000..6c4167222b4 --- /dev/null +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractDiagnosticsNativeTest.kt @@ -0,0 +1,48 @@ +/* + * 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.test.runners + +import org.jetbrains.kotlin.platform.konan.NativePlatforms +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives +import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade +import org.jetbrains.kotlin.test.frontend.classic.handlers.ClassicDiagnosticsHandler +import org.jetbrains.kotlin.test.frontend.classic.handlers.DeclarationsDumpHandler +import org.jetbrains.kotlin.test.frontend.classic.handlers.OldNewInferenceMetaInfoProcessor +import org.jetbrains.kotlin.test.model.BackendKind +import org.jetbrains.kotlin.test.model.DependencyKind +import org.jetbrains.kotlin.test.model.FrontendKinds +import org.jetbrains.kotlin.test.services.AdditionalDiagnosticsSourceFilesProvider +import org.jetbrains.kotlin.test.services.CoroutineHelpersSourceFilesProvider + +abstract class AbstractDiagnosticsNativeTest : AbstractKotlinCompilerTest() { + override fun TestConfigurationBuilder.configuration() { + globalDefaults { + frontend = FrontendKinds.ClassicFrontend + backend = BackendKind.NoBackend + targetPlatform = NativePlatforms.unspecifiedNativePlatform + dependencyKind = DependencyKind.Source + } + + defaultDirectives { + +JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING + } + + enableMetaInfoHandler() + + useMetaInfoProcessors(::OldNewInferenceMetaInfoProcessor) + useAdditionalSourceProviders( + ::AdditionalDiagnosticsSourceFilesProvider, + ::CoroutineHelpersSourceFilesProvider, + ) + + useFrontendFacades(::ClassicFrontendFacade) + useFrontendHandlers( + ::DeclarationsDumpHandler, + ::ClassicDiagnosticsHandler, + ) + } +} diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt index 360a5d48b32..cf9b0c9d140 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/CompilerConfigurationProvider.kt @@ -20,6 +20,10 @@ import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfigurationKey import org.jetbrains.kotlin.config.languageVersionSettings +import org.jetbrains.kotlin.platform.isCommon +import org.jetbrains.kotlin.platform.js.isJs +import org.jetbrains.kotlin.platform.jvm.isJvm +import org.jetbrains.kotlin.platform.konan.isNative import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.test.model.TestFile import org.jetbrains.kotlin.test.model.TestModule @@ -59,11 +63,20 @@ class CompilerConfigurationProviderImpl( override fun getKotlinCoreEnvironment(module: TestModule): KotlinCoreEnvironment { return cache.getOrPut(module) { + val platform = module.targetPlatform + val configFiles = when { + platform.isJvm() -> EnvironmentConfigFiles.JVM_CONFIG_FILES + platform.isJs() -> EnvironmentConfigFiles.JS_CONFIG_FILES + platform.isNative() -> EnvironmentConfigFiles.NATIVE_CONFIG_FILES + // TODO: is it correct? + platform.isCommon() -> EnvironmentConfigFiles.METADATA_CONFIG_FILES + else -> error("Unknown platform: $platform") + } val projectEnv = KotlinCoreEnvironment.createProjectEnvironmentForTests(testRootDisposable, CompilerConfiguration()) KotlinCoreEnvironment.createForTests( projectEnv, createCompilerConfiguration(module, projectEnv.project), - EnvironmentConfigFiles.JVM_CONFIG_FILES + configFiles ) } } diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsNativeTest.kt b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/native/FakeTopDownAnalyzerFacadeForNative.kt similarity index 58% rename from compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsNativeTest.kt rename to compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/native/FakeTopDownAnalyzerFacadeForNative.kt index ee98e24b0bc..1d57dffcb24 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/AbstractDiagnosticsNativeTest.kt +++ b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/native/FakeTopDownAnalyzerFacadeForNative.kt @@ -3,12 +3,9 @@ * 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 +package org.jetbrains.kotlin.native import org.jetbrains.kotlin.analyzer.AnalysisResult -import org.jetbrains.kotlin.builtins.DefaultBuiltIns -import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles -import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.container.useInstance @@ -16,7 +13,6 @@ import org.jetbrains.kotlin.context.ModuleContext import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl import org.jetbrains.kotlin.frontend.di.configureModule import org.jetbrains.kotlin.frontend.di.configureStandardResolveComponents -import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.platform.konan.NativePlatforms import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.* @@ -24,49 +20,8 @@ import org.jetbrains.kotlin.resolve.konan.platform.NativePlatformAnalyzerService import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer import org.jetbrains.kotlin.resolve.lazy.declarations.DeclarationProviderFactory import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory -import org.jetbrains.kotlin.storage.StorageManager -import java.util.* - -abstract class AbstractDiagnosticsNativeTest : AbstractDiagnosticsTest() { - - override fun getEnvironmentConfigFiles(): EnvironmentConfigFiles = EnvironmentConfigFiles.NATIVE_CONFIG_FILES - - override fun analyzeModuleContents( - moduleContext: ModuleContext, - files: List, - moduleTrace: BindingTrace, - languageVersionSettings: LanguageVersionSettings, - separateModules: Boolean, - jvmTarget: JvmTarget - ): AnalysisResult = FakeTopDownAnalyzerFacadeForNative.analyzeFilesWithGivenTrace( - files, - moduleTrace, - moduleContext, - languageVersionSettings - ) - - override fun shouldSkipJvmSignatureDiagnostics(groupedByModule: Map>): Boolean = true - - override fun createModule(moduleName: String, storageManager: StorageManager): ModuleDescriptorImpl = - ModuleDescriptorImpl(Name.special("<$moduleName>"), storageManager, DefaultBuiltIns()) - - override fun createSealedModule(storageManager: StorageManager): ModuleDescriptorImpl { - val module = createModule("kotlin-native-test-module", storageManager) - - val dependencies = ArrayList() - - dependencies.add(module) - dependencies.addAll(getAdditionalDependencies(module)) - dependencies.add(module.builtIns.builtInsModule) - - module.setDependencies(dependencies) - - return module - } -} - -private object FakeTopDownAnalyzerFacadeForNative { +object FakeTopDownAnalyzerFacadeForNative { fun analyzeFilesWithGivenTrace( files: Collection, trace: BindingTrace, @@ -80,7 +35,7 @@ private object FakeTopDownAnalyzerFacadeForNative { languageVersionSettings ) - analyzerForNative.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files) + analyzerForNative.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files as Collection) return AnalysisResult.success(trace.bindingContext, moduleContext.module) } } diff --git a/compiler/tests/org/jetbrains/kotlin/generators/tests/GenerateCompilerTests.kt b/compiler/tests/org/jetbrains/kotlin/generators/tests/GenerateCompilerTests.kt index 2cb24bacb7f..e9b03e95d04 100644 --- a/compiler/tests/org/jetbrains/kotlin/generators/tests/GenerateCompilerTests.kt +++ b/compiler/tests/org/jetbrains/kotlin/generators/tests/GenerateCompilerTests.kt @@ -71,10 +71,6 @@ fun main(args: Array) { model("diagnostics/testsWithJsStdLibAndBackendCompilation") } - testClass { - model("diagnostics/nativeTests") - } - testClass { model("diagnostics/testsWithJava15") }