From 938baa5cfe7d91a79644bee242d9ec8686e85e76 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Fri, 28 Jan 2022 12:51:09 +0300 Subject: [PATCH] [FIR] Support reading optIn annotations from module dump in MT and FP tests --- .../fir/AbstractFullPipelineModularizedTest.kt | 1 + .../kotlin/fir/AbstractModularizedTest.kt | 15 ++++++++++++--- .../fir/FirResolveModularizedTotalKotlinTest.kt | 4 +++- .../NonFirResolveModularizedTotalKotlinTest.kt | 3 ++- .../org/jetbrains/kotlin/fir/SessionTestUtils.kt | 4 +++- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractFullPipelineModularizedTest.kt b/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractFullPipelineModularizedTest.kt index beb808441bb..26364697d16 100644 --- a/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractFullPipelineModularizedTest.kt +++ b/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractFullPipelineModularizedTest.kt @@ -145,6 +145,7 @@ abstract class AbstractFullPipelineModularizedTest : AbstractModularizedTest() { args.freeArgs = moduleData.sources.map { it.absolutePath } args.destination = tmp.toAbsolutePath().toFile().toString() args.friendPaths = moduleData.friendDirs.map { it.canonicalPath }.toTypedArray() + args.optIn = moduleData.optInAnnotations.toTypedArray() } private fun configureArgsUsingBuildFile(args: K2JVMCompilerArguments, moduleData: ModuleData, tmp: Path) { diff --git a/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractModularizedTest.kt b/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractModularizedTest.kt index b82a3561234..2f17970af95 100644 --- a/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractModularizedTest.kt +++ b/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/AbstractModularizedTest.kt @@ -7,10 +7,10 @@ package org.jetbrains.kotlin.fir import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot +import org.jetbrains.kotlin.cli.common.setupLanguageVersionSettings import org.jetbrains.kotlin.cli.jvm.config.addJavaSourceRoot import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots -import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.config.JVMConfigurationKeys +import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase @@ -31,6 +31,7 @@ data class ModuleData( val rawSources: List, val rawJavaSourceRoots: List>, val rawFriendDirs: List, + val optInAnnotations: List, val rawModularJdkRoot: String?, val rawJdkHome: String?, val isCommon: Boolean @@ -99,6 +100,11 @@ abstract class AbstractModularizedTest : KtUsefulTestCase() { configuration.addJavaSourceRoot(it.path, it.packagePrefix) } configuration.addJvmClasspathRoots(moduleData.classpath) + configuration.languageVersionSettings = LanguageVersionSettingsImpl( + LanguageVersion.LATEST_STABLE, + ApiVersion.LATEST_STABLE, + analysisFlags = mutableMapOf(AnalysisFlags.optIn to moduleData.optInAnnotations) + ) // in case of modular jdk only configuration.putIfNotNull(JVMConfigurationKeys.JDK_HOME, moduleData.modularJdkRoot) @@ -124,6 +130,7 @@ abstract class AbstractModularizedTest : KtUsefulTestCase() { val classpath = mutableListOf() val sources = mutableListOf() val friendDirs = mutableListOf() + val optInAnnotations = mutableListOf() val timestamp = moduleElement.attributes.getNamedItem("timestamp")?.nodeValue?.toLong() ?: 0 val jdkHome = moduleElement.attributes.getNamedItem("jdkHome")?.nodeValue var modularJdkRoot: String? = null @@ -153,6 +160,7 @@ abstract class AbstractModularizedTest : KtUsefulTestCase() { "sources" -> sources += item.attributes.getNamedItem("path").nodeValue "commonSources" -> isCommon = true "modularJdkRoot" -> modularJdkRoot = item.attributes.getNamedItem("path").nodeValue + "useOptIn" -> optInAnnotations += item.attributes.getNamedItem("annotation").nodeValue } } @@ -165,9 +173,10 @@ abstract class AbstractModularizedTest : KtUsefulTestCase() { sources, javaSourceRoots, friendDirs, + optInAnnotations, modularJdkRoot, jdkHome, - isCommon + isCommon, ) } diff --git a/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/FirResolveModularizedTotalKotlinTest.kt b/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/FirResolveModularizedTotalKotlinTest.kt index 0aea81d3aad..5a60fb5c429 100644 --- a/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/FirResolveModularizedTotalKotlinTest.kt +++ b/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/FirResolveModularizedTotalKotlinTest.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ObsoleteTestInfrastructure import org.jetbrains.kotlin.asJava.finder.JavaElementFinder import org.jetbrains.kotlin.cli.common.toBooleanLenient import org.jetbrains.kotlin.cli.jvm.compiler.* +import org.jetbrains.kotlin.config.languageVersionSettings import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory @@ -133,7 +134,8 @@ class FirResolveModularizedTotalKotlinTest : AbstractModularizedTest() { scope.toAbstractProjectFileSearchScope(), librariesScope.toAbstractProjectFileSearchScope(), moduleData.qualifiedName, - moduleData.friendDirs.map { it.toPath() } + moduleData.friendDirs.map { it.toPath() }, + environment.configuration.languageVersionSettings ) val scopeSession = ScopeSession() val processors = createAllCompilerResolveProcessors(session, scopeSession).let { diff --git a/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/NonFirResolveModularizedTotalKotlinTest.kt b/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/NonFirResolveModularizedTotalKotlinTest.kt index 4c094ca65a5..7e4939fac81 100644 --- a/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/NonFirResolveModularizedTotalKotlinTest.kt +++ b/compiler/fir/modularized-tests/tests/org/jetbrains/kotlin/fir/NonFirResolveModularizedTotalKotlinTest.kt @@ -82,7 +82,8 @@ class NonFirResolveModularizedTotalKotlinTest : AbstractModularizedTest() { LanguageFeature.NewInference to if (USE_NI) LanguageFeature.State.ENABLED else LanguageFeature.State.DISABLED ), analysisFlags = mapOf( - AnalysisFlags.skipPrereleaseCheck to true + AnalysisFlags.skipPrereleaseCheck to true, + AnalysisFlags.optIn to moduleData.optInAnnotations ) ) diff --git a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/fir/SessionTestUtils.kt b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/fir/SessionTestUtils.kt index ebd688db38a..5e6e4b79266 100644 --- a/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/fir/SessionTestUtils.kt +++ b/compiler/tests-compiler-utils/tests/org/jetbrains/kotlin/fir/SessionTestUtils.kt @@ -12,6 +12,7 @@ import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.ObsoleteTestInfrastructure import org.jetbrains.kotlin.cli.jvm.compiler.PsiBasedProjectEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.PsiBasedProjectFileSearchScope +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment @@ -29,13 +30,14 @@ fun createSessionForTests( librariesScope: AbstractProjectFileSearchScope = !sourceScope, moduleName: String = "TestModule", friendsPaths: List = emptyList(), + languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT ): FirSession = FirSessionFactory.createSessionWithDependencies( Name.identifier(moduleName), JvmPlatforms.unspecifiedJvmPlatform, JvmPlatformAnalyzerServices, externalSessionProvider = null, projectEnvironment, - languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT, + languageVersionSettings, sourceScope, librariesScope, lookupTracker = null,