diff --git a/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java b/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java index 81d56718f6a1..4751b1f8811a 100644 --- a/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java +++ b/platform/projectModel-impl/src/com/intellij/core/CoreProjectLoader.java @@ -18,11 +18,15 @@ package com.intellij.core; import com.intellij.mock.MockProject; import com.intellij.openapi.components.ComponentManager; import com.intellij.openapi.components.PathMacroManager; +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.impl.libraries.LibraryTableBase; +import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable; import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.util.io.fs.FileSystem; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; @@ -56,6 +60,16 @@ public class CoreProjectLoader { } final CoreModuleManager moduleManager = (CoreModuleManager)ModuleManager.getInstance(project); moduleManager.loadState(moduleManagerState); + + VirtualFile libraries = dotIdea.findChild("libraries"); + if (libraries != null) { + DirectoryStorageData data = new DirectoryStorageData(); + data.loadFrom(FileSystem.FILE_SYSTEM.createFile(libraries.getPath()), + PathMacroManager.getInstance(project).createTrackingSubstitutor()); + final Element libraryTable = data.getMergedState("libraryTable", Element.class, new ProjectLibraryTable.LibraryStateSplitter(), null); + ((LibraryTableBase) ProjectLibraryTable.getInstance(project)).loadState(libraryTable); + } + moduleManager.loadModules(); } diff --git a/platform/projectModel-impl/src/com/intellij/core/ProjectModelEnvironment.java b/platform/projectModel-impl/src/com/intellij/core/ProjectModelEnvironment.java index d2faf4b7dd9f..9295351ef723 100644 --- a/platform/projectModel-impl/src/com/intellij/core/ProjectModelEnvironment.java +++ b/platform/projectModel-impl/src/com/intellij/core/ProjectModelEnvironment.java @@ -17,6 +17,7 @@ package com.intellij.core; import com.intellij.application.options.PathMacrosImpl; import com.intellij.mock.MockProject; +import com.intellij.openapi.application.PathMacroFilter; import com.intellij.openapi.application.PathMacros; import com.intellij.openapi.components.ExtensionAreas; import com.intellij.openapi.components.PathMacroManager; @@ -42,6 +43,7 @@ public class ProjectModelEnvironment { env.registerApplicationComponent(PathMacros.class, pathMacros); CoreEnvironment.registerApplicationExtensionPoint(OrderRootType.EP_NAME, OrderRootType.class); CoreEnvironment.registerApplicationExtensionPoint(SdkFinder.EP_NAME, SdkFinder.class); + CoreEnvironment.registerApplicationExtensionPoint(PathMacroFilter.EP_NAME, PathMacroFilter.class); env.getApplication().registerService(ProjectJdkTable.class, new CoreProjectJdkTable()); env.getApplication().registerService(ApplicationLibraryTable.class, new ApplicationLibraryTable()); env.getApplication().registerService(LibraryTablesRegistrar.class, new LibraryTablesRegistrarImpl()); diff --git a/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DirectoryStorageData.java b/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DirectoryStorageData.java index 6b6e1a896731..3f3dec981d85 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DirectoryStorageData.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/components/impl/stores/DirectoryStorageData.java @@ -157,7 +157,7 @@ public class DirectoryStorageData { } @Nullable - public T getMergedState(String componentName, Class stateClass, StateSplitter splitter, T mergeInto) { + public T getMergedState(String componentName, Class stateClass, StateSplitter splitter, @Nullable T mergeInto) { final List subElements = new ArrayList(); processComponent(componentName, new PairConsumer() { public void consume(final IFile iFile, final Element element) {