diff --git a/source/com/intellij/ide/projectView/impl/nodes/BasePsiNode.java b/source/com/intellij/ide/projectView/impl/nodes/BasePsiNode.java index 683565743c07..3b87017b412c 100644 --- a/source/com/intellij/ide/projectView/impl/nodes/BasePsiNode.java +++ b/source/com/intellij/ide/projectView/impl/nodes/BasePsiNode.java @@ -11,7 +11,9 @@ import com.intellij.openapi.util.Iconable; import com.intellij.openapi.vcs.FileStatus; import com.intellij.openapi.vcs.FileStatusManager; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.*; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; import javax.swing.*; import java.util.ArrayList; @@ -20,11 +22,8 @@ import java.util.Collection; public abstract class BasePsiNode extends ProjectViewNode { private static final Logger LOG = Logger.getInstance("#com.intellij.ide.projectView.impl.nodes.BasePsiNode"); - private SmartPsiElementPointer mySmartPointer; - protected BasePsiNode(Project project, Type value, ViewSettings viewSettings) { super(project, value, viewSettings); - mySmartPointer = SmartPointerManager.getInstance(getProject()).createSmartPsiElementPointer(getValue()); } public final Collection getChildren() { @@ -74,7 +73,9 @@ public abstract class BasePsiNode extends ProjectViewN public void update(PresentationData data) { - setValue((Type)mySmartPointer.getElement()); + if (getValue() == null || !getValue().isValid()) { + setValue(null); + } if (getValue() == null) return; int flags = Iconable.ICON_FLAG_VISIBILITY; diff --git a/source/com/intellij/ide/todo/TodoPanel.java b/source/com/intellij/ide/todo/TodoPanel.java index 99cd81292c43..790fb9a80a12 100644 --- a/source/com/intellij/ide/todo/TodoPanel.java +++ b/source/com/intellij/ide/todo/TodoPanel.java @@ -274,13 +274,13 @@ abstract class TodoPanel extends JPanel implements OccurenceNavigator, DataProvi return null; } Object element = userObject.getElement(); - if (!((element instanceof SmartTodoItemPointer) || (element instanceof PsiFile))) { // allow user to use F4 only on files an TODOs + if (!((element instanceof TodoFileNode) || (element instanceof TodoItemNode))) { // allow user to use F4 only on files an TODOs return null; } - SmartTodoItemPointer pointer = myTodoTreeBuilder.getFirstPointerForElement(element); + TodoItemNode pointer = myTodoTreeBuilder.getFirstPointerForElement(element); if (pointer != null) { - return new OpenFileDescriptor(myProject, pointer.getTodoItem().getFile().getVirtualFile(), - pointer.getRangeMarker().getStartOffset() + return new OpenFileDescriptor(myProject, pointer.getValue().getTodoItem().getFile().getVirtualFile(), + pointer.getValue().getRangeMarker().getStartOffset() ); } else { @@ -397,7 +397,7 @@ abstract class TodoPanel extends JPanel implements OccurenceNavigator, DataProvi return "Previous TODO"; } - private OccurenceNavigator.OccurenceInfo goToPointer(SmartTodoItemPointer pointer) { + private OccurenceNavigator.OccurenceInfo goToPointer(TodoItemNode pointer) { LOG.assertTrue(pointer != null); DefaultMutableTreeNode node = myTodoTreeBuilder.getNodeForElement(pointer); if (node == null) { @@ -411,14 +411,14 @@ abstract class TodoPanel extends JPanel implements OccurenceNavigator, DataProvi } TreeUtil.selectPath(myTree, new TreePath(node.getPath())); return new OccurenceInfo( - new OpenFileDescriptor(myProject, pointer.getTodoItem().getFile().getVirtualFile(), - pointer.getRangeMarker().getStartOffset()), + new OpenFileDescriptor(myProject, pointer.getValue().getTodoItem().getFile().getVirtualFile(), + pointer.getValue().getRangeMarker().getStartOffset()), -1, -1 ); } - private SmartTodoItemPointer getNextPointer() { + private TodoItemNode getNextPointer() { TreePath path = myTree.getSelectionPath(); if (path == null) { return null; @@ -429,9 +429,9 @@ abstract class TodoPanel extends JPanel implements OccurenceNavigator, DataProvi return null; } Object element = userObject.getElement(); - SmartTodoItemPointer pointer; - if (element instanceof SmartTodoItemPointer) { - pointer = myTodoTreeBuilder.getNextPointer((SmartTodoItemPointer)element); + TodoItemNode pointer; + if (element instanceof TodoItemNode) { + pointer = myTodoTreeBuilder.getNextPointer(((TodoItemNode)element)); } else { pointer = myTodoTreeBuilder.getFirstPointerForElement(element); @@ -439,7 +439,7 @@ abstract class TodoPanel extends JPanel implements OccurenceNavigator, DataProvi return pointer; } - private SmartTodoItemPointer getPreviousPointer() { + private TodoItemNode getPreviousPointer() { TreePath path = myTree.getSelectionPath(); if (path == null) { return null; @@ -450,9 +450,9 @@ abstract class TodoPanel extends JPanel implements OccurenceNavigator, DataProvi return null; } Object element = userObject.getElement(); - SmartTodoItemPointer pointer; - if (element instanceof SmartTodoItemPointer) { - pointer = myTodoTreeBuilder.getPreviousPointer((SmartTodoItemPointer)element); + TodoItemNode pointer; + if (element instanceof TodoItemNode) { + pointer = myTodoTreeBuilder.getPreviousPointer((TodoItemNode)element); } else { Object sibling = myTodoTreeBuilder.getPreviousSibling(element); diff --git a/source/com/intellij/ide/todo/TodoTreeBuilder.java b/source/com/intellij/ide/todo/TodoTreeBuilder.java index 28cd698cac61..550e8d44d3e3 100644 --- a/source/com/intellij/ide/todo/TodoTreeBuilder.java +++ b/source/com/intellij/ide/todo/TodoTreeBuilder.java @@ -269,9 +269,9 @@ public abstract class TodoTreeBuilder extends AbstractTreeBuilder { * @return first SmartTodoItemPointer that is the children (in depth) of the specified element. * If element itself is a TodoItem then the method returns the element. */ - SmartTodoItemPointer getFirstPointerForElement(Object element) { - if (element instanceof SmartTodoItemPointer) { - return (SmartTodoItemPointer)element; + public TodoItemNode getFirstPointerForElement(Object element) { + if (element instanceof TodoItemNode) { + return ((TodoItemNode)element); } else { Object[] children = myTreeStructure.getChildElements(element); @@ -279,22 +279,22 @@ public abstract class TodoTreeBuilder extends AbstractTreeBuilder { return null; } Object firstChild = children[0]; - if (firstChild instanceof SmartTodoItemPointer) { - return (SmartTodoItemPointer)firstChild; + if (firstChild instanceof TodoItemNode) { + return ((TodoItemNode)firstChild); } else { return getFirstPointerForElement(firstChild); } - } + } } /** * @return last SmartTodoItemPointer that is the children (in depth) of the specified element. * If element itself is a TodoItem then the method returns the element. */ - SmartTodoItemPointer getLastPointerForElement(Object element) { - if (element instanceof SmartTodoItemPointer) { - return (SmartTodoItemPointer)element; + public TodoItemNode getLastPointerForElement(Object element) { + if (element instanceof TodoItemNode) { + return (TodoItemNode)element; } else { Object[] children = myTreeStructure.getChildElements(element); @@ -302,8 +302,8 @@ public abstract class TodoTreeBuilder extends AbstractTreeBuilder { return null; } Object firstChild = children[children.length - 1]; - if (firstChild instanceof SmartTodoItemPointer) { - return (SmartTodoItemPointer)firstChild; + if (firstChild instanceof TodoItemNode) { + return (TodoItemNode)firstChild; } else { return getLastPointerForElement(firstChild); @@ -419,13 +419,13 @@ public abstract class TodoTreeBuilder extends AbstractTreeBuilder { * @return next TodoItem for the passed pointer. Returns null * if the pointer is the last todo item in the tree. */ - SmartTodoItemPointer getNextPointer(SmartTodoItemPointer pointer) { + public TodoItemNode getNextPointer(TodoItemNode pointer) { Object sibling = getNextSibling(pointer); if (sibling == null) { return null; } - if (sibling instanceof SmartTodoItemPointer) { - return (SmartTodoItemPointer)sibling; + if (sibling instanceof TodoItemNode) { + return (TodoItemNode)sibling; } else { return getFirstPointerForElement(sibling); @@ -464,13 +464,13 @@ public abstract class TodoTreeBuilder extends AbstractTreeBuilder { * @return next SmartTodoItemPointer for the passed pointer. Returns null * if the pointer is the last todo item in the tree. */ - SmartTodoItemPointer getPreviousPointer(SmartTodoItemPointer pointer) { + public TodoItemNode getPreviousPointer(TodoItemNode pointer) { Object sibling = getPreviousSibling(pointer); if (sibling == null) { return null; } - if (sibling instanceof SmartTodoItemPointer) { - return (SmartTodoItemPointer)sibling; + if (sibling instanceof TodoItemNode) { + return (TodoItemNode)sibling; } else { return getLastPointerForElement(sibling); diff --git a/source/com/intellij/ide/todo/nodes/SingleFileToDoNode.java b/source/com/intellij/ide/todo/nodes/SingleFileToDoNode.java index 5d8cc30aed65..e4857ef0b3ea 100644 --- a/source/com/intellij/ide/todo/nodes/SingleFileToDoNode.java +++ b/source/com/intellij/ide/todo/nodes/SingleFileToDoNode.java @@ -9,17 +9,16 @@ import com.intellij.psi.PsiFile; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Set; public class SingleFileToDoNode extends BaseToDoNode{ - private final Set myFileNode = Collections.singleton(new TodoFileNode(getProject(), getValue(), myBuilder, true)); + private final TodoFileNode myFileNode = new TodoFileNode(getProject(), getValue(), myBuilder, true); public SingleFileToDoNode(Project project, PsiFile value, TodoTreeBuilder builder) { super(project, value, builder); } public Collection getChildren() { - return new ArrayList(myFileNode); + return new ArrayList(Collections.singleton(myFileNode)); } public void update(PresentationData presentation) { diff --git a/source/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java b/source/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java index 1141696c75c2..f96e3e8b70cb 100644 --- a/source/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java +++ b/source/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java @@ -70,8 +70,7 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements Runnable handleAction = new Runnable() { public void run() { if (SHOW_DIALOG) { - HandleReadOnlyStatusDialog dialog = new HandleReadOnlyStatusDialog(myProject, fileInfos); - dialog.show(); + new HandleReadOnlyStatusDialog(myProject, fileInfos).show(); } else { for (int i = 0; i < fileInfos.length; i++) { fileInfos[i].handle(); @@ -115,7 +114,7 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements List fileInfos = new ArrayList(); for (int i = 0; i < files.length; i++) { final VirtualFile file = files[i]; - if (!file.isWritable()) { + if (file != null && !file.isWritable()) { fileInfos.add(new FileInfo(file, myProject)); } }