From bcdcf092486432e6c3c66797b1944920b0bd4797 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Tue, 20 Sep 2016 14:29:56 +0200 Subject: [PATCH] =?UTF-8?q?CoreProjectLoader=20=E2=80=94=20do=20not=20use?= =?UTF-8?q?=20Project.DIRECTORY=5FSTORE=5FFOLDER?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/intellij/core/CoreProjectLoader.java | 32 ++++++++----------- .../src/com/intellij/project/project.kt | 4 +++ 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java b/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java index 9e5bd02c9ba2..f81d2a97afae 100644 --- a/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java +++ b/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java @@ -22,14 +22,13 @@ import com.intellij.openapi.components.impl.stores.DefaultStateSerializer; import com.intellij.openapi.components.impl.stores.DirectoryStorageUtil; import com.intellij.openapi.components.impl.stores.FileStorageCoreUtil; import com.intellij.openapi.module.ModuleManager; -import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.roots.impl.ProjectRootManagerImpl; import com.intellij.openapi.roots.impl.libraries.LibraryTableBase; import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable; -import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.project.ProjectKt; import org.jdom.Element; import org.jdom.JDOMException; import org.jetbrains.annotations.NotNull; @@ -43,11 +42,11 @@ import java.util.TreeMap; * @author yole */ public class CoreProjectLoader { - public static boolean loadProject(MockProject project, @NotNull VirtualFile virtualFile) - throws IOException, JDOMException, InvalidDataException { - if (virtualFile.isDirectory() && virtualFile.findChild(Project.DIRECTORY_STORE_FOLDER) != null) { + public static boolean loadProject(MockProject project, @NotNull VirtualFile virtualFile) throws IOException, JDOMException { + VirtualFile ideaDir = ProjectKt.getProjectStoreDirectory(virtualFile); + if (ideaDir != null) { project.setBaseDir(virtualFile); - loadDirectoryProject(project, virtualFile); + loadDirectoryProject(project, ideaDir); return true; } @@ -55,12 +54,7 @@ public class CoreProjectLoader { return false; } - private static void loadDirectoryProject(MockProject project, VirtualFile projectDir) throws IOException, JDOMException, - InvalidDataException { - VirtualFile dotIdea = projectDir.findChild(Project.DIRECTORY_STORE_FOLDER); - if (dotIdea == null) - throw new FileNotFoundException("Missing '" + Project.DIRECTORY_STORE_FOLDER + "' in " + projectDir.getPath()); - + private static void loadDirectoryProject(MockProject project, @NotNull VirtualFile dotIdea) throws IOException, JDOMException { VirtualFile modulesXml = dotIdea.findChild("modules.xml"); if (modulesXml == null) throw new FileNotFoundException("Missing 'modules.xml' in " + dotIdea.getPath()); @@ -74,14 +68,14 @@ public class CoreProjectLoader { moduleManager.loadState(moduleManagerState); VirtualFile miscXml = dotIdea.findChild("misc.xml"); - if (miscXml == null) - throw new FileNotFoundException("Missing 'misc.xml' in " + dotIdea.getPath()); - storageData = loadStorageFile(project, miscXml); - final Element projectRootManagerState = storageData.get("ProjectRootManager"); - if (projectRootManagerState == null) { - throw new JDOMException("cannot find ProjectRootManager state in misc.xml"); + if (miscXml != null) { + storageData = loadStorageFile(project, miscXml); + final Element projectRootManagerState = storageData.get("ProjectRootManager"); + if (projectRootManagerState == null) { + throw new JDOMException("cannot find ProjectRootManager state in misc.xml"); + } + ((ProjectRootManagerImpl)ProjectRootManager.getInstance(project)).loadState(projectRootManagerState); } - ((ProjectRootManagerImpl) ProjectRootManager.getInstance(project)).loadState(projectRootManagerState); VirtualFile libraries = dotIdea.findChild("libraries"); if (libraries != null) { diff --git a/platform/projectModel-impl/src/com/intellij/project/project.kt b/platform/projectModel-impl/src/com/intellij/project/project.kt index d2671d5f4d73..7752b5403b99 100644 --- a/platform/projectModel-impl/src/com/intellij/project/project.kt +++ b/platform/projectModel-impl/src/com/intellij/project/project.kt @@ -20,6 +20,7 @@ import com.intellij.openapi.components.impl.stores.IComponentStore import com.intellij.openapi.components.impl.stores.IProjectStore import com.intellij.openapi.components.stateStore import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile val Project.isDirectoryBased: Boolean get() { @@ -32,3 +33,6 @@ val Project.stateStore: IProjectStore return picoContainer.getComponentInstance(IComponentStore::class.java) as IProjectStore } +fun getProjectStoreDirectory(file: VirtualFile): VirtualFile? { + return if (file.isDirectory) file.findChild(Project.DIRECTORY_STORE_FOLDER) else null +} \ No newline at end of file