EA-38793 - IAE: ReplaceInProjectManager.findingUsagesFinished

This commit is contained in:
Alexey Kudravtsev
2012-09-04 12:09:36 +04:00
parent 14a437b0f7
commit 51a32a11a8
4 changed files with 43 additions and 15 deletions
@@ -32,7 +32,7 @@ import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Factory;
import com.intellij.openapi.util.Segment;
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.WindowManager;
import com.intellij.psi.PsiDirectory;
@@ -156,7 +156,7 @@ public class ReplaceInProjectManager {
}
@Override
public void findingUsagesFinished(@NotNull final UsageView usageView) {
public void findingUsagesFinished(final UsageView usageView) {
if (context[0] != null && findManager.getFindInProjectModel().isPromptOnReplace()) {
SwingUtilities.invokeLater(new Runnable() {
@Override
@@ -381,7 +381,7 @@ public class ReplaceInProjectManager {
}
if (readOnlyFiles != null) {
ReadonlyStatusHandler.getInstance(myProject).ensureFilesWritable(VfsUtil.toVirtualFileArray(readOnlyFiles));
ReadonlyStatusHandler.getInstance(myProject).ensureFilesWritable(VfsUtilCore.toVirtualFileArray(readOnlyFiles));
}
if (hasReadOnlyUsages(selectedUsages)) {
@@ -53,7 +53,7 @@ public abstract class UsageViewManager {
public interface UsageViewStateListener {
void usageViewCreated(@NotNull UsageView usageView);
void findingUsagesFinished(@NotNull UsageView usageView);
void findingUsagesFinished(UsageView usageView);
}
public abstract void searchAndShowUsages(@NotNull UsageTarget[] searchFor,
@@ -20,7 +20,7 @@ import com.intellij.ide.projectView.PresentationData;
import com.intellij.lang.Language;
import com.intellij.navigation.ItemPresentation;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.editor.Editor;
@@ -122,6 +122,7 @@ public class XPathEvalAction extends XPathAction {
private final Icon myIcon = XpathIcons.Xml;
@Override
protected void updateToolbar(AnActionEvent event) {
super.updateToolbar(event);
if (myIcon != null) {
@@ -129,19 +130,21 @@ public class XPathEvalAction extends XPathAction {
}
}
@Override
protected boolean isEnabledAt(XmlFile xmlFile, int offset) {
return true;
}
@Override
public void actionPerformed(AnActionEvent event) {
final Project project = LangDataKeys.PROJECT.getData(event.getDataContext());
final Project project = PlatformDataKeys.PROJECT.getData(event.getDataContext());
if (project == null) {
// no active project
LOG.debug("No project");
return;
}
Editor editor = LangDataKeys.EDITOR.getData(event.getDataContext());
Editor editor = PlatformDataKeys.EDITOR.getData(event.getDataContext());
if (editor == null) {
FileEditorManager fem = FileEditorManager.getInstance(project);
editor = fem.getSelectedTextEditor();
@@ -227,7 +230,7 @@ public class XPathEvalAction extends XPathAction {
if (result instanceof List<?>) {
final List<?> list = (List<?>)result;
if (list.size() > 0) {
if (!list.isEmpty()) {
if (cfg.HIGHLIGHT_RESULTS) {
highlightResult(contextNode, editor, list);
}
@@ -268,6 +271,7 @@ public class XPathEvalAction extends XPathAction {
//noinspection unchecked
final List<?> _result = new ArrayList(result);
final Factory<UsageSearcher> searcherFactory = new Factory<UsageSearcher>() {
@Override
public UsageSearcher create() {
return new MyUsageSearcher(_result, xPath, contextNode);
}
@@ -277,15 +281,18 @@ public class XPathEvalAction extends XPathAction {
showUsageView(project, usageTarget, searcherFactory, new EditExpressionAction() {
final Config config = myComponent.getConfig();
@Override
protected void execute() {
config.OPEN_NEW_TAB = false;
XPathEvalAction.this.execute(editor);
}
@Override
protected Object saveState() {
return config.OPEN_NEW_TAB;
}
@Override
protected void restoreState(Object o) {
if (!config.OPEN_NEW_TAB) config.OPEN_NEW_TAB = Boolean.TRUE.equals(o);
}
@@ -307,13 +314,14 @@ public class XPathEvalAction extends XPathAction {
final FindUsagesProcessPresentation processPresentation = new FindUsagesProcessPresentation();
processPresentation.setProgressIndicatorFactory(new Factory<ProgressIndicator>() {
@Override
public ProgressIndicator create() {
return new FindProgressIndicator(project, "XML Document(s)");
}
});
processPresentation.setShowPanelIfOnlyOneUsage(true);
processPresentation.setShowNotFoundMessage(true);
final UsageTarget[] usageTargets = new UsageTarget[]{ usageTarget };
final UsageTarget[] usageTargets = { usageTarget };
UsageViewManager.getInstance(project).searchAndShowUsages(
usageTargets,
@@ -321,11 +329,13 @@ public class XPathEvalAction extends XPathAction {
processPresentation,
presentation,
new UsageViewManager.UsageViewStateListener() {
@Override
public void usageViewCreated(@NotNull UsageView usageView) {
usageView.addButtonToLowerPane(editAction, "&Edit Expression");
}
public void findingUsagesFinished(@NotNull UsageView usageView) {
@Override
public void findingUsagesFinished(UsageView usageView) {
}
});
}
@@ -368,7 +378,7 @@ public class XPathEvalAction extends XPathAction {
*
* @param editor The editor object to apply the highlighting to
*/
private void highlightResult(XmlElement contextNode, final @NotNull Editor editor, final List<?> list) {
private void highlightResult(XmlElement contextNode, @NotNull final Editor editor, final List<?> list) {
final Config cfg = myComponent.getConfig();
int lowestOffset = Integer.MAX_VALUE;
@@ -394,6 +404,7 @@ public class XPathEvalAction extends XPathAction {
}
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
final StatusBar statusBar = WindowManager.getInstance().getStatusBar(editor.getProject());
final String s = StringUtil.pluralize("match", list.size());
@@ -418,50 +429,62 @@ public class XPathEvalAction extends XPathAction {
myItemPresentation = new PresentationData(expression, null, null, null);
}
@Override
public void findUsages() {
throw new IllegalArgumentException();
}
@Override
public void findUsagesInEditor(@NotNull FileEditor editor) {
throw new IllegalArgumentException();
}
@Override
public void highlightUsages(PsiFile file, Editor editor, boolean clearHighlights) {
throw new UnsupportedOperationException();
}
@Override
public boolean isValid() {
// re-run will become unavailable if the context node is invalid
return myContextNode == null || myContextNode.isValid();
}
@Override
public boolean isReadOnly() {
return true;
}
@Override
@Nullable
public VirtualFile[] getFiles() {
return null;
}
@Override
public void update() {
}
@Override
public String getName() {
return "Expression";
}
@Override
public ItemPresentation getPresentation() {
return myItemPresentation;
}
@Override
public void navigate(boolean requestFocus) {
}
@Override
public boolean canNavigate() {
return false;
}
@Override
public boolean canNavigateToSource() {
return false;
}
@@ -478,12 +501,14 @@ public class XPathEvalAction extends XPathAction {
myContextNode = contextNode;
}
@Override
public void generate(final Processor<Usage> processor) {
Runnable runnable = new Runnable() {
@Override
@SuppressWarnings({"unchecked"})
public void run() {
final List<?> list;
if (myResult.size() == 0) {
if (myResult.isEmpty()) {
try {
list = (List<?>)myXPath.selectNodes(myContextNode);
} catch (JaxenException e) {
@@ -500,6 +525,7 @@ public class XPathEvalAction extends XPathAction {
indicator.setText("Collecting matches...");
Collections.sort(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
indicator.checkCanceled();
if (o1 instanceof PsiElement && o2 instanceof PsiElement) {
@@ -513,7 +539,7 @@ public class XPathEvalAction extends XPathAction {
indicator.checkCanceled();
Object o = list.get(i);
if (o instanceof PsiElement) {
final PsiElement element = ((PsiElement)o);
final PsiElement element = (PsiElement)o;
processor.process(new UsageInfo2UsageAdapter(new UsageInfo(element)));
indicator.setText2(element.getContainingFile().getName());
}
@@ -526,9 +552,11 @@ public class XPathEvalAction extends XPathAction {
}
}
public static abstract class EditExpressionAction implements Runnable {
public abstract static class EditExpressionAction implements Runnable {
@Override
public void run() {
Runnable runnable = new Runnable() {
@Override
public void run() {
final Object o = saveState();
try {
@@ -111,7 +111,7 @@ public class FindByXPathAction extends AnAction {
usageView.addButtonToLowerPane(new MyEditExpressionAction(project, module), "&Edit Expression");
}
public void findingUsagesFinished(@NotNull UsageView usageView) {
public void findingUsagesFinished(UsageView usageView) {
}
};
UsageViewManager.getInstance(project).searchAndShowUsages(