mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[workspace model] Fix generator test for rider modules
GitOrigin-RevId: f601727d5aa8e6cfcca21279987f0ca04d9b9367
This commit is contained in:
committed by
intellij-monorepo-bot
parent
75848fc2de
commit
98278fd456
+35
-46
@@ -7,6 +7,7 @@ import com.intellij.java.workspace.entities.JavaSourceRootPropertiesEntity
|
||||
import com.intellij.java.workspace.entities.javaSourceRoots
|
||||
import com.intellij.openapi.application.runWriteActionAndWait
|
||||
import com.intellij.openapi.diagnostic.logger
|
||||
import com.intellij.openapi.roots.ModifiableRootModel
|
||||
import com.intellij.openapi.roots.ModuleRootManager
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
@@ -144,65 +145,53 @@ class AllIntellijEntitiesGenerationTest : CodeGenerationTestBase() {
|
||||
var storageChanged = false
|
||||
modulesToCheck.forEach { (moduleEntity, sourceRoot), pathToPackages ->
|
||||
val isTestModule = sourceRoot.rootTypeId == JAVA_TEST_ROOT_ENTITY_TYPE_ID
|
||||
|
||||
fun generateForSpecificModule(processAbstractTypes: Boolean, beforeGeneration: (ModifiableRootModel) -> Unit,
|
||||
afterGeneration: (ModifiableRootModel) -> Unit) {
|
||||
runWriteActionAndWait {
|
||||
val modifiableModel = ModuleRootManager.getInstance(module).modifiableModel
|
||||
beforeGeneration(modifiableModel)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
val projectModelUpdateResult = generationFunction(storage, moduleEntity, sourceRoot, pathToPackages, processAbstractTypes, false, isTestModule)
|
||||
storageChanged = storageChanged || projectModelUpdateResult
|
||||
runWriteActionAndWait {
|
||||
val modifiableModel = ModuleRootManager.getInstance(module).modifiableModel
|
||||
afterGeneration(modifiableModel)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
}
|
||||
|
||||
when (moduleEntity.name) {
|
||||
"intellij.platform.workspace.storage"-> {
|
||||
runWriteActionAndWait {
|
||||
val modifiableModel = ModuleRootManager.getInstance(module).modifiableModel
|
||||
removeWorkspaceStorageLibrary(modifiableModel)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
val projectModelUpdateResult = generationFunction(storage, moduleEntity, sourceRoot, pathToPackages, false, true, isTestModule)
|
||||
storageChanged = storageChanged || projectModelUpdateResult
|
||||
runWriteActionAndWait {
|
||||
val modifiableModel = ModuleRootManager.getInstance(module).modifiableModel
|
||||
addWorkspaceStorageLibrary(modifiableModel)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
generateForSpecificModule(false, { modifiableModel -> removeWorkspaceStorageLibrary(modifiableModel) },
|
||||
{ modifiableModel -> addWorkspaceStorageLibrary(modifiableModel) })
|
||||
}
|
||||
"intellij.platform.workspace.jps"-> {
|
||||
runWriteActionAndWait {
|
||||
val modifiableModel = ModuleRootManager.getInstance(module).modifiableModel
|
||||
removeWorkspaceJpsEntitiesLibrary(modifiableModel)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
val projectModelUpdateResult = generationFunction(storage, moduleEntity, sourceRoot, pathToPackages, false, false, isTestModule)
|
||||
storageChanged = storageChanged || projectModelUpdateResult
|
||||
runWriteActionAndWait {
|
||||
val modifiableModel = ModuleRootManager.getInstance(module).modifiableModel
|
||||
addWorkspaceJpsEntitiesLibrary(modifiableModel)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
generateForSpecificModule(false, { modifiableModel -> removeWorkspaceJpsEntitiesLibrary(modifiableModel) },
|
||||
{ modifiableModel -> addWorkspaceJpsEntitiesLibrary(modifiableModel) })
|
||||
}
|
||||
"intellij.javaee.platform", "intellij.javaee.ejb", "intellij.javaee.web" -> {
|
||||
// For these modules we need to have reference to `ConfigFileItem` thus we added its module as library
|
||||
runWriteActionAndWait {
|
||||
val modifiableModel = ModuleRootManager.getInstance(module).modifiableModel
|
||||
addIntellijJavaLibrary(modifiableModel)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
val projectModelUpdateResult = generationFunction(storage, moduleEntity, sourceRoot, pathToPackages, false, false, isTestModule)
|
||||
storageChanged = storageChanged || projectModelUpdateResult
|
||||
runWriteActionAndWait {
|
||||
val modifiableModel = ModuleRootManager.getInstance(module).modifiableModel
|
||||
removeIntellijJavaLibrary(modifiableModel)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
generateForSpecificModule(false, { modifiableModel -> addIntellijJavaLibrary(modifiableModel) },
|
||||
{ modifiableModel -> removeIntellijJavaLibrary(modifiableModel) })
|
||||
}
|
||||
"intellij.rider.plugins.unity" -> {
|
||||
generateForSpecificModule(true, { modifiableModel -> addRiderPluginLibrary(modifiableModel) },
|
||||
{ modifiableModel -> removeRiderPluginLibrary(modifiableModel) })
|
||||
}
|
||||
"intellij.rider.rdclient.dotnet" -> {
|
||||
generateForSpecificModule(true, { modifiableModel -> addRiderModelLibrary(modifiableModel) },
|
||||
{ modifiableModel -> removeRiderModelLibrary(modifiableModel) })
|
||||
}
|
||||
"kotlin.base.facet" -> {
|
||||
runWriteActionAndWait {
|
||||
val modifiableModel = ModuleRootManager.getInstance(module).modifiableModel
|
||||
generateForSpecificModule(false, { modifiableModel ->
|
||||
addIntellijJavaLibrary(modifiableModel)
|
||||
addKotlinJpsCommonJar(modifiableModel)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
val projectModelUpdateResult = generationFunction(storage, moduleEntity, sourceRoot, pathToPackages, false, false, isTestModule)
|
||||
storageChanged = storageChanged || projectModelUpdateResult
|
||||
runWriteActionAndWait {
|
||||
val modifiableModel = ModuleRootManager.getInstance(module).modifiableModel
|
||||
}, { modifiableModel ->
|
||||
removeIntellijJavaLibrary(modifiableModel)
|
||||
removeKotlinJpsCommonJar(modifiableModel)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
})
|
||||
}
|
||||
in modulesWithAbstractTypes -> {
|
||||
val projectModelUpdateResult = generationFunction(storage, moduleEntity, sourceRoot, pathToPackages, true, false, isTestModule)
|
||||
|
||||
+44
-8
@@ -223,6 +223,22 @@ abstract class CodeGenerationTestBase : KotlinLightCodeInsightFixtureTestCase()
|
||||
addJarDirectoryBaseOnClass(model, "kotlinc-kotlin-jps-common", KotlinModuleKind::class.java)
|
||||
}
|
||||
|
||||
internal fun addRiderPluginLibrary(model: ModifiableRootModel) {
|
||||
addLibraryBaseOnPath(model, "rider-plugin", "intellij.rider.plugins.unity")
|
||||
}
|
||||
|
||||
internal fun removeRiderPluginLibrary(model: ModifiableRootModel) {
|
||||
removeLibraryByName(model, "rider-plugin")
|
||||
}
|
||||
|
||||
internal fun addRiderModelLibrary(model: ModifiableRootModel) {
|
||||
addLibraryBaseOnPath(model, "rider-model", "intellij.rider.model.generated")
|
||||
}
|
||||
|
||||
internal fun removeRiderModelLibrary(model: ModifiableRootModel) {
|
||||
removeLibraryByName(model, "rider-model")
|
||||
}
|
||||
|
||||
private fun removeLibraryByName(model: ModifiableRootModel, libraryName: String) {
|
||||
val moduleLibraryTable = model.moduleLibraryTable
|
||||
val modifiableModel = model.moduleLibraryTable.modifiableModel
|
||||
@@ -232,25 +248,45 @@ abstract class CodeGenerationTestBase : KotlinLightCodeInsightFixtureTestCase()
|
||||
}
|
||||
|
||||
private fun addLibraryBaseOnClass(model: ModifiableRootModel, libraryName: String, baseClass: Class<*>) {
|
||||
addDependencyBaseOnClass(model, libraryName, baseClass) {
|
||||
addDependencyFromCompilationOutput(model, libraryName, baseClass) {
|
||||
addRoot(it, OrderRootType.CLASSES)
|
||||
}
|
||||
}
|
||||
|
||||
private fun addLibraryBaseOnPath(model: ModifiableRootModel, libraryName: String, classpath: String) {
|
||||
addDependencyFromCompilationOutput(model, libraryName, classpath) {
|
||||
addRoot(it, OrderRootType.CLASSES)
|
||||
}
|
||||
}
|
||||
|
||||
private fun addJarDirectoryBaseOnClass(model: ModifiableRootModel, libraryName: String, baseClass: Class<*>) {
|
||||
addDependencyBaseOnClass(model, libraryName, baseClass) {
|
||||
addDependencyFromCompilationOutput(model, libraryName, baseClass) {
|
||||
addJarDirectory(it, true)
|
||||
}
|
||||
}
|
||||
|
||||
private fun addDependencyBaseOnClass(model: ModifiableRootModel, libraryName: String, baseClass: Class<*>, addDependency: ModifiableModel.(VirtualFile) -> Unit) {
|
||||
private fun addDependencyFromCompilationOutput(model: ModifiableRootModel, libraryName: String, baseClass: Class<*>, addDependency: ModifiableModel.(VirtualFile) -> Unit) {
|
||||
val library = model.moduleLibraryTable.modifiableModel.createLibrary(libraryName)
|
||||
val modifiableModel = library.modifiableModel
|
||||
val workspaceStorageClassesPath = VfsUtil.pathToUrl(PathUtil.getJarPathForClass(baseClass))
|
||||
val workspaceStorageClassesRoot = VirtualFileManager.getInstance().refreshAndFindFileByUrl(workspaceStorageClassesPath)
|
||||
assertNotNull("Cannot find $workspaceStorageClassesPath", workspaceStorageClassesRoot)
|
||||
VfsUtil.markDirtyAndRefresh(false, true, true, workspaceStorageClassesRoot)
|
||||
modifiableModel.addDependency(workspaceStorageClassesRoot!!)
|
||||
val classesPathUrl = VfsUtil.pathToUrl(PathUtil.getJarPathForClass(baseClass))
|
||||
val classesRootVirtualFile = VirtualFileManager.getInstance().refreshAndFindFileByUrl(classesPathUrl)
|
||||
assertNotNull("Cannot find $classesPathUrl", classesRootVirtualFile)
|
||||
VfsUtil.markDirtyAndRefresh(false, true, true, classesRootVirtualFile)
|
||||
modifiableModel.addDependency(classesRootVirtualFile!!)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
|
||||
private fun addDependencyFromCompilationOutput(model: ModifiableRootModel, libraryName: String, classpathFolder: String, addDependency: ModifiableModel.(VirtualFile) -> Unit) {
|
||||
val library = model.moduleLibraryTable.modifiableModel.createLibrary(libraryName)
|
||||
val modifiableModel = library.modifiableModel
|
||||
|
||||
val classesPathUrl = VfsUtil.pathToUrl(PathUtil.getJarPathForClass(WorkspaceEntity::class.java))
|
||||
val classesRootVirtualFile = VirtualFileManager.getInstance().refreshAndFindFileByUrl(classesPathUrl)
|
||||
|
||||
val classpathFolderVirtualFile = classesRootVirtualFile?.parent?.children?.find { it.name == classpathFolder }
|
||||
assertNotNull("Cannot find $classpathFolder in $classesRootVirtualFile. Possibly, project was partially compiled", classpathFolderVirtualFile)
|
||||
VfsUtil.markDirtyAndRefresh(false, true, true, classpathFolderVirtualFile)
|
||||
modifiableModel.addDependency(classpathFolderVirtualFile!!)
|
||||
modifiableModel.commit()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user