@Override public void invoke( final @NotNull Project project, Editor editor, final PsiFile file, DataContext dataContext) { final ResourceBundleEditor resourceBundleEditor = (ResourceBundleEditor) PlatformDataKeys.FILE_EDITOR.getData(dataContext); assert resourceBundleEditor != null; final ResourceBundleEditorViewElement selectedElement = resourceBundleEditor.getSelectedElementIfOnlyOne(); if (selectedElement != null) { CommandProcessor.getInstance() .runUndoTransparentAction( () -> { if (selectedElement instanceof PropertiesPrefixGroup) { final PropertiesPrefixGroup group = (PropertiesPrefixGroup) selectedElement; ResourceBundleRenameUtil.renameResourceBundleKeySection( getPsiElementsFromGroup(group), group.getPresentableName(), group.getPrefix().length() - group.getPresentableName().length()); } else if (selectedElement instanceof ResourceBundlePropertyStructureViewElement) { final PsiElement psiElement = ((ResourceBundlePropertyStructureViewElement) selectedElement) .getProperty() .getPsiElement(); ResourceBundleRenameUtil.renameResourceBundleKey(psiElement, project); } else if (selectedElement instanceof ResourceBundleFileStructureViewElement) { ResourceBundleRenameUtil.renameResourceBundleBaseName( ((ResourceBundleFileStructureViewElement) selectedElement).getValue(), project); } else { throw new IllegalStateException( "unsupported type: " + selectedElement.getClass()); } }); } }
@Override public void actionPerformed(AnActionEvent e) { DataContext dataContext = e.getDataContext(); final Project project = CommonDataKeys.PROJECT.getData(dataContext); if (project == null) return; PsiDocumentManager.getInstance(project).commitAllDocuments(); Editor editor = CommonDataKeys.EDITOR.getData(dataContext); UsageTarget[] usageTargets = UsageView.USAGE_TARGETS_KEY.getData(dataContext); if (usageTargets != null) { FileEditor fileEditor = PlatformDataKeys.FILE_EDITOR.getData(dataContext); if (fileEditor != null) { usageTargets[0].findUsagesInEditor(fileEditor); } } else if (editor == null) { Messages.showMessageDialog( project, FindBundle.message("find.no.usages.at.cursor.error"), CommonBundle.getErrorTitle(), Messages.getErrorIcon()); } else { HintManager.getInstance() .showErrorHint(editor, FindBundle.message("find.no.usages.at.cursor.error")); } }
@Override public boolean isAvailableOnDataContext(DataContext dataContext) { final Project project = CommonDataKeys.PROJECT.getData(dataContext); if (project == null) { return false; } final ResourceBundle bundle = ResourceBundleUtil.getResourceBundleFromDataContext(dataContext); if (bundle == null) { return false; } final FileEditor fileEditor = PlatformDataKeys.FILE_EDITOR.getData(dataContext); if (fileEditor == null || !(fileEditor instanceof ResourceBundleEditor)) { return false; } final VirtualFile virtualFile = CommonDataKeys.VIRTUAL_FILE.getData(dataContext); return !(virtualFile == null || !(virtualFile instanceof ResourceBundleAsVirtualFile)); }
private static DataContext getCorrectContext(DataContext dataContext) { if (PlatformDataKeys.FILE_EDITOR.getData(dataContext) != null) { return dataContext; } Project project = PlatformDataKeys.PROJECT.getData(dataContext); if (project == null) { return dataContext; } FileEditorManager editorManager = FileEditorManager.getInstance(project); VirtualFile[] files = editorManager.getSelectedFiles(); if (files.length == 0) { return dataContext; } FileEditor fileEditor = editorManager.getSelectedEditor(files[0]); return fileEditor == null ? dataContext : DataManager.getInstance().getDataContext(fileEditor.getComponent()); }
public boolean runMethodInAbstractClass( final ConfigurationContext context, final Runnable performRunnable, final PsiMethod psiMethod, final PsiClass containingClass, final Condition<PsiClass> acceptAbstractCondition) { if (containingClass != null && containingClass.hasModifierProperty(PsiModifier.ABSTRACT) && acceptAbstractCondition.value(containingClass)) { final Location location = context.getLocation(); if (location instanceof MethodLocation) { final PsiClass aClass = ((MethodLocation) location).getContainingClass(); if (aClass != null && !aClass.hasModifierProperty(PsiModifier.ABSTRACT)) { return false; } } else if (location instanceof PsiMemberParameterizedLocation) { return false; } final List<PsiClass> classes = new ArrayList<PsiClass>(); if (!ProgressManager.getInstance() .runProcessWithProgressSynchronously( new Runnable() { @Override public void run() { ClassInheritorsSearch.search(containingClass) .forEach( new Processor<PsiClass>() { @Override public boolean process(PsiClass aClass) { if (PsiClassUtil.isRunnableClass(aClass, true, true)) { classes.add(aClass); } return true; } }); } }, "Search for " + containingClass.getQualifiedName() + " inheritors", true, containingClass.getProject())) { return true; } if (classes.size() == 1) { runForClass(classes.get(0), psiMethod, context, performRunnable); return true; } if (classes.isEmpty()) return false; final FileEditor fileEditor = PlatformDataKeys.FILE_EDITOR.getData(context.getDataContext()); if (fileEditor instanceof TextEditor) { final Document document = ((TextEditor) fileEditor).getEditor().getDocument(); final PsiFile containingFile = PsiDocumentManager.getInstance(context.getProject()).getPsiFile(document); if (containingFile instanceof PsiClassOwner) { final List<PsiClass> psiClasses = new ArrayList<PsiClass>(Arrays.asList(((PsiClassOwner) containingFile).getClasses())); psiClasses.retainAll(classes); if (psiClasses.size() == 1) { runForClass(psiClasses.get(0), psiMethod, context, performRunnable); return true; } } } final PsiClassListCellRenderer renderer = new PsiClassListCellRenderer() { @Override protected boolean customizeNonPsiElementLeftRenderer( ColoredListCellRenderer renderer, JList list, Object value, int index, boolean selected, boolean hasFocus) { if (value == null) { renderer.append("All"); return true; } return super.customizeNonPsiElementLeftRenderer( renderer, list, value, index, selected, hasFocus); } }; Collections.sort(classes, renderer.getComparator()); // suggest to run all inherited tests classes.add(0, null); final JBList list = new JBList(classes); list.setCellRenderer(renderer); JBPopupFactory.getInstance() .createListPopupBuilder(list) .setTitle( "Choose executable classes to run " + (psiMethod != null ? psiMethod.getName() : containingClass.getName())) .setMovable(false) .setResizable(false) .setRequestFocus(true) .setItemChoosenCallback( new Runnable() { public void run() { final Object[] values = list.getSelectedValues(); if (values == null) return; chooseAndPerform(values, psiMethod, context, performRunnable, classes); } }) .createPopup() .showInBestPositionFor(context.getDataContext()); return true; } return false; }