mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
+47
-37
@@ -31,12 +31,20 @@ import com.intellij.openapi.module.impl.ModuleEx;
|
||||
import com.intellij.openapi.project.DumbModeTask;
|
||||
import com.intellij.openapi.project.DumbServiceImpl;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.*;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.roots.OrderEnumerator;
|
||||
import com.intellij.openapi.roots.OrderRootType;
|
||||
import com.intellij.openapi.roots.WatchedRootsProvider;
|
||||
import com.intellij.openapi.startup.StartupManager;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.*;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.openapi.vfs.VirtualFileSystem;
|
||||
import com.intellij.openapi.vfs.ex.VirtualFileManagerAdapter;
|
||||
import com.intellij.openapi.vfs.newvfs.ArchiveFileSystem;
|
||||
import com.intellij.openapi.vfs.newvfs.NewVirtualFile;
|
||||
import com.intellij.openapi.vfs.pointers.VirtualFilePointer;
|
||||
import com.intellij.openapi.vfs.pointers.VirtualFilePointerListener;
|
||||
import com.intellij.project.ProjectKt;
|
||||
@@ -51,7 +59,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
@@ -231,47 +238,41 @@ public class ProjectRootManagerComponent extends ProjectRootManagerImpl implemen
|
||||
recursive.addAll(extension.getRootsToWatch());
|
||||
}
|
||||
|
||||
final Module[] modules = ModuleManager.getInstance(myProject).getModules();
|
||||
for (Module module : modules) {
|
||||
flat.add(module.getModuleFilePath());
|
||||
|
||||
final ModuleRootManager moduleRootManager = ModuleRootManager.getInstance(module);
|
||||
|
||||
addRootsToTrack(moduleRootManager.getContentRootUrls(), recursive, flat);
|
||||
|
||||
if (includeSourceRoots) {
|
||||
addRootsToTrack(moduleRootManager.getSourceRootUrls(), recursive, flat);
|
||||
}
|
||||
|
||||
final OrderEntry[] orderEntries = moduleRootManager.getOrderEntries();
|
||||
for (OrderEntry entry : orderEntries) {
|
||||
if (entry instanceof LibraryOrSdkOrderEntry) {
|
||||
final LibraryOrSdkOrderEntry libSdkEntry = (LibraryOrSdkOrderEntry)entry;
|
||||
for (OrderRootType orderRootType : OrderRootType.getAllTypes()) {
|
||||
addRootsToTrack(libSdkEntry.getRootUrls(orderRootType), recursive, flat);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (VirtualFile root : getRootsFromModules(includeSourceRoots)) {
|
||||
(root.isDirectory() ? recursive : flat).add(root.getPath());
|
||||
}
|
||||
|
||||
return Pair.create(recursive, flat);
|
||||
}
|
||||
|
||||
private static void addRootsToTrack(final String[] urls, final Collection<String> recursive, final Collection<String> flat) {
|
||||
for (String url : urls) {
|
||||
if (url != null) {
|
||||
final String protocol = VirtualFileManager.extractProtocol(url);
|
||||
if (protocol == null || LocalFileSystem.PROTOCOL.equals(protocol)) {
|
||||
recursive.add(extractLocalPath(url));
|
||||
}
|
||||
else if (JarFileSystem.PROTOCOL.equals(protocol)) {
|
||||
flat.add(extractLocalPath(url));
|
||||
}
|
||||
else if (StandardFileSystems.JRT_PROTOCOL.equals(protocol)) {
|
||||
recursive.add(extractLocalPath(url));
|
||||
}
|
||||
private Set<VirtualFile> getRootsFromModules(boolean includeSourceRoots) {
|
||||
Set<VirtualFile> roots = ContainerUtil.newHashSet();
|
||||
|
||||
for (Module module : ModuleManager.getInstance(myProject).getModules()) {
|
||||
OrderEnumerator enumerator = ModuleRootManager.getInstance(module).orderEntries().withoutDepModules();
|
||||
if (!includeSourceRoots) {
|
||||
enumerator = enumerator.withoutModuleSourceEntries();
|
||||
}
|
||||
enumerator.forEach(entry -> {
|
||||
for (OrderRootType type : OrderRootType.getAllTypes()) {
|
||||
for (VirtualFile root : entry.getFiles(type)) {
|
||||
VirtualFileSystem fs = root.getFileSystem();
|
||||
if (fs instanceof LocalFileSystem) {
|
||||
roots.add(root);
|
||||
}
|
||||
else if (fs instanceof ArchiveFileSystem) {
|
||||
VirtualFile local = ((ArchiveFileSystem)fs).getLocalByEntry(root);
|
||||
if (local != null) {
|
||||
roots.add(local);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
});
|
||||
}
|
||||
|
||||
return roots;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -302,6 +303,15 @@ public class ProjectRootManagerComponent extends ProjectRootManagerImpl implemen
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void markRootsForRefresh() {
|
||||
for (VirtualFile root : getRootsFromModules(false)) {
|
||||
if (root instanceof NewVirtualFile) {
|
||||
((NewVirtualFile)root).markDirtyRecursively();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class AppListener extends ApplicationAdapter {
|
||||
@Override
|
||||
public void beforeWriteActionStart(@NotNull Object action) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
* Copyright 2000-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -23,15 +23,13 @@ import com.intellij.notification.Notifications;
|
||||
import com.intellij.openapi.application.*;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.progress.ProcessCanceledException;
|
||||
import com.intellij.openapi.progress.ProgressIndicator;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.*;
|
||||
import com.intellij.openapi.project.impl.ProjectLifecycleListener;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.roots.impl.ProjectRootManagerImpl;
|
||||
import com.intellij.openapi.startup.StartupActivity;
|
||||
import com.intellij.openapi.util.SystemInfo;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
@@ -40,7 +38,6 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.openapi.vfs.impl.local.FileWatcher;
|
||||
import com.intellij.openapi.vfs.impl.local.LocalFileSystemImpl;
|
||||
import com.intellij.openapi.vfs.newvfs.NewVirtualFile;
|
||||
import com.intellij.openapi.vfs.newvfs.RefreshQueue;
|
||||
import com.intellij.project.ProjectKt;
|
||||
import com.intellij.ui.GuiUtils;
|
||||
@@ -223,7 +220,7 @@ public class StartupManagerImpl extends StartupManagerEx {
|
||||
if (myProject.isDisposed() || myInitialRefreshScheduled) return;
|
||||
|
||||
myInitialRefreshScheduled = true;
|
||||
markContentRootsForRefresh();
|
||||
((ProjectRootManagerImpl)ProjectRootManager.getInstance(myProject)).markRootsForRefresh();
|
||||
|
||||
Application app = ApplicationManager.getApplication();
|
||||
if (!app.isCommandLine()) {
|
||||
@@ -245,16 +242,6 @@ public class StartupManagerImpl extends StartupManagerEx {
|
||||
}, ModalityState.defaultModalityState());
|
||||
}
|
||||
|
||||
private void markContentRootsForRefresh() {
|
||||
for (Module module : ModuleManager.getInstance(myProject).getModules()) {
|
||||
for (VirtualFile contentRoot : ModuleRootManager.getInstance(module).getContentRoots()) {
|
||||
if (contentRoot instanceof NewVirtualFile) {
|
||||
((NewVirtualFile)contentRoot).markDirtyRecursively();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void checkFsSanity() {
|
||||
try {
|
||||
String path = myProject.getProjectFilePath();
|
||||
|
||||
+4
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
* Copyright 2000-2017 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -644,4 +644,6 @@ public class ProjectRootManagerImpl extends ProjectRootManagerEx implements Pers
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void markRootsForRefresh() { }
|
||||
}
|
||||
Reference in New Issue
Block a user