mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Fixing ToDo, Alt+F1
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user