From 7f07f93ab28f0afa5ffc49de9e6ab95b4a76c0e7 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 1 Jun 2012 12:31:49 +0200 Subject: [PATCH] read ProjectRootManager state in CoreProjectLoader --- .../intellij/core/CoreModuleManagerTest.java | 11 ++++++----- .../com/intellij/core/CoreProjectLoader.java | 17 +++++++++++++++-- .../intellij/core/ProjectModelEnvironment.java | 2 ++ 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/platform/platform-tests/testSrc/com/intellij/core/CoreModuleManagerTest.java b/platform/platform-tests/testSrc/com/intellij/core/CoreModuleManagerTest.java index 07b3e10b0f49..69950d9b08e4 100644 --- a/platform/platform-tests/testSrc/com/intellij/core/CoreModuleManagerTest.java +++ b/platform/platform-tests/testSrc/com/intellij/core/CoreModuleManagerTest.java @@ -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); diff --git a/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java b/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java index 0ca408a943a3..635f9fa27352 100644 --- a/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java +++ b/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java @@ -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(); diff --git a/platform/projectModel-impl/src/com/intellij/core/ProjectModelEnvironment.java b/platform/projectModel-impl/src/com/intellij/core/ProjectModelEnvironment.java index 5fd165a41f17..ea05242bea81 100644 --- a/platform/projectModel-impl/src/com/intellij/core/ProjectModelEnvironment.java +++ b/platform/projectModel-impl/src/com/intellij/core/ProjectModelEnvironment.java @@ -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));