[AA] Enable test-specific configuration of write access permissions
- In general, Analysis API tests forbid write access because the Analysis API should not be used from write actions. However, in some cases we might want tests to e.g. modify PSI, which requires write access. This change allows `AnalysisApiTestConfigurator`s to enable write access for the specific test.
This commit is contained in:
committed by
Space Team
parent
6189d68c3c
commit
03a7162f37
+1
-1
@@ -26,7 +26,7 @@ fun TestConfigurationBuilder.registerAnalysisApiBaseTestServices(
|
||||
) {
|
||||
useAdditionalService<TestDisposableProvider>(::TestDisposableProviderImpl)
|
||||
useAdditionalService<AnalysisApiKtModuleProvider>(::AnalysisApiKtModuleProviderImpl)
|
||||
useAdditionalService<AnalysisApiEnvironmentManager>(::AnalysisApiEnvironmentManagerImpl.bind(testDisposable))
|
||||
useAdditionalService<AnalysisApiEnvironmentManager>(::AnalysisApiEnvironmentManagerImpl.bind(testDisposable, configurator))
|
||||
useAdditionalService<ApplicationDisposableProvider> { ExecutionListenerBasedDisposableProvider() }
|
||||
useAdditionalService<KotlinStandardLibrariesPathProvider> { StandardLibrariesPathProviderForKotlinProject }
|
||||
|
||||
|
||||
+4
-1
@@ -12,7 +12,9 @@ import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtSta
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtBuiltinsModule
|
||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.ktModuleProvider
|
||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreApplicationEnvironment
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreApplicationEnvironmentMode
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
@@ -38,12 +40,13 @@ abstract class AnalysisApiEnvironmentManager : TestService {
|
||||
class AnalysisApiEnvironmentManagerImpl(
|
||||
override val testServices: TestServices,
|
||||
override val testRootDisposable: Disposable,
|
||||
private val configurator: AnalysisApiTestConfigurator,
|
||||
) : AnalysisApiEnvironmentManager() {
|
||||
private val _projectEnvironment: KotlinCoreProjectEnvironment by lazy {
|
||||
StandaloneProjectFactory.createProjectEnvironment(
|
||||
testRootDisposable,
|
||||
testServices.applicationDisposableProvider.getApplicationRootDisposable(),
|
||||
unitTestMode = true
|
||||
KotlinCoreApplicationEnvironmentMode.UnitTest(configurator.isWriteAccessAllowed),
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+9
@@ -36,6 +36,15 @@ abstract class AnalysisApiTestConfigurator {
|
||||
|
||||
abstract val serviceRegistrars: List<AnalysisApiTestServiceRegistrar>
|
||||
|
||||
/**
|
||||
* Whether the associated [core application environment][org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreApplicationEnvironment] should
|
||||
* permit write access.
|
||||
*
|
||||
* Write access is disabled by default because the Analysis API should not be used during write actions. Nevertheless, some tests may
|
||||
* need write access, for example to modify PSI.
|
||||
*/
|
||||
open val isWriteAccessAllowed get() = false
|
||||
|
||||
open fun prepareFilesInModule(files: List<PsiFile>, module: TestModule, testServices: TestServices) {}
|
||||
|
||||
open fun doGlobalModuleStateModification(project: Project) {
|
||||
|
||||
Reference in New Issue
Block a user