[FIR] Support reading optIn annotations from module dump in MT and FP tests

This commit is contained in:
Dmitriy Novozhilov
2022-01-28 12:51:09 +03:00
committed by TeamCityServer
parent 1265dda880
commit 938baa5cfe
5 changed files with 21 additions and 6 deletions
@@ -145,6 +145,7 @@ abstract class AbstractFullPipelineModularizedTest : AbstractModularizedTest() {
args.freeArgs = moduleData.sources.map { it.absolutePath } args.freeArgs = moduleData.sources.map { it.absolutePath }
args.destination = tmp.toAbsolutePath().toFile().toString() args.destination = tmp.toAbsolutePath().toFile().toString()
args.friendPaths = moduleData.friendDirs.map { it.canonicalPath }.toTypedArray() args.friendPaths = moduleData.friendDirs.map { it.canonicalPath }.toTypedArray()
args.optIn = moduleData.optInAnnotations.toTypedArray()
} }
private fun configureArgsUsingBuildFile(args: K2JVMCompilerArguments, moduleData: ModuleData, tmp: Path) { private fun configureArgsUsingBuildFile(args: K2JVMCompilerArguments, moduleData: ModuleData, tmp: Path) {
@@ -7,10 +7,10 @@ package org.jetbrains.kotlin.fir
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.config.KotlinSourceRoot 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.addJavaSourceRoot
import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.JVMConfigurationKeys
import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.ProcessorAction
import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.test.KotlinTestUtils
import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase
@@ -31,6 +31,7 @@ data class ModuleData(
val rawSources: List<String>, val rawSources: List<String>,
val rawJavaSourceRoots: List<JavaSourceRootData<String>>, val rawJavaSourceRoots: List<JavaSourceRootData<String>>,
val rawFriendDirs: List<String>, val rawFriendDirs: List<String>,
val optInAnnotations: List<String>,
val rawModularJdkRoot: String?, val rawModularJdkRoot: String?,
val rawJdkHome: String?, val rawJdkHome: String?,
val isCommon: Boolean val isCommon: Boolean
@@ -99,6 +100,11 @@ abstract class AbstractModularizedTest : KtUsefulTestCase() {
configuration.addJavaSourceRoot(it.path, it.packagePrefix) configuration.addJavaSourceRoot(it.path, it.packagePrefix)
} }
configuration.addJvmClasspathRoots(moduleData.classpath) 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 // in case of modular jdk only
configuration.putIfNotNull(JVMConfigurationKeys.JDK_HOME, moduleData.modularJdkRoot) configuration.putIfNotNull(JVMConfigurationKeys.JDK_HOME, moduleData.modularJdkRoot)
@@ -124,6 +130,7 @@ abstract class AbstractModularizedTest : KtUsefulTestCase() {
val classpath = mutableListOf<String>() val classpath = mutableListOf<String>()
val sources = mutableListOf<String>() val sources = mutableListOf<String>()
val friendDirs = mutableListOf<String>() val friendDirs = mutableListOf<String>()
val optInAnnotations = mutableListOf<String>()
val timestamp = moduleElement.attributes.getNamedItem("timestamp")?.nodeValue?.toLong() ?: 0 val timestamp = moduleElement.attributes.getNamedItem("timestamp")?.nodeValue?.toLong() ?: 0
val jdkHome = moduleElement.attributes.getNamedItem("jdkHome")?.nodeValue val jdkHome = moduleElement.attributes.getNamedItem("jdkHome")?.nodeValue
var modularJdkRoot: String? = null var modularJdkRoot: String? = null
@@ -153,6 +160,7 @@ abstract class AbstractModularizedTest : KtUsefulTestCase() {
"sources" -> sources += item.attributes.getNamedItem("path").nodeValue "sources" -> sources += item.attributes.getNamedItem("path").nodeValue
"commonSources" -> isCommon = true "commonSources" -> isCommon = true
"modularJdkRoot" -> modularJdkRoot = item.attributes.getNamedItem("path").nodeValue "modularJdkRoot" -> modularJdkRoot = item.attributes.getNamedItem("path").nodeValue
"useOptIn" -> optInAnnotations += item.attributes.getNamedItem("annotation").nodeValue
} }
} }
@@ -165,9 +173,10 @@ abstract class AbstractModularizedTest : KtUsefulTestCase() {
sources, sources,
javaSourceRoots, javaSourceRoots,
friendDirs, friendDirs,
optInAnnotations,
modularJdkRoot, modularJdkRoot,
jdkHome, jdkHome,
isCommon isCommon,
) )
} }
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ObsoleteTestInfrastructure
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
import org.jetbrains.kotlin.cli.common.toBooleanLenient import org.jetbrains.kotlin.cli.common.toBooleanLenient
import org.jetbrains.kotlin.cli.jvm.compiler.* 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.AbstractDiagnosticCollector
import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector import org.jetbrains.kotlin.fir.analysis.collectors.FirDiagnosticsCollector
import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory import org.jetbrains.kotlin.diagnostics.DiagnosticReporterFactory
@@ -133,7 +134,8 @@ class FirResolveModularizedTotalKotlinTest : AbstractModularizedTest() {
scope.toAbstractProjectFileSearchScope(), scope.toAbstractProjectFileSearchScope(),
librariesScope.toAbstractProjectFileSearchScope(), librariesScope.toAbstractProjectFileSearchScope(),
moduleData.qualifiedName, moduleData.qualifiedName,
moduleData.friendDirs.map { it.toPath() } moduleData.friendDirs.map { it.toPath() },
environment.configuration.languageVersionSettings
) )
val scopeSession = ScopeSession() val scopeSession = ScopeSession()
val processors = createAllCompilerResolveProcessors(session, scopeSession).let { val processors = createAllCompilerResolveProcessors(session, scopeSession).let {
@@ -82,7 +82,8 @@ class NonFirResolveModularizedTotalKotlinTest : AbstractModularizedTest() {
LanguageFeature.NewInference to if (USE_NI) LanguageFeature.State.ENABLED else LanguageFeature.State.DISABLED LanguageFeature.NewInference to if (USE_NI) LanguageFeature.State.ENABLED else LanguageFeature.State.DISABLED
), ),
analysisFlags = mapOf( analysisFlags = mapOf(
AnalysisFlags.skipPrereleaseCheck to true AnalysisFlags.skipPrereleaseCheck to true,
AnalysisFlags.optIn to moduleData.optInAnnotations
) )
) )
@@ -12,6 +12,7 @@ import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.ObsoleteTestInfrastructure import org.jetbrains.kotlin.ObsoleteTestInfrastructure
import org.jetbrains.kotlin.cli.jvm.compiler.PsiBasedProjectEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.PsiBasedProjectEnvironment
import org.jetbrains.kotlin.cli.jvm.compiler.PsiBasedProjectFileSearchScope import org.jetbrains.kotlin.cli.jvm.compiler.PsiBasedProjectFileSearchScope
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.fir.session.FirSessionFactory import org.jetbrains.kotlin.fir.session.FirSessionFactory
import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment import org.jetbrains.kotlin.fir.session.environment.AbstractProjectEnvironment
@@ -29,13 +30,14 @@ fun createSessionForTests(
librariesScope: AbstractProjectFileSearchScope = !sourceScope, librariesScope: AbstractProjectFileSearchScope = !sourceScope,
moduleName: String = "TestModule", moduleName: String = "TestModule",
friendsPaths: List<Path> = emptyList(), friendsPaths: List<Path> = emptyList(),
languageVersionSettings: LanguageVersionSettings = LanguageVersionSettingsImpl.DEFAULT
): FirSession = FirSessionFactory.createSessionWithDependencies( ): FirSession = FirSessionFactory.createSessionWithDependencies(
Name.identifier(moduleName), Name.identifier(moduleName),
JvmPlatforms.unspecifiedJvmPlatform, JvmPlatforms.unspecifiedJvmPlatform,
JvmPlatformAnalyzerServices, JvmPlatformAnalyzerServices,
externalSessionProvider = null, externalSessionProvider = null,
projectEnvironment, projectEnvironment,
languageVersionSettings = LanguageVersionSettingsImpl.DEFAULT, languageVersionSettings,
sourceScope, sourceScope,
librariesScope, librariesScope,
lookupTracker = null, lookupTracker = null,