mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cleanup
This commit is contained in:
+24
-34
@@ -37,10 +37,9 @@ import com.intellij.openapi.actionSystem.DataProvider;
|
||||
import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.module.ModuleUtilCore;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.util.*;
|
||||
@@ -51,7 +50,7 @@ import com.intellij.openapi.wm.ToolWindowManager;
|
||||
import com.intellij.pom.Navigatable;
|
||||
import com.intellij.problems.WolfTheProblemSolver;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import com.intellij.psi.util.PsiUtilCore;
|
||||
import com.intellij.refactoring.move.MoveHandler;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.ReflectionCache;
|
||||
@@ -76,7 +75,6 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public abstract class AbstractProjectViewPane implements DataProvider, Disposable, BusyObject {
|
||||
public static ExtensionPointName<AbstractProjectViewPane> EP_NAME = ExtensionPointName.create("com.intellij.projectViewPane");
|
||||
|
||||
@@ -95,23 +93,6 @@ public abstract class AbstractProjectViewPane implements DataProvider, Disposabl
|
||||
private DnDSource myDragSource;
|
||||
private DnDManager myDndManager;
|
||||
|
||||
private WolfTheProblemSolver.ProblemListener myProblemListener = new WolfTheProblemSolver.ProblemListener() {
|
||||
@Override
|
||||
public void problemsAppeared(VirtualFile file) {
|
||||
queueUpdateByProblem();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void problemsChanged(VirtualFile file) {
|
||||
queueUpdateByProblem();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void problemsDisappeared(VirtualFile file) {
|
||||
queueUpdateByProblem();
|
||||
}
|
||||
};
|
||||
|
||||
private void queueUpdateByProblem() {
|
||||
if (Registry.is("projectView.showHierarchyErrors")) {
|
||||
if (myTreeBuilder != null) {
|
||||
@@ -122,14 +103,30 @@ public abstract class AbstractProjectViewPane implements DataProvider, Disposabl
|
||||
|
||||
protected AbstractProjectViewPane(Project project) {
|
||||
myProject = project;
|
||||
WolfTheProblemSolver.getInstance(project).addProblemListener(myProblemListener, this);
|
||||
WolfTheProblemSolver.ProblemListener problemListener = new WolfTheProblemSolver.ProblemListener() {
|
||||
@Override
|
||||
public void problemsAppeared(@NotNull VirtualFile file) {
|
||||
queueUpdateByProblem();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void problemsChanged(@NotNull VirtualFile file) {
|
||||
queueUpdateByProblem();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void problemsDisappeared(@NotNull VirtualFile file) {
|
||||
queueUpdateByProblem();
|
||||
}
|
||||
};
|
||||
WolfTheProblemSolver.getInstance(project).addProblemListener(problemListener, this);
|
||||
}
|
||||
|
||||
protected final void fireTreeChangeListener() {
|
||||
if (myTreeChangeListener != null) myTreeChangeListener.run();
|
||||
}
|
||||
|
||||
public final void setTreeChangeListener(Runnable listener) {
|
||||
public final void setTreeChangeListener(@NotNull Runnable listener) {
|
||||
myTreeChangeListener = listener;
|
||||
}
|
||||
|
||||
@@ -342,7 +339,7 @@ public abstract class AbstractProjectViewPane implements DataProvider, Disposabl
|
||||
psiElements.add(psiElement);
|
||||
}
|
||||
}
|
||||
return PsiUtilBase.toPsiElementArray(psiElements);
|
||||
return PsiUtilCore.toPsiElementArray(psiElements);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -360,7 +357,7 @@ public abstract class AbstractProjectViewPane implements DataProvider, Disposabl
|
||||
protected Module getNodeModule(@Nullable final Object element) {
|
||||
if (element instanceof PsiElement) {
|
||||
PsiElement psiElement = (PsiElement)element;
|
||||
return ModuleUtil.findModuleForPsiElement(psiElement);
|
||||
return ModuleUtilCore.findModuleForPsiElement(psiElement);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -538,10 +535,6 @@ public abstract class AbstractProjectViewPane implements DataProvider, Disposabl
|
||||
|
||||
// Drag'n'Drop stuff
|
||||
|
||||
private static final Logger LOG = Logger.getInstance("com.intellij.ide.projectView.ProjectViewImpl");
|
||||
|
||||
|
||||
|
||||
@Nullable
|
||||
public static PsiElement[] getTransferedPsiElements(Transferable transferable) {
|
||||
try {
|
||||
@@ -606,7 +599,7 @@ public abstract class AbstractProjectViewPane implements DataProvider, Disposabl
|
||||
final Object[] elements = getSelectedElements();
|
||||
final PsiElement[] psiElements = getSelectedPSIElements();
|
||||
DataContext dataContext = DataManager.getInstance().getDataContext(myTree);
|
||||
return (psiElements.length > 0) || canDragElements(elements, dataContext, action.getActionId());
|
||||
return psiElements.length > 0 || canDragElements(elements, dataContext, action.getActionId());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -670,10 +663,7 @@ public abstract class AbstractProjectViewPane implements DataProvider, Disposabl
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (dragAction == DnDConstants.ACTION_MOVE) {
|
||||
return MoveHandler.canMove(dataContext);
|
||||
}
|
||||
return false;
|
||||
return dragAction == DnDConstants.ACTION_MOVE && MoveHandler.canMove(dataContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.intellij.ide.bookmarks.BookmarksListener;
|
||||
import com.intellij.ide.projectView.BaseProjectTreeBuilder;
|
||||
import com.intellij.ide.projectView.ProjectViewNode;
|
||||
import com.intellij.ide.projectView.ProjectViewPsiTreeChangeListener;
|
||||
import com.intellij.ide.util.treeView.AbstractTreeStructure;
|
||||
import com.intellij.ide.util.treeView.AbstractTreeUpdater;
|
||||
import com.intellij.ide.util.treeView.NodeDescriptor;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
@@ -41,6 +42,7 @@ import com.intellij.util.SmartList;
|
||||
import com.intellij.util.messages.MessageBusConnection;
|
||||
import gnu.trove.THashSet;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
@@ -51,18 +53,15 @@ import java.util.Enumeration;
|
||||
import java.util.Set;
|
||||
|
||||
public class ProjectTreeBuilder extends BaseProjectTreeBuilder {
|
||||
private final ProjectViewPsiTreeChangeListener myPsiTreeChangeListener;
|
||||
private final MyFileStatusListener myFileStatusListener;
|
||||
|
||||
private final CopyPasteUtil.DefaultCopyPasteListener myCopyPasteListener;
|
||||
private final WolfTheProblemSolver.ProblemListener myProblemListener;
|
||||
|
||||
public ProjectTreeBuilder(final Project project, JTree tree, DefaultTreeModel treeModel, Comparator<NodeDescriptor> comparator, ProjectAbstractTreeStructureBase treeStructure) {
|
||||
public ProjectTreeBuilder(@NotNull Project project,
|
||||
@NotNull JTree tree,
|
||||
@NotNull DefaultTreeModel treeModel,
|
||||
@Nullable Comparator<NodeDescriptor> comparator,
|
||||
@NotNull ProjectAbstractTreeStructureBase treeStructure) {
|
||||
super(project, tree, treeModel, treeStructure, comparator);
|
||||
|
||||
final MessageBusConnection connection = project.getMessageBus().connect(this);
|
||||
|
||||
myPsiTreeChangeListener = createPsiTreeChangeListener(myProject);
|
||||
connection.subscribe(ProjectTopics.PROJECT_ROOTS, new ModuleRootAdapter() {
|
||||
@Override
|
||||
public void rootsChanged(ModuleRootEvent event) {
|
||||
@@ -72,29 +71,17 @@ public class ProjectTreeBuilder extends BaseProjectTreeBuilder {
|
||||
|
||||
connection.subscribe(BookmarksListener.TOPIC, new MyBookmarksListener());
|
||||
|
||||
PsiManager.getInstance(myProject).addPsiTreeChangeListener(myPsiTreeChangeListener);
|
||||
myFileStatusListener = new MyFileStatusListener();
|
||||
FileStatusManager.getInstance(myProject).addFileStatusListener(myFileStatusListener);
|
||||
myCopyPasteListener = new CopyPasteUtil.DefaultCopyPasteListener(getUpdater());
|
||||
CopyPasteManager.getInstance().addContentChangedListener(myCopyPasteListener);
|
||||
PsiManager.getInstance(project).addPsiTreeChangeListener(createPsiTreeChangeListener(project), this);
|
||||
FileStatusManager.getInstance(project).addFileStatusListener(new MyFileStatusListener(), this);
|
||||
CopyPasteManager.getInstance().addContentChangedListener(new CopyPasteUtil.DefaultCopyPasteListener(getUpdater()), this);
|
||||
|
||||
myProblemListener = new MyProblemListener();
|
||||
WolfTheProblemSolver.getInstance(project).addProblemListener(myProblemListener);
|
||||
WolfTheProblemSolver.getInstance(project).addProblemListener(new MyProblemListener(), this);
|
||||
|
||||
setCanYieldUpdate(true);
|
||||
|
||||
initRootNode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void dispose() {
|
||||
super.dispose();
|
||||
PsiManager.getInstance(myProject).removePsiTreeChangeListener(myPsiTreeChangeListener);
|
||||
FileStatusManager.getInstance(myProject).removeFileStatusListener(myFileStatusListener);
|
||||
CopyPasteManager.getInstance().removeContentChangedListener(myCopyPasteListener);
|
||||
WolfTheProblemSolver.getInstance(myProject).removeProblemListener(myProblemListener);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates psi tree changes listener. This method will be invoked in constructor of ProjectTreeBuilder
|
||||
* thus builder object will be not completely initialized
|
||||
@@ -122,7 +109,8 @@ public class ProjectTreeBuilder extends BaseProjectTreeBuilder {
|
||||
|
||||
@Override
|
||||
protected boolean isFlattenPackages(){
|
||||
return ((AbstractProjectTreeStructure)getTreeStructure()).isFlattenPackages();
|
||||
AbstractTreeStructure structure = getTreeStructure();
|
||||
return structure instanceof AbstractProjectTreeStructure && ((AbstractProjectTreeStructure)structure).isFlattenPackages();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -142,7 +130,7 @@ public class ProjectTreeBuilder extends BaseProjectTreeBuilder {
|
||||
updateForFile(b.getFile());
|
||||
}
|
||||
|
||||
private void updateForFile(VirtualFile file) {
|
||||
private void updateForFile(@NotNull VirtualFile file) {
|
||||
PsiElement element = findPsi(file);
|
||||
if (element != null) {
|
||||
queueUpdateFrom(element, false);
|
||||
@@ -164,15 +152,8 @@ public class ProjectTreeBuilder extends BaseProjectTreeBuilder {
|
||||
|
||||
private PsiElement findPsi(@NotNull VirtualFile vFile) {
|
||||
if (!vFile.isValid()) return null;
|
||||
PsiElement element;
|
||||
PsiManager psiManager = PsiManager.getInstance(myProject);
|
||||
if (vFile.isDirectory()) {
|
||||
element = psiManager.findDirectory(vFile);
|
||||
}
|
||||
else {
|
||||
element = psiManager.findFile(vFile);
|
||||
}
|
||||
return element;
|
||||
return vFile.isDirectory() ? psiManager.findDirectory(vFile) : psiManager.findFile(vFile);
|
||||
}
|
||||
|
||||
private class MyProblemListener extends WolfTheProblemSolver.ProblemListener {
|
||||
@@ -180,16 +161,16 @@ public class ProjectTreeBuilder extends BaseProjectTreeBuilder {
|
||||
private final Collection<VirtualFile> myFilesToRefresh = new THashSet<VirtualFile>();
|
||||
|
||||
@Override
|
||||
public void problemsAppeared(VirtualFile file) {
|
||||
public void problemsAppeared(@NotNull VirtualFile file) {
|
||||
queueUpdate(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void problemsDisappeared(VirtualFile file) {
|
||||
public void problemsDisappeared(@NotNull VirtualFile file) {
|
||||
queueUpdate(file);
|
||||
}
|
||||
|
||||
private void queueUpdate(final VirtualFile fileToRefresh) {
|
||||
private void queueUpdate(@NotNull VirtualFile fileToRefresh) {
|
||||
synchronized (myFilesToRefresh) {
|
||||
if (myFilesToRefresh.add(fileToRefresh)) {
|
||||
myUpdateProblemAlarm.cancelAllRequests();
|
||||
@@ -215,7 +196,7 @@ public class ProjectTreeBuilder extends BaseProjectTreeBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
private void updateNodesContaining(final Collection<VirtualFile> filesToRefresh, final DefaultMutableTreeNode rootNode) {
|
||||
private void updateNodesContaining(@NotNull Collection<VirtualFile> filesToRefresh, @NotNull DefaultMutableTreeNode rootNode) {
|
||||
if (!(rootNode.getUserObject() instanceof ProjectViewNode)) return;
|
||||
ProjectViewNode node = (ProjectViewNode)rootNode.getUserObject();
|
||||
Collection<VirtualFile> containingFiles = null;
|
||||
|
||||
+7
-8
@@ -27,15 +27,13 @@ import com.intellij.util.ArrayUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class AbstractTreeStructureBase extends AbstractTreeStructure {
|
||||
protected final Project myProject;
|
||||
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.ide.util.treeView.AbstractTreeStructureBase");
|
||||
|
||||
protected final Project myProject;
|
||||
|
||||
protected AbstractTreeStructureBase(Project project) {
|
||||
myProject = project;
|
||||
@@ -47,7 +45,7 @@ public abstract class AbstractTreeStructureBase extends AbstractTreeStructure {
|
||||
AbstractTreeNode<?> treeNode = (AbstractTreeNode)element;
|
||||
Collection<? extends AbstractTreeNode> elements = treeNode.getChildren();
|
||||
List<TreeStructureProvider> providers = getProvidersDumbAware();
|
||||
if (providers != null && !providers.isEmpty()) {
|
||||
if (!providers.isEmpty()) {
|
||||
ViewSettings settings = treeNode instanceof ProjectViewNode ? ((ProjectViewNode) treeNode).getSettings() : ViewSettings.DEFAULT;
|
||||
for (TreeStructureProvider provider : providers) {
|
||||
try {
|
||||
@@ -95,7 +93,7 @@ public abstract class AbstractTreeStructureBase extends AbstractTreeStructure {
|
||||
@Nullable
|
||||
public Object getDataFromProviders(@NotNull List<AbstractTreeNode> selectedNodes, final String dataId) {
|
||||
final List<TreeStructureProvider> providers = getProvidersDumbAware();
|
||||
if (providers != null) {
|
||||
if (!providers.isEmpty()) {
|
||||
for (TreeStructureProvider treeStructureProvider : providers) {
|
||||
final Object fromProvider = treeStructureProvider.getData(selectedNodes, dataId);
|
||||
if (fromProvider != null) {
|
||||
@@ -106,14 +104,15 @@ public abstract class AbstractTreeStructureBase extends AbstractTreeStructure {
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private List<TreeStructureProvider> getProvidersDumbAware() {
|
||||
if (myProject == null) {
|
||||
return new ArrayList<TreeStructureProvider>();
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
final List<TreeStructureProvider> providers = getProviders();
|
||||
if (providers == null) {
|
||||
return null;
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return DumbService.getInstance(myProject).filterByDumbAwareness(providers);
|
||||
|
||||
Reference in New Issue
Block a user