mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
canNavigateToSource added to Navigatable (http://www.jetbrains.net/jira/browse/IDEADEV-423 fixed)
This commit is contained in:
@@ -22,6 +22,7 @@ import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.psi.search.SearchScope;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.pom.Navigatable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@@ -258,6 +259,11 @@ public class ASTWrapperPsiElement extends ElementBase implements PsiElement, Nav
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
final Navigatable descriptor = EditSourceUtil.getDescriptor(getNavigationElement());
|
||||
return descriptor != null && descriptor.canNavigateToSource();
|
||||
}
|
||||
|
||||
public FileStatus getFileStatus() {
|
||||
if (!isPhysical()) return FileStatus.NOT_CHANGED;
|
||||
PsiFile contFile = getContainingFile();
|
||||
|
||||
@@ -136,6 +136,9 @@ public class UsageInfo2UsageAdapter implements Usage, UsageInModule, UsageInLibr
|
||||
return descriptor != null ? descriptor.canNavigate() : false;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return canNavigate();
|
||||
}
|
||||
|
||||
private OpenFileDescriptor getDescriptor() {
|
||||
return isValid() ? new OpenFileDescriptor(getProject(), getFile(), myRangeMarkers.get(0).getStartOffset()) : null;
|
||||
|
||||
@@ -191,6 +191,11 @@ class GroupNode extends Node implements Navigatable {
|
||||
return myGroup != null && myGroup.canNavigate();
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return myGroup != null && myGroup.canNavigateToSource();
|
||||
}
|
||||
|
||||
|
||||
protected boolean isDataExcluded() {
|
||||
Enumeration enumeration = children();
|
||||
while (enumeration.hasMoreElements()) {
|
||||
|
||||
@@ -49,6 +49,10 @@ class UsageNode extends Node implements Comparable<UsageNode>, Navigatable {
|
||||
return myUsage.isValid() && myUsage.canNavigate();
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return myUsage.isValid() && myUsage.canNavigate();
|
||||
}
|
||||
|
||||
protected boolean isDataValid() {
|
||||
return myUsage.isValid();
|
||||
}
|
||||
|
||||
@@ -129,6 +129,10 @@ public class ClassGroupingRule implements UsageGroupingRule {
|
||||
return isValid();
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return canNavigate();
|
||||
}
|
||||
|
||||
public int compareTo(UsageGroup usageGroup) {
|
||||
return getText(null).compareTo(usageGroup.getText(null));
|
||||
}
|
||||
|
||||
@@ -90,6 +90,10 @@ public class FileGroupingRule implements UsageGroupingRule {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return canNavigate();
|
||||
}
|
||||
|
||||
public int compareTo(UsageGroup usageGroup) {
|
||||
return getText(null).compareTo(usageGroup.getText(null));
|
||||
}
|
||||
|
||||
@@ -104,6 +104,10 @@ public class MethodGroupingRule implements UsageGroupingRule {
|
||||
return isValid();
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return canNavigate();
|
||||
}
|
||||
|
||||
public int compareTo(UsageGroup usageGroup) {
|
||||
if (!(usageGroup instanceof MethodUsageGroup)) {
|
||||
LOG.error("MethodUsageGroup expected but " + usageGroup.getClass() + " found");
|
||||
|
||||
@@ -76,6 +76,10 @@ public class ModuleGroupingRule implements UsageGroupingRule {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return canNavigate();
|
||||
}
|
||||
|
||||
public Object getData(String dataId) {
|
||||
return null;
|
||||
}
|
||||
@@ -137,6 +141,10 @@ public class ModuleGroupingRule implements UsageGroupingRule {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(UsageGroup o) {
|
||||
if (o instanceof LibraryUsageGroup) return -1;
|
||||
return o.getText(null).compareTo(getText(null));
|
||||
|
||||
@@ -32,6 +32,10 @@ public class NonCodeUsageGroupingRule implements UsageGroupingRule {
|
||||
public int compareTo(UsageGroup usageGroup) { return usageGroup == this ? 0 : 1; }
|
||||
public void navigate(boolean requestFocus) { }
|
||||
public boolean canNavigate() { return false; }
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return canNavigate();
|
||||
}
|
||||
}
|
||||
|
||||
private static class NonCodeUsageGroup implements UsageGroup {
|
||||
@@ -49,6 +53,10 @@ public class NonCodeUsageGroupingRule implements UsageGroupingRule {
|
||||
public int compareTo(UsageGroup usageGroup) { return usageGroup == this ? 0 : -1; }
|
||||
public void navigate(boolean requestFocus) { }
|
||||
public boolean canNavigate() { return false; }
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return canNavigate();
|
||||
}
|
||||
}
|
||||
|
||||
public UsageGroup groupUsage(Usage usage) {
|
||||
|
||||
@@ -81,6 +81,10 @@ public class PackageGroupingRule implements UsageGroupingRule {
|
||||
return myPackage.canNavigate();
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(UsageGroup usageGroup) {
|
||||
return getText(null).compareTo(usageGroup.getText(null));
|
||||
}
|
||||
@@ -142,6 +146,10 @@ public class PackageGroupingRule implements UsageGroupingRule {
|
||||
return directory != null && directory.canNavigate();
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(UsageGroup usageGroup) {
|
||||
return getText(null).compareTo(usageGroup.getText(null));
|
||||
}
|
||||
|
||||
@@ -124,6 +124,10 @@ public class UsageTypeGroupingRule implements UsageGroupingRule {
|
||||
public void navigate(boolean focus) { }
|
||||
public boolean canNavigate() { return false; }
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(UsageGroup usageGroup) {
|
||||
return getText(null).compareTo(usageGroup.getText(null));
|
||||
}
|
||||
|
||||
@@ -130,6 +130,10 @@ public class UsageNodeTreeBuilderTest extends TestCase {
|
||||
public void navigate(boolean requestFocus) { }
|
||||
|
||||
public boolean canNavigate() { return false; }
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static class OddEvenGroupingRule implements UsageGroupingRule {
|
||||
@@ -147,6 +151,11 @@ public class UsageNodeTreeBuilderTest extends TestCase {
|
||||
|
||||
public void navigate(boolean focus) throws UnsupportedOperationException { }
|
||||
public boolean canNavigate() { return false; }
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(UsageGroup o) { return o == ODD ? -1 : 0; }
|
||||
public String toString() { return getText(null); }
|
||||
};
|
||||
@@ -165,6 +174,11 @@ public class UsageNodeTreeBuilderTest extends TestCase {
|
||||
|
||||
public void navigate(boolean focus) throws UnsupportedOperationException { }
|
||||
public boolean canNavigate() { return false; }
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public int compareTo(UsageGroup o) { return o == EVEN ? 1 : 0; }
|
||||
public String toString() { return getText(null); }
|
||||
};
|
||||
@@ -229,6 +243,10 @@ public class UsageNodeTreeBuilderTest extends TestCase {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean isReadOnly() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -148,6 +148,10 @@ public abstract class AbstractTreeNode<Value> extends NodeDescriptor implements
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected final Object getParentValue() {
|
||||
return getParent() == null ? null : getParent().getValue();
|
||||
}
|
||||
|
||||
@@ -105,6 +105,10 @@ public class OpenFileDescriptor implements Navigatable {
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return true;
|
||||
}
|
||||
|
||||
public Project getProject() {
|
||||
return myProject;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ public class EditSourceOnDoubleClickHandler {
|
||||
if (((TreeNode)selectionPath.getLastPathComponent()).isLeaf() || !expandOnDoubleClick(((TreeNode)selectionPath.getLastPathComponent()))) {
|
||||
//Node expansion for non-leafs has a higher priority
|
||||
Navigatable navigatable = (Navigatable)dataContext.getData(DataConstants.NAVIGATABLE);
|
||||
if (navigatable != null && navigatable.canNavigate()) {
|
||||
if (navigatable != null && navigatable.canNavigateToSource()) {
|
||||
navigatable.navigate(true);
|
||||
}
|
||||
}
|
||||
@@ -58,7 +58,7 @@ public class EditSourceOnDoubleClickHandler {
|
||||
Project project = (Project)dataContext.getData(DataConstants.PROJECT);
|
||||
if (project == null) return;
|
||||
Navigatable navigatable = (Navigatable)dataContext.getData(DataConstants.NAVIGATABLE);
|
||||
if (navigatable != null && navigatable.canNavigate()) {
|
||||
if (navigatable != null && navigatable.canNavigateToSource()) {
|
||||
navigatable.navigate(true);
|
||||
}
|
||||
}
|
||||
@@ -75,7 +75,7 @@ public class EditSourceOnDoubleClickHandler {
|
||||
Project project = (Project)dataContext.getData(DataConstants.PROJECT);
|
||||
if (project == null) return;
|
||||
Navigatable navigatable = (Navigatable)dataContext.getData(DataConstants.NAVIGATABLE);
|
||||
if (navigatable != null && navigatable.canNavigate()) {
|
||||
if (navigatable != null && navigatable.canNavigateToSource()) {
|
||||
navigatable.navigate(true);
|
||||
}
|
||||
}
|
||||
@@ -93,7 +93,7 @@ public class EditSourceOnDoubleClickHandler {
|
||||
if (!list.getCellBounds(index, index).contains(point)) return;
|
||||
DataContext dataContext = DataManager.getInstance().getDataContext(list);
|
||||
Navigatable navigatable = (Navigatable)dataContext.getData(DataConstants.NAVIGATABLE);
|
||||
if (navigatable == null || !navigatable.canNavigate()) { return; }
|
||||
if (navigatable == null || !navigatable.canNavigateToSource()) { return; }
|
||||
|
||||
navigatable.navigate(true);
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ public class EditSourceOnEnterKeyHandler{
|
||||
if (project == null) return;
|
||||
|
||||
Navigatable navigatable = (Navigatable)dataContext.getData(DataConstants.NAVIGATABLE);
|
||||
if (navigatable != null && navigatable.canNavigate()) {
|
||||
if (navigatable != null && navigatable.canNavigateToSource()) {
|
||||
navigatable.navigate(false);
|
||||
}
|
||||
}
|
||||
@@ -43,7 +43,7 @@ public class EditSourceOnEnterKeyHandler{
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
DataContext dataContext = DataManager.getInstance().getDataContext(component);
|
||||
final Navigatable navigatable = (Navigatable)dataContext.getData(DataConstants.NAVIGATABLE);
|
||||
if (navigatable == null || !navigatable.canNavigate()) return;
|
||||
if (navigatable == null || !navigatable.canNavigateToSource()) return;
|
||||
|
||||
navigatable.navigate(true);
|
||||
|
||||
|
||||
@@ -171,6 +171,10 @@ public class FindInProjectManager implements ProjectComponent {
|
||||
public boolean canNavigate() {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (manager!=null) {
|
||||
|
||||
@@ -81,6 +81,10 @@ public class PsiElement2UsageTargetAdapter implements UsageTarget {
|
||||
return isValid() && getNavigationItem().canNavigate();
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return isValid() && getNavigationItem().canNavigateToSource();
|
||||
}
|
||||
|
||||
private NavigationItem getNavigationItem() {
|
||||
return (NavigationItem)myPointer.getElement();
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ public abstract class BaseNavigateToSourceAction extends AnAction {
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
DataContext dataContext = e.getDataContext();
|
||||
Navigatable navigatable = (Navigatable)dataContext.getData(DataConstants.NAVIGATABLE);
|
||||
if (navigatable.canNavigate()) {
|
||||
if (navigatable.canNavigateToSource()) {
|
||||
navigatable.navigate(myFocusEditor);
|
||||
}
|
||||
}
|
||||
@@ -38,11 +38,7 @@ public abstract class BaseNavigateToSourceAction extends AnAction {
|
||||
public void update(AnActionEvent event){
|
||||
DataContext dataContext = event.getDataContext();
|
||||
Navigatable navigatable = (Navigatable)dataContext.getData(DataConstants.NAVIGATABLE);
|
||||
event.getPresentation().setEnabled(navigatable != null && navigatable.canNavigate());
|
||||
}
|
||||
|
||||
private static void navigate(DataContext dataContext, OpenFileDescriptor descriptor, boolean focusEditor) {
|
||||
SourceNavigator.fromContext(dataContext).navigate(descriptor, focusEditor);
|
||||
event.getPresentation().setEnabled(navigatable != null && navigatable.canNavigateToSource());
|
||||
}
|
||||
|
||||
public static abstract class SourceNavigator {
|
||||
|
||||
@@ -225,8 +225,7 @@ public class CommanderPanel extends JPanel {
|
||||
public boolean navigateSelectedElement() {
|
||||
final AbstractTreeNode selectedNode = getSelectedNode();
|
||||
if (selectedNode != null) {
|
||||
final Object value = selectedNode.getValue();
|
||||
if (selectedNode.canNavigate()) {
|
||||
if (selectedNode.canNavigateToSource()) {
|
||||
selectedNode.navigate(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -103,7 +103,7 @@ public abstract class AbstractProjectViewPSIPane extends AbstractProjectViewPane
|
||||
|
||||
DataContext dataContext = DataManager.getInstance().getDataContext(myTree);
|
||||
Navigatable navigatable = (Navigatable)dataContext.getData(DataConstants.NAVIGATABLE);
|
||||
if (navigatable != null && navigatable.canNavigate()) {
|
||||
if (navigatable != null && navigatable.canNavigateToSource()) {
|
||||
navigatable.navigate(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,6 +121,10 @@ public abstract class BasePsiNode <Type extends PsiElement> extends ProjectViewN
|
||||
return getValue() instanceof NavigationItem && ((NavigationItem)getValue()).canNavigate();
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return getValue() instanceof NavigationItem && ((NavigationItem)getValue()).canNavigateToSource();
|
||||
}
|
||||
|
||||
public static VirtualFile getVirtualFile(PsiElement element) {
|
||||
return element instanceof PsiDirectory
|
||||
? ((PsiDirectory)element).getVirtualFile()
|
||||
|
||||
@@ -47,6 +47,14 @@ public class Form implements Navigatable{
|
||||
}
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
for (Iterator<PsiFile> iterator = myFormFiles.iterator(); iterator.hasNext();) {
|
||||
PsiFile psiFile = iterator.next();
|
||||
if (psiFile instanceof Navigatable && ((Navigatable)psiFile).canNavigateToSource()) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean canNavigate() {
|
||||
for (Iterator<PsiFile> iterator = myFormFiles.iterator(); iterator.hasNext();) {
|
||||
PsiFile psiFile = iterator.next();
|
||||
|
||||
@@ -53,6 +53,10 @@ public class FormNode extends ProjectViewNode<Form>{
|
||||
return getValue().canNavigate();
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return getValue().canNavigateToSource();
|
||||
}
|
||||
|
||||
public String getToolTip() {
|
||||
return "UI Designer Form";
|
||||
}
|
||||
|
||||
@@ -132,5 +132,9 @@ public abstract class PsiTreeElementBase <Value extends PsiElement> implements S
|
||||
}
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return canNavigate();
|
||||
}
|
||||
|
||||
public abstract StructureViewTreeElement[] getChildrenBase();
|
||||
}
|
||||
|
||||
@@ -166,7 +166,7 @@ public class StructureViewComponent extends JPanel implements TreeActionsOwner,
|
||||
if (KeyEvent.VK_ENTER == e.getKeyCode()) {
|
||||
DataContext dataContext = DataManager.getInstance().getDataContext(getTree());
|
||||
Navigatable navigatable = (Navigatable)dataContext.getData(DataConstants.NAVIGATABLE);
|
||||
if (navigatable != null && navigatable.canNavigate()) {
|
||||
if (navigatable != null && navigatable.canNavigateToSource()) {
|
||||
navigatable.navigate(false);
|
||||
}
|
||||
}
|
||||
@@ -530,7 +530,7 @@ public class StructureViewComponent extends JPanel implements TreeActionsOwner,
|
||||
|
||||
Navigatable editSourceDescriptor = (Navigatable)DataManager.getInstance().getDataContext(getTree())
|
||||
.getData(DataConstants.NAVIGATABLE);
|
||||
if (myFileEditor != null && editSourceDescriptor != null && editSourceDescriptor.canNavigate()) {
|
||||
if (myFileEditor != null && editSourceDescriptor != null && editSourceDescriptor.canNavigateToSource()) {
|
||||
editSourceDescriptor.navigate(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,7 +116,7 @@ abstract class TodoPanel extends JPanel implements OccurenceNavigator, DataProvi
|
||||
return;
|
||||
}
|
||||
Navigatable navigatable = (Navigatable)getData(DataConstants.NAVIGATABLE);
|
||||
if (navigatable != null && navigatable.canNavigate()) {
|
||||
if (navigatable != null && navigatable.canNavigateToSource()) {
|
||||
navigatable.navigate(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,6 +221,10 @@ public abstract class CachingChildrenTreeNode <Value> extends AbstractTreeNode<V
|
||||
return getValue() instanceof Navigatable && ((Navigatable)getValue()).canNavigate();
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return getValue() instanceof Navigatable && ((Navigatable)getValue()).canNavigateToSource();
|
||||
}
|
||||
|
||||
protected void clearChildren() {
|
||||
if (myChildren != null) {
|
||||
myChildren.clear();
|
||||
|
||||
@@ -110,6 +110,10 @@ public class PackageDependenciesNode extends DefaultMutableTreeNode implements N
|
||||
return descriptor != null ? descriptor.canNavigate() : false;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return canNavigate();
|
||||
}
|
||||
|
||||
private Project getProject(){
|
||||
if (getPsiElement() == null || getPsiElement().getContainingFile() == null){
|
||||
return null;
|
||||
|
||||
@@ -116,6 +116,10 @@ public abstract class PsiElementBase extends ElementBase implements PsiElement,N
|
||||
return EditSourceUtil.getDescriptor(getNavigationElement()) != null;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return EditSourceUtil.getDescriptor(getNavigationElement()) != null;
|
||||
}
|
||||
|
||||
public FileStatus getFileStatus() {
|
||||
return FileStatus.NOT_CHANGED;
|
||||
}
|
||||
|
||||
@@ -228,6 +228,10 @@ public abstract class CompositePsiElement extends CompositeElement implements Ps
|
||||
return EditSourceUtil.getDescriptor(getNavigationElement()) != null;
|
||||
}
|
||||
|
||||
public boolean canNavigateToSource() {
|
||||
return canNavigate();
|
||||
}
|
||||
|
||||
public FileStatus getFileStatus() {
|
||||
if (!isPhysical()) return FileStatus.NOT_CHANGED;
|
||||
PsiFile contFile = getContainingFile();
|
||||
|
||||
@@ -74,7 +74,7 @@ public abstract class AutoScrollToSourceHandler {
|
||||
protected void scrollToSource(JTree tree) {
|
||||
DataContext dataContext=DataManager.getInstance().getDataContext(tree);
|
||||
Navigatable navigatable = (Navigatable)dataContext.getData(DataConstants.NAVIGATABLE);
|
||||
if (navigatable != null && navigatable.canNavigate()) {
|
||||
if (navigatable != null && navigatable.canNavigateToSource()) {
|
||||
navigatable.navigate(false);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user