CoreProjectLoader — do not use Project.DIRECTORY_STORE_FOLDER

This commit is contained in:
Vladimir Krivosheev
2016-09-20 14:38:25 +02:00
parent e67053b281
commit bcdcf09248
2 changed files with 17 additions and 19 deletions
@@ -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) {
@@ -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
}