Add JS lib as module lib. It gives ability to navigate into it.

This commit is contained in:
Nikolay Krasko
2012-06-09 18:35:55 +04:00
parent e7d625e37c
commit e5f06a87d1
@@ -20,8 +20,16 @@ import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.notification.Notification;
import com.intellij.notification.NotificationType;
import com.intellij.notification.Notifications;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.roots.libraries.LibraryTable;
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer;
import com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainerFactory;
import com.intellij.openapi.vfs.JarFileSystem;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.PsiModificationTrackerImpl;
@@ -60,12 +68,35 @@ public final class JsModuleSetUp {
if (!copyJsLibFiles(rootDir)) return;
setUpK2JSModuleComponent(module);
setUpLibraryAsSourceLibrary(module, rootDir);
restartHighlightingInTheWholeProject(module);
refreshRootDir(module, continuation);
}
private static void setUpLibraryAsSourceLibrary(final Module module, final @NotNull File rootDir) {
final File libJarFile = new File(rootDir, "lib/" + PathUtil.JS_LIB_JAR_NAME);
final VirtualFile libFile = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(libJarFile);
if (libFile != null) {
ApplicationManager.getApplication().runWriteAction(new Runnable() {
@Override
public void run() {
ModifiableRootModel model = ModuleRootManager.getInstance(module).getModifiableModel();
LibraryTable table = model.getModuleLibraryTable();
Library jsLib = table.getLibraryByName(PathUtil.JS_LIB_JAR_NAME);
if (jsLib == null) {
VirtualFile libRoot = JarFileSystem.getInstance().getJarRootForLocalFile(libFile);
LibrariesContainerFactory.createContainer(model).createLibrary(PathUtil.JS_LIB_JAR_NAME,
LibrariesContainer.LibraryLevel.MODULE, new VirtualFile[0], new VirtualFile[] { libRoot });
model.commit();
}
}
});
}
}
private static void setUpK2JSModuleComponent(@NotNull Module module) {
K2JSModuleComponent jsModuleComponent = K2JSModuleComponent.getInstance(module);
jsModuleComponent.setJavaScriptModule(true);