read ProjectRootManager state in CoreProjectLoader

This commit is contained in:
Dmitry Jemerov
2012-06-01 12:31:49 +02:00
parent e892087bbe
commit 7f07f93ab2
3 changed files with 23 additions and 7 deletions
@@ -18,10 +18,8 @@ package com.intellij.core;
import com.intellij.openapi.application.ex.PathManagerEx;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.roots.ContentEntry;
import com.intellij.openapi.roots.LibraryOrderEntry;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.OrderEntry;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.vfs.StandardFileSystems;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.testFramework.UsefulTestCase;
@@ -33,7 +31,7 @@ import java.io.IOException;
* @author yole
*/
public class CoreModuleManagerTest extends UsefulTestCase {
public void _testLoadingModules() throws IOException, JDOMException {
public void _testLoadingModules() throws IOException, JDOMException, InvalidDataException {
CoreEnvironment env = new CoreEnvironment(getTestRootDisposable());
ProjectModelEnvironment.register(env);
final String projectPath = PathManagerEx.getTestDataPath("/core/loadingTest");
@@ -43,6 +41,9 @@ public class CoreModuleManagerTest extends UsefulTestCase {
final Module[] modules = moduleManager.getModules();
assertEquals(1, modules.length);
ProjectRootManager projectRootManager = ProjectRootManager.getInstance(env.getProject());
assertEquals("1.6", projectRootManager.getProjectSdkName());
ModuleRootManager rootManager = ModuleRootManager.getInstance(modules[0]);
final ContentEntry[] contentEntries = rootManager.getContentEntries();
assertEquals(1, contentEntries.length);
@@ -22,10 +22,13 @@ import com.intellij.openapi.components.impl.stores.DirectoryStorageData;
import com.intellij.openapi.components.impl.stores.StorageData;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.roots.impl.DirectoryIndex;
import com.intellij.openapi.roots.impl.DirectoryIndexImpl;
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.util.io.fs.FileSystem;
@@ -41,7 +44,8 @@ import java.io.IOException;
* @author yole
*/
public class CoreProjectLoader {
public static void loadProject(MockProject project, @NotNull VirtualFile virtualFile) throws IOException, JDOMException {
public static void loadProject(MockProject project, @NotNull VirtualFile virtualFile)
throws IOException, JDOMException, InvalidDataException {
if (virtualFile.isDirectory() && virtualFile.findChild(Project.DIRECTORY_STORE_FOLDER) != null) {
project.setBaseDir(virtualFile);
loadDirectoryProject(project, virtualFile);
@@ -52,7 +56,8 @@ public class CoreProjectLoader {
}
}
private static void loadDirectoryProject(Project project, VirtualFile projectDir) throws IOException, JDOMException {
private static void loadDirectoryProject(Project project, VirtualFile projectDir) throws IOException, JDOMException,
InvalidDataException {
VirtualFile dotIdea = projectDir.findChild(Project.DIRECTORY_STORE_FOLDER);
VirtualFile modulesXml = dotIdea.findChild("modules.xml");
StorageData storageData = loadStorageFile(project, modulesXml);
@@ -63,6 +68,14 @@ public class CoreProjectLoader {
final CoreModuleManager moduleManager = (CoreModuleManager)ModuleManager.getInstance(project);
moduleManager.loadState(moduleManagerState);
VirtualFile miscXml = dotIdea.findChild("misc.xml");
storageData = loadStorageFile(project, miscXml);
final Element projectRootManagerState = storageData.getState("ProjectRootManager");
if (projectRootManagerState == null) {
throw new JDOMException("cannot find ProjectRootManager state in misc.xml");
}
((ProjectRootManagerImpl) ProjectRootManager.getInstance(project)).readExternal(projectRootManagerState);
VirtualFile libraries = dotIdea.findChild("libraries");
if (libraries != null) {
DirectoryStorageData data = new DirectoryStorageData();
@@ -27,6 +27,7 @@ import com.intellij.openapi.fileTypes.FileTypeRegistry;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.projectRoots.ProjectJdkTable;
import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.ProjectExtension;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.roots.impl.*;
@@ -54,6 +55,7 @@ public class ProjectModelEnvironment {
env.registerProjectComponent(ModuleManager.class, new CoreModuleManager(project, env.getParentDisposable()));
env.registerProjectComponent(PathMacroManager.class, new ProjectPathMacroManager(pathMacros, project));
env.registerProjectExtensionPoint(DirectoryIndexExcludePolicy.EP_NAME, DirectoryIndexExcludePolicy.class);
env.registerProjectExtensionPoint(ProjectExtension.EP_NAME, ProjectExtension.class);
DirectoryIndex index = new DirectoryIndexImpl(project);
env.registerProjectComponent(DirectoryIndex.class, index);
env.registerProjectComponent(ProjectRootManager.class, new ProjectRootManagerImpl(project, index));