@Nullable private static PsiElement getSelectedPsiElement( final DataContext dataContext, final Project project) { PsiElement element = null; final Editor editor = CommonDataKeys.EDITOR.getData(dataContext); if (editor != null) { final PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); if (psiFile != null) { final int offset = editor.getCaretModel().getOffset(); element = psiFile.findElementAt(offset); if (element == null && offset > 0 && offset == psiFile.getTextLength()) { element = psiFile.findElementAt(offset - 1); } } } if (element == null) { final PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); element = elements != null && elements.length > 0 ? elements[0] : null; } if (element == null) { final VirtualFile[] files = CommonDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext); if (files != null && files.length > 0) { element = PsiManager.getInstance(project).findFile(files[0]); } } return element; }
@Nullable private static PsiElement[] getPsiElements(DataContext dataContext) { PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); if (elements == null) { final Object data = LangDataKeys.PSI_ELEMENT.getData(dataContext); if (data != null) { elements = new PsiElement[] {(PsiElement) data}; } else { final Object data1 = LangDataKeys.PSI_FILE.getData(dataContext); if (data1 != null) { elements = new PsiElement[] {(PsiFile) data1}; } } } return elements; }
@Override public Collection<AbstractTreeNode> getFavoriteNodes( final DataContext context, final ViewSettings viewSettings) { final Project project = CommonDataKeys.PROJECT.getData(context); if (project == null) return null; PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(context); if (elements == null) { final PsiElement element = CommonDataKeys.PSI_ELEMENT.getData(context); if (element != null) { elements = new PsiElement[] {element}; } } if (elements != null) { final Collection<AbstractTreeNode> result = new ArrayList<AbstractTreeNode>(); for (PsiElement element : elements) { if (element instanceof PsiClass && checkClassUnderSources(element, project)) { result.add(new ClassSmartPointerNode(project, element, viewSettings)); } } return result.isEmpty() ? null : result; } return null; }
public void actionPerformed(AnActionEvent e) { final DataContext dataContext = e.getDataContext(); final Project project = PlatformDataKeys.PROJECT.getData(dataContext); if (project == null) { return; } CommandProcessor.getInstance() .executeCommand( project, new Runnable() { public void run() { PsiDocumentManager.getInstance(project).commitAllDocuments(); } }, "", null); final Editor editor = PlatformDataKeys.EDITOR.getData(dataContext); PsiElement[] elements; PsiDirectory defaultTargetDirectory; if (editor != null) { PsiElement aElement = getTargetElement(editor, project); PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument()); if (file == null) return; elements = new PsiElement[] {aElement}; if (aElement == null || !CopyHandler.canCopy(elements)) { elements = new PsiElement[] {file}; } defaultTargetDirectory = file.getContainingDirectory(); } else { PsiElement element = LangDataKeys.TARGET_PSI_ELEMENT.getData(dataContext); defaultTargetDirectory = element instanceof PsiDirectory ? (PsiDirectory) element : null; elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); } doCopy(elements, defaultTargetDirectory); }
protected void updateForToolWindow( String toolWindowId, DataContext dataContext, Presentation presentation) { PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext); presentation.setEnabled(elements != null && CopyHandler.canCopy(elements)); }