Improved pull request #1145: skip/ignore disposed modules in the project view

GitOrigin-RevId: c66abadb518d28687561264d7c5607dc0e036992
This commit is contained in:
Yuriy Solodkyy
2019-07-02 06:52:16 +03:00
committed by intellij-monorepo-bot
parent 06eaddc154
commit efa76e7492
5 changed files with 15 additions and 9 deletions
@@ -27,6 +27,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class PackageViewModuleNode extends AbstractModuleNode{
@@ -38,10 +39,12 @@ public class PackageViewModuleNode extends AbstractModuleNode{
@NotNull
public Collection<AbstractTreeNode> getChildren() {
return AbstractTreeUi.calculateYieldingToWriteAction(() -> {
List<VirtualFile> roots = Arrays.asList(ModuleRootManager.getInstance(getValue()).getSourceRoots());
final Collection<AbstractTreeNode> result = PackageUtil.createPackageViewChildrenOnFiles(roots, myProject, getSettings(), getValue(), false);
Module module = getValue();
if (module == null || module.isDisposed()) return Collections.emptyList();
List<VirtualFile> roots = Arrays.asList(ModuleRootManager.getInstance(module).getSourceRoots());
final Collection<AbstractTreeNode> result = PackageUtil.createPackageViewChildrenOnFiles(roots, myProject, getSettings(), module, false);
if (getSettings().isShowLibraryContents()) {
result.add(new PackageViewLibrariesNode(getProject(), getValue(),getSettings()));
result.add(new PackageViewLibrariesNode(getProject(), module, getSettings()));
}
return result;
});
@@ -601,7 +601,7 @@ public abstract class AbstractProjectViewPane implements DataProvider, Disposabl
protected PsiDirectory[] getSelectedDirectoriesInAmbiguousCase(Object userObject) {
if (userObject instanceof AbstractModuleNode) {
final Module module = ((AbstractModuleNode)userObject).getValue();
if (module != null) {
if (module != null && !module.isDisposed()) {
final ModuleRootManager moduleRootManager = ModuleRootManager.getInstance(module);
final VirtualFile[] sourceRoots = moduleRootManager.getSourceRoots();
List<PsiDirectory> dirs = new ArrayList<>(sourceRoots.length);
@@ -66,7 +66,9 @@ public abstract class AbstractModuleNode extends ProjectViewNode<Module> impleme
@Override
public Collection<VirtualFile> getRoots() {
Module module = getValue();
return module != null ? Arrays.asList(ModuleRootManager.getInstance(module).getContentRoots()) : Collections.emptyList();
return module != null && !module.isDisposed()
? Arrays.asList(ModuleRootManager.getInstance(module).getContentRoots())
: Collections.emptyList();
}
@Override
@@ -90,7 +92,7 @@ public abstract class AbstractModuleNode extends ProjectViewNode<Module> impleme
@Override
public void navigate(final boolean requestFocus) {
Module module = getValue();
if (module != null) {
if (module != null && !module.isDisposed()) {
ProjectSettingsService.getInstance(myProject).openModuleSettings(module);
}
}
@@ -102,7 +104,8 @@ public abstract class AbstractModuleNode extends ProjectViewNode<Module> impleme
@Override
public boolean canNavigate() {
return ProjectSettingsService.getInstance(myProject).canOpenModuleSettings() && getValue() != null;
Module module = getValue();
return module != null && !module.isDisposed() && ProjectSettingsService.getInstance(myProject).canOpenModuleSettings();
}
@SuppressWarnings("deprecation")
@@ -37,7 +37,7 @@ public class StructureViewModuleNode extends AbstractModuleNode {
@NotNull
public Collection<AbstractTreeNode> getChildren() {
final Module module = getValue();
if (module == null) {
if (module == null || module.isDisposed()) {
// just deleted a module from project view
return Collections.emptyList();
}
@@ -171,7 +171,7 @@ public abstract class MvcFramework {
@Nullable
public VirtualFile findAppRoot(@Nullable Module module) {
if (module == null) return null;
if (module == null || module.isDisposed()) return null;
String appDirName = getApplicationDirectoryName();