提交 2aa1cb74 编写于 作者: D Dmitriy Novozhilov

[TEST] Migrate AbstractDiagnosticsNativeTest to new test runners

上级 e7f84860
......@@ -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");
......
......@@ -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<KtFile>,
languageVersionSettings: LanguageVersionSettings,
dependentDescriptors: List<ModuleDescriptorImpl>,
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<KtFile>,
): 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<KtFile>,
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<ModuleDescriptorImpl>,
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)
}
}
......@@ -39,6 +39,10 @@ fun main(args: Array<String>) {
testClass<AbstractDiagnosticsTestWithJvmIrBackend> {
model("diagnostics/testsWithJvmBackend", targetBackend = TargetBackend.JVM_IR)
}
testClass<AbstractDiagnosticsNativeTest> {
model("diagnostics/nativeTests")
}
}
testGroup("compiler/tests-common-new/tests-gen", "compiler/fir/analysis-tests/testData") {
......
/*
* 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,
)
}
}
......@@ -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
)
}
}
......
......@@ -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<KtFile>,
moduleTrace: BindingTrace,
languageVersionSettings: LanguageVersionSettings,
separateModules: Boolean,
jvmTarget: JvmTarget
): AnalysisResult = FakeTopDownAnalyzerFacadeForNative.analyzeFilesWithGivenTrace(
files,
moduleTrace,
moduleContext,
languageVersionSettings
)
override fun shouldSkipJvmSignatureDiagnostics(groupedByModule: Map<TestModule?, List<TestFile>>): 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<ModuleDescriptorImpl>()
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<KtFile>,
trace: BindingTrace,
......@@ -80,7 +35,7 @@ private object FakeTopDownAnalyzerFacadeForNative {
languageVersionSettings
)
analyzerForNative.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files)
analyzerForNative.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, files as Collection<com.intellij.psi.PsiElement>)
return AnalysisResult.success(trace.bindingContext, moduleContext.module)
}
}
......
......@@ -71,10 +71,6 @@ fun main(args: Array<String>) {
model("diagnostics/testsWithJsStdLibAndBackendCompilation")
}
testClass<AbstractDiagnosticsNativeTest> {
model("diagnostics/nativeTests")
}
testClass<AbstractDiagnosticsWithJdk15Test> {
model("diagnostics/testsWithJava15")
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册