mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-10-01 19:02:13 +07:00
IDEADEV-89
This commit is contained in:
@@ -18,11 +18,12 @@ public interface UsageViewManager {
|
||||
UsageView searchAndShowUsages(UsageTarget[] searchFor,
|
||||
Factory<UsageSearcher> searcherFactory,
|
||||
boolean showPanelIfOnlyOneUsage,
|
||||
boolean showNotFoundMessage, UsageViewPresentation presentation);
|
||||
boolean showNotFoundMessage, UsageViewPresentation presentation,
|
||||
UsageViewStateListener listener);
|
||||
|
||||
interface UsageViewStateListener {
|
||||
void usageViewCreated(UsageView usageView);
|
||||
void findingUsagesFinished();
|
||||
void findingUsagesFinished(final UsageView usageView);
|
||||
}
|
||||
|
||||
void searchAndShowUsages(UsageTarget[] searchFor,
|
||||
|
||||
@@ -24,11 +24,16 @@ import com.intellij.usages.rules.*;
|
||||
import com.intellij.util.Alarm;
|
||||
import com.intellij.util.EditSourceOnDoubleClickHandler;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.ui.tree.TreeUtil;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import com.intellij.util.ui.Tree;
|
||||
import com.intellij.util.ui.tree.TreeUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.tree.*;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.DefaultTreeModel;
|
||||
import javax.swing.tree.TreeNode;
|
||||
import javax.swing.tree.TreePath;
|
||||
import java.awt.*;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
@@ -36,7 +41,6 @@ import java.awt.event.KeyAdapter;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.util.*;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by IntelliJ IDEA.
|
||||
* User: max
|
||||
@@ -62,6 +66,7 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra
|
||||
|
||||
private Alarm myFlushAlarm = new Alarm(Alarm.ThreadToUse.SWING_THREAD);
|
||||
private UsageModelTracker myModelTracker;
|
||||
Set<Usage> myUsages = new HashSet<Usage>();
|
||||
private Map<Usage, UsageNode> myUsageNodes = new HashMap<Usage, UsageNode>();
|
||||
private ButtonPanel myButtonPanel = new ButtonPanel();
|
||||
|
||||
@@ -428,6 +433,7 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra
|
||||
}
|
||||
|
||||
public void appendUsageLater(final Usage usage) {
|
||||
myUsages.add(usage);
|
||||
ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator();
|
||||
if (indicator != null) {
|
||||
myFlushAlarm.cancelAllRequests();
|
||||
@@ -463,6 +469,7 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra
|
||||
private boolean myIsFirstVisibleUsageFound = false;
|
||||
|
||||
public void appendUsage(Usage usage) {
|
||||
myUsages.add(usage);
|
||||
final UsageNode node = myBuilder.appendUsage(usage);
|
||||
myUsageNodes.put(usage, node);
|
||||
if (!myIsFirstVisibleUsageFound && node != null) { //first visible usage found;
|
||||
@@ -768,9 +775,7 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra
|
||||
}
|
||||
|
||||
public Set<Usage> getUsages() {
|
||||
final LinkedHashSet<Usage> usages = new LinkedHashSet<Usage>();
|
||||
collectUsages((DefaultMutableTreeNode)myTree.getModel().getRoot(), usages);
|
||||
return usages;
|
||||
return myUsages;
|
||||
}
|
||||
|
||||
private void collectUsages(DefaultMutableTreeNode node, Set<Usage> usages) {
|
||||
|
||||
@@ -65,7 +65,8 @@ public class UsageViewManagerImpl implements UsageViewManager, ProjectComponent
|
||||
public UsageView searchAndShowUsages(final UsageTarget[] searchFor,
|
||||
final Factory<UsageSearcher> searcherFactory,
|
||||
final boolean showPanelIfOnlyOneUsage,
|
||||
final boolean showNotFoundMessage, final UsageViewPresentation presentation) {
|
||||
final boolean showNotFoundMessage, final UsageViewPresentation presentation,
|
||||
UsageViewStateListener listener) {
|
||||
|
||||
final UsageViewImpl[] usageView = new UsageViewImpl[]{null};
|
||||
|
||||
@@ -75,7 +76,7 @@ public class UsageViewManagerImpl implements UsageViewManager, ProjectComponent
|
||||
|
||||
final Application application = ApplicationManager.getApplication();
|
||||
application.runProcessWithProgressSynchronously(
|
||||
new SearchForUsagesRunnable(usageView, presentation, searchFor, searcherFactory, processPresentation, null),
|
||||
new SearchForUsagesRunnable(usageView, presentation, searchFor, searcherFactory, processPresentation, listener),
|
||||
getProgressTitle(presentation),
|
||||
true,
|
||||
myProject
|
||||
@@ -155,14 +156,14 @@ public class UsageViewManagerImpl implements UsageViewManager, ProjectComponent
|
||||
private final UsageTarget[] mySearchFor;
|
||||
private final Factory<UsageSearcher> mySearcherFactory;
|
||||
private final FindUsagesProcessPresentation myProcessPresentation;
|
||||
private UsageViewManager.UsageViewStateListener myListener;
|
||||
private UsageViewStateListener myListener;
|
||||
|
||||
public SearchForUsagesRunnable(final UsageViewImpl[] usageView,
|
||||
final UsageViewPresentation presentation,
|
||||
final UsageTarget[] searchFor,
|
||||
final Factory<UsageSearcher> searcherFactory,
|
||||
FindUsagesProcessPresentation processPresentation,
|
||||
final UsageViewManager.UsageViewStateListener listener) {
|
||||
final UsageViewPresentation presentation,
|
||||
final UsageTarget[] searchFor,
|
||||
final Factory<UsageSearcher> searcherFactory,
|
||||
FindUsagesProcessPresentation processPresentation,
|
||||
final UsageViewManager.UsageViewStateListener listener) {
|
||||
myUsageView = usageView;
|
||||
myPresentation = presentation;
|
||||
mySearchFor = searchFor;
|
||||
@@ -279,7 +280,7 @@ public class UsageViewManagerImpl implements UsageViewManager, ProjectComponent
|
||||
}
|
||||
|
||||
if (myListener != null) {
|
||||
myListener.findingUsagesFinished();
|
||||
myListener.findingUsagesFinished(myUsageView[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -536,7 +536,7 @@ public class FindUsagesManager {
|
||||
}
|
||||
};
|
||||
final PsiElement2UsageTargetAdapter[] targets = convertToUsageTargets(descriptor.getPrimaryElements(), descriptor.getAdditionalElements());
|
||||
myAnotherManager.searchAndShowUsages(targets, searcherFactory, !toSkipUsagePanelWhenOneUsage, true, presentation);
|
||||
myAnotherManager.searchAndShowUsages(targets, searcherFactory, !toSkipUsagePanelWhenOneUsage, true, presentation, null);
|
||||
}
|
||||
|
||||
private UsageViewPresentation createPresentation(PsiElement psiElement, final FindUsagesOptions findUsagesOptions, boolean toOpenInNewTab) {
|
||||
|
||||
@@ -140,7 +140,7 @@ public class ReplaceInProjectManager implements ProjectComponent {
|
||||
addReplaceActions(context[0]);
|
||||
}
|
||||
|
||||
public void findingUsagesFinished() {
|
||||
public void findingUsagesFinished(final UsageView usageView) {
|
||||
if (context[0]!=null && findManager.getFindInProjectModel().isPromptOnReplace()){
|
||||
SwingUtilities.invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.usageView.UsageViewDescriptor;
|
||||
import com.intellij.usageView.UsageViewUtil;
|
||||
import com.intellij.usages.*;
|
||||
import com.intellij.usages.rules.PsiElementUsage;
|
||||
import com.intellij.util.Processor;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
@@ -187,8 +188,6 @@ public abstract class BaseRefactoringProcessor {
|
||||
presentation.setTargetsNodeText(descriptor.getProcessedElementsHeader());
|
||||
presentation.setShowReadOnlyStatusAsRed(true);
|
||||
presentation.setShowCancelButton(true);
|
||||
presentation.setCodeUsagesString(descriptor.getCodeReferencesText(1, 1)); //TODO
|
||||
presentation.setNonCodeUsagesString(descriptor.getCommentReferencesText(1, 1)); //TODO
|
||||
presentation.setUsagesString("usages");
|
||||
return presentation;
|
||||
}
|
||||
@@ -244,7 +243,39 @@ public abstract class BaseRefactoringProcessor {
|
||||
}
|
||||
};
|
||||
|
||||
final UsageView usageView = viewManager.searchAndShowUsages(targets, searcherFactory, true, false, createPresentation(viewDescriptor));
|
||||
final UsageViewPresentation presentation = createPresentation(viewDescriptor);
|
||||
|
||||
final UsageView usageView = viewManager.searchAndShowUsages(targets, searcherFactory, true, false, presentation,
|
||||
new UsageViewManager.UsageViewStateListener() {
|
||||
public void usageViewCreated(UsageView usageView) {}
|
||||
|
||||
public void findingUsagesFinished(final UsageView usageView) {
|
||||
if (usageView == null) return;
|
||||
final Set<Usage> usages = usageView.getUsages();
|
||||
int codeUsageCount = 0;
|
||||
int nonCodeUsageCount = 0;
|
||||
Set<PsiFile> codeFiles = new HashSet<PsiFile>();
|
||||
Set<PsiFile> nonCodeFiles = new HashSet<PsiFile>();
|
||||
for (Iterator<Usage> iterator = usages.iterator(); iterator.hasNext();) {
|
||||
Usage usage = iterator.next();
|
||||
if (usage instanceof PsiElementUsage) {
|
||||
final PsiElementUsage elementUsage = ((PsiElementUsage)usage);
|
||||
if (elementUsage.isNonCodeUsage()) {
|
||||
nonCodeUsageCount++;
|
||||
nonCodeFiles.add(elementUsage.getElement().getContainingFile());
|
||||
} else {
|
||||
codeUsageCount++;
|
||||
codeFiles.add(elementUsage.getElement().getContainingFile());
|
||||
}
|
||||
}
|
||||
}
|
||||
codeFiles.remove(null);
|
||||
nonCodeFiles.remove(null);
|
||||
|
||||
presentation.setCodeUsagesString(viewDescriptor.getCodeReferencesText(codeUsageCount, codeFiles.size()));
|
||||
presentation.setNonCodeUsagesString(viewDescriptor.getCommentReferencesText(nonCodeUsageCount, nonCodeFiles.size()));
|
||||
}
|
||||
});
|
||||
|
||||
final Runnable refactoringRunnable = new Runnable() {
|
||||
public void run() {
|
||||
|
||||
Reference in New Issue
Block a user