Fixing ToDo, Alt+F1

This commit is contained in:
Olesya Smirnova
2005-01-24 17:31:00 +03:00
parent 377dc8f14e
commit c960e2c5d7
5 changed files with 42 additions and 43 deletions
@@ -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 <Type extends PsiElement> extends ProjectViewNode<Type> {
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<AbstractTreeNode> getChildren() {
@@ -74,7 +73,9 @@ public abstract class BasePsiNode <Type extends PsiElement> 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;
+15 -15
View File
@@ -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);
@@ -269,9 +269,9 @@ public abstract class TodoTreeBuilder extends AbstractTreeBuilder {
* @return first <code>SmartTodoItemPointer</code> that is the children (in depth) of the specified <code>element</code>.
* If <code>element</code> itself is a <code>TodoItem</code> then the method returns the <code>element</code>.
*/
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 <code>SmartTodoItemPointer</code> that is the children (in depth) of the specified <code>element</code>.
* If <code>element</code> itself is a <code>TodoItem</code> then the method returns the <code>element</code>.
*/
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 <code>TodoItem</code> for the passed <code>pointer</code>. Returns <code>null</code>
* if the <code>pointer</code> 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 <code>SmartTodoItemPointer</code> for the passed <code>pointer</code>. Returns <code>null</code>
* if the <code>pointer</code> 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);
@@ -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<PsiFile>{
private final Set<TodoFileNode> 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<AbstractTreeNode> getChildren() {
return new ArrayList<AbstractTreeNode>(myFileNode);
return new ArrayList<AbstractTreeNode>(Collections.singleton(myFileNode));
}
public void update(PresentationData presentation) {
@@ -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<FileInfo> fileInfos = new ArrayList<FileInfo>();
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));
}
}