[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.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) {
@@ -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<String>,
val rawJavaSourceRoots: List<JavaSourceRootData<String>>,
val rawFriendDirs: List<String>,
val optInAnnotations: List<String>,
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<String>()
val sources = mutableListOf<String>()
val friendDirs = mutableListOf<String>()
val optInAnnotations = mutableListOf<String>()
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,
)
}
@@ -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 {
@@ -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
)
)
@@ -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<Path> = 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,