[workspace model] IDEA-262274 Get rid of creating standard VirtualFilePointer at ModuleImpl class construction

GitOrigin-RevId: a1ccdad248f9b9e1d3dbd7b47392aeda3ea36af8
This commit is contained in:
Mikhail Mazurkevich
2021-02-17 16:00:02 +00:00
committed by intellij-monorepo-bot
parent 65ee400c00
commit 5b976c97f5
5 changed files with 50 additions and 40 deletions
@@ -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
@@ -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)
}
@@ -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)
@@ -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)