mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[workspace model] IDEA-262274 Get rid of creating standard VirtualFilePointer at ModuleImpl class construction
GitOrigin-RevId: a1ccdad248f9b9e1d3dbd7b47392aeda3ea36af8
This commit is contained in:
committed by
intellij-monorepo-bot
parent
65ee400c00
commit
5b976c97f5
@@ -49,7 +49,7 @@ public class ModuleImpl extends ComponentManagerImpl implements ModuleEx {
|
||||
private static final Logger LOG = Logger.getInstance(ModuleImpl.class);
|
||||
|
||||
@NotNull private final Project myProject;
|
||||
@Nullable private final VirtualFilePointer myImlFilePointer;
|
||||
@Nullable protected VirtualFilePointer myImlFilePointer;
|
||||
private volatile boolean isModuleAdded;
|
||||
|
||||
private String myName;
|
||||
@@ -57,32 +57,37 @@ public class ModuleImpl extends ComponentManagerImpl implements ModuleEx {
|
||||
private final ModuleScopeProvider myModuleScopeProvider;
|
||||
|
||||
@ApiStatus.Internal
|
||||
public ModuleImpl(@NotNull String name, @NotNull Project project, @Nullable String filePath) {
|
||||
public ModuleImpl(@NotNull String name, @NotNull Project project, @NotNull String filePath) {
|
||||
this(name, project);
|
||||
myImlFilePointer = VirtualFilePointerManager.getInstance().create(
|
||||
VfsUtilCore.pathToUrl(filePath), this,
|
||||
new VirtualFilePointerListener() {
|
||||
@Override
|
||||
public void validityChanged(@NotNull VirtualFilePointer @NotNull [] pointers) {
|
||||
if (myImlFilePointer == null) return;
|
||||
VirtualFile virtualFile = myImlFilePointer.getFile();
|
||||
if (virtualFile != null) {
|
||||
((ModuleStore)getStore()).setPath(virtualFile.toNioPath(), virtualFile, false);
|
||||
ModuleManager.getInstance(myProject).incModificationCount();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
public ModuleImpl(@NotNull String name, @NotNull Project project, @Nullable VirtualFilePointer virtualFilePointer) {
|
||||
this(name, project);
|
||||
VirtualFilePointerManager.getInstance();
|
||||
myImlFilePointer = virtualFilePointer;
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
public ModuleImpl(@NotNull String name, @NotNull Project project) {
|
||||
super((ComponentManagerImpl)project);
|
||||
|
||||
registerServiceInstance(Module.class, this, ComponentManagerImpl.getFakeCorePluginDescriptor());
|
||||
|
||||
myProject = project;
|
||||
myModuleScopeProvider = new ModuleScopeProviderImpl(this);
|
||||
|
||||
myName = name;
|
||||
if (filePath == null) {
|
||||
myImlFilePointer = null;
|
||||
}
|
||||
else {
|
||||
myImlFilePointer = VirtualFilePointerManager.getInstance().create(
|
||||
VfsUtilCore.pathToUrl(filePath), this,
|
||||
new VirtualFilePointerListener() {
|
||||
@Override
|
||||
public void validityChanged(@NotNull VirtualFilePointer @NotNull [] pointers) {
|
||||
VirtualFile virtualFile = myImlFilePointer.getFile();
|
||||
if (virtualFile != null) {
|
||||
((ModuleStore)getStore()).setPath(virtualFile.toNioPath(), virtualFile, false);
|
||||
ModuleManager.getInstance(myProject).incModificationCount();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -117,7 +117,7 @@ public class ModuleManagerComponent extends ModuleManagerImpl {
|
||||
@NotNull
|
||||
@Override
|
||||
protected ModuleEx createNonPersistentModule(@NotNull String name) {
|
||||
return new ModuleImpl(name, myProject, null);
|
||||
return new ModuleImpl(name, myProject);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+3
-6
@@ -16,10 +16,7 @@ import com.intellij.openapi.vfs.LocalFileSystem
|
||||
import com.intellij.projectModel.ProjectModelBundle
|
||||
import com.intellij.util.PathUtil
|
||||
import com.intellij.util.io.systemIndependentPath
|
||||
import com.intellij.workspaceModel.ide.NonPersistentEntitySource
|
||||
import com.intellij.workspaceModel.ide.WorkspaceModel
|
||||
import com.intellij.workspaceModel.ide.configLocation
|
||||
import com.intellij.workspaceModel.ide.getInstance
|
||||
import com.intellij.workspaceModel.ide.*
|
||||
import com.intellij.workspaceModel.ide.impl.jps.serialization.ErrorReporter
|
||||
import com.intellij.workspaceModel.ide.impl.jps.serialization.JpsProjectEntitiesLoader
|
||||
import com.intellij.workspaceModel.ide.impl.legacyBridge.LegacyBridgeModifiableBase
|
||||
@@ -176,8 +173,8 @@ internal class ModifiableModuleModelBridgeImpl(
|
||||
throw IOException("Failed to load module from $filePath")
|
||||
}
|
||||
|
||||
val moduleFilePath = ModuleManagerComponentBridge.getInstance(project).getModuleFilePath(moduleEntity)!!
|
||||
LocalFileSystem.getInstance().refreshAndFindFileByNioFile(moduleFilePath)
|
||||
val moduleFileUrl = ModuleManagerComponentBridge.getInstance(project).getModuleVirtualFileUrl(moduleEntity)!!
|
||||
LocalFileSystem.getInstance().refreshAndFindFileByNioFile(moduleFileUrl.toPath())
|
||||
return createModuleInstance(moduleEntity, false)
|
||||
}
|
||||
|
||||
|
||||
+9
-3
@@ -13,6 +13,7 @@ import com.intellij.openapi.roots.ModuleRootManager
|
||||
import com.intellij.workspaceModel.ide.WorkspaceModel
|
||||
import com.intellij.workspaceModel.ide.WorkspaceModelChangeListener
|
||||
import com.intellij.workspaceModel.ide.WorkspaceModelTopics
|
||||
import com.intellij.workspaceModel.ide.impl.VirtualFileUrlBridge
|
||||
import com.intellij.workspaceModel.ide.impl.legacyBridge.facet.FacetManagerBridge
|
||||
import com.intellij.workspaceModel.ide.impl.legacyBridge.module.ModuleManagerComponentBridge.Companion.findModuleEntity
|
||||
import com.intellij.workspaceModel.ide.impl.legacyBridge.module.roots.ModuleRootComponentBridge
|
||||
@@ -20,17 +21,17 @@ import com.intellij.workspaceModel.ide.legacyBridge.ModuleBridge
|
||||
import com.intellij.workspaceModel.storage.*
|
||||
import com.intellij.workspaceModel.storage.bridgeEntities.*
|
||||
import com.intellij.workspaceModel.storage.impl.VersionedEntityStorageOnStorage
|
||||
import com.intellij.workspaceModel.storage.url.VirtualFileUrl
|
||||
import org.picocontainer.MutablePicoContainer
|
||||
import java.nio.file.Path
|
||||
|
||||
internal class ModuleBridgeImpl(
|
||||
override var moduleEntityId: ModuleId,
|
||||
name: String,
|
||||
project: Project,
|
||||
filePath: Path?,
|
||||
virtualFileUrl: VirtualFileUrl?,
|
||||
override var entityStorage: VersionedEntityStorage,
|
||||
override var diff: WorkspaceEntityStorageDiffBuilder?
|
||||
) : ModuleImpl(name, project, filePath?.toString()), ModuleBridge {
|
||||
) : ModuleImpl(name, project, virtualFileUrl as? VirtualFileUrlBridge), ModuleBridge {
|
||||
|
||||
init {
|
||||
// default project doesn't have modules
|
||||
@@ -53,6 +54,11 @@ internal class ModuleBridgeImpl(
|
||||
}
|
||||
}
|
||||
|
||||
fun rename(newName: String, newModuleFileUrl: VirtualFileUrl?, notifyStorage: Boolean) {
|
||||
myImlFilePointer = newModuleFileUrl as VirtualFileUrlBridge
|
||||
rename(newName, notifyStorage)
|
||||
}
|
||||
|
||||
override fun rename(newName: String, notifyStorage: Boolean) {
|
||||
moduleEntityId = moduleEntityId.copy(name = newName)
|
||||
super<ModuleImpl>.rename(newName, notifyStorage)
|
||||
|
||||
+10
-8
@@ -44,6 +44,7 @@ import com.intellij.workspaceModel.ide.impl.legacyBridge.project.ProjectRootsCha
|
||||
import com.intellij.workspaceModel.ide.legacyBridge.ModuleBridge
|
||||
import com.intellij.workspaceModel.storage.*
|
||||
import com.intellij.workspaceModel.storage.bridgeEntities.*
|
||||
import com.intellij.workspaceModel.storage.url.VirtualFileUrl
|
||||
import java.nio.file.Path
|
||||
import java.util.*
|
||||
import java.util.concurrent.Callable
|
||||
@@ -257,7 +258,8 @@ class ModuleManagerComponentBridge(private val project: Project) : ModuleManager
|
||||
unloadedModules.remove(change.newEntity.name)
|
||||
val module = event.storageBefore.findModuleByEntity(change.oldEntity)
|
||||
if (module != null) {
|
||||
module.rename(newId.name, true)
|
||||
module as ModuleBridgeImpl
|
||||
module.rename(newId.name, getModuleVirtualFileUrl(change.newEntity), true)
|
||||
oldModuleNames[module] = oldId.name
|
||||
}
|
||||
}
|
||||
@@ -339,7 +341,7 @@ class ModuleManagerComponentBridge(private val project: Project) : ModuleManager
|
||||
private fun loadModules(entities: List<ModuleEntity>) {
|
||||
LOG.debug { "Loading modules for ${entities.size} entities" }
|
||||
val fileSystem = LocalFileSystem.getInstance()
|
||||
entities.forEach { module -> getModuleFilePath(module)?.let { fileSystem.refreshAndFindFileByNioFile(it) } }
|
||||
entities.forEach { module -> getModuleVirtualFileUrl(module)?.let { fileSystem.refreshAndFindFileByNioFile(it.toPath()) } }
|
||||
|
||||
val service = AppExecutorUtil.createBoundedApplicationPoolExecutor("ModuleManager Loader", JobSchedulerImpl.getCPUCoresCount())
|
||||
try {
|
||||
@@ -542,7 +544,7 @@ class ModuleManagerComponentBridge(private val project: Project) : ModuleManager
|
||||
UnloadedModulesListStorage.getInstance(project).unloadedModuleNames = this.unloadedModules.keys.toList()
|
||||
}
|
||||
|
||||
internal fun getModuleFilePath(moduleEntity: ModuleEntity): Path? {
|
||||
internal fun getModuleVirtualFileUrl(moduleEntity: ModuleEntity): VirtualFileUrl? {
|
||||
val entitySource = when (val moduleSource = moduleEntity.entitySource) {
|
||||
is JpsFileDependentEntitySource -> moduleSource.originalSource
|
||||
is CustomModuleEntitySource -> moduleSource.internalSource
|
||||
@@ -551,28 +553,28 @@ class ModuleManagerComponentBridge(private val project: Project) : ModuleManager
|
||||
if (entitySource !is JpsFileEntitySource.FileInDirectory) {
|
||||
return null
|
||||
}
|
||||
return entitySource.directory.toPath().resolve("${moduleEntity.name}.iml")
|
||||
return entitySource.directory.append("${moduleEntity.name}.iml")
|
||||
}
|
||||
|
||||
fun createModuleInstance(moduleEntity: ModuleEntity,
|
||||
versionedStorage: VersionedEntityStorage,
|
||||
diff: WorkspaceEntityStorageDiffBuilder?,
|
||||
isNew: Boolean): ModuleBridge {
|
||||
val modulePath = getModuleFilePath(moduleEntity)
|
||||
val moduleFileUrl = getModuleVirtualFileUrl(moduleEntity)
|
||||
val module = ModuleBridgeImpl(
|
||||
name = moduleEntity.name,
|
||||
project = project,
|
||||
filePath = modulePath,
|
||||
virtualFileUrl = moduleFileUrl,
|
||||
moduleEntityId = moduleEntity.persistentId(),
|
||||
entityStorage = versionedStorage,
|
||||
diff = diff
|
||||
)
|
||||
|
||||
module.init {
|
||||
if (modulePath != null) {
|
||||
if (moduleFileUrl != null) {
|
||||
try {
|
||||
val moduleStore = module.stateStore as ModuleStore
|
||||
moduleStore.setPath(modulePath, null, isNew)
|
||||
moduleStore.setPath(moduleFileUrl.toPath(), null, isNew)
|
||||
}
|
||||
catch (t: Throwable) {
|
||||
logger<ModuleManagerComponentBridge>().error(t)
|
||||
|
||||
Reference in New Issue
Block a user