summaryrefslogtreecommitdiff
path: root/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UsageViewContext.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UsageViewContext.java')
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UsageViewContext.java190
1 files changed, 190 insertions, 0 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UsageViewContext.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UsageViewContext.java
new file mode 100644
index 000000000000..afd2ae1b029d
--- /dev/null
+++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/UsageViewContext.java
@@ -0,0 +1,190 @@
+package com.intellij.structuralsearch.plugin.ui;
+
+import com.intellij.navigation.ItemPresentation;
+import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.fileEditor.FileEditor;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.structuralsearch.SSRBundle;
+import com.intellij.structuralsearch.plugin.replace.ui.ReplaceCommand;
+import com.intellij.usages.*;
+import org.jetbrains.annotations.NotNull;
+
+import javax.swing.*;
+import java.util.Set;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: Maxim.Mossienko
+ * Date: Mar 9, 2005
+ * Time: 2:47:49 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class UsageViewContext {
+ protected final SearchContext mySearchContext;
+ private UsageView myUsageView;
+ protected final Configuration myConfiguration;
+ private Set<Usage> myExcludedSet;
+ private SearchCommand myCommand;
+
+ protected UsageViewContext(SearchContext _searchContext,Configuration _configuration) {
+ myConfiguration = _configuration;
+ mySearchContext = _searchContext;
+ }
+
+ public boolean isExcluded(Usage usage) {
+ if (myExcludedSet == null) myExcludedSet = myUsageView.getExcludedUsages();
+ return myExcludedSet.contains(usage);
+ }
+
+ public UsageView getUsageView() {
+ return myUsageView;
+ }
+
+ public void setUsageView(final UsageView usageView) {
+ myUsageView = usageView;
+ }
+
+ public Configuration getConfiguration() {
+ return myConfiguration;
+ }
+
+ public SearchCommand getCommand() {
+ if (myCommand == null) myCommand = createCommand();
+ return myCommand;
+ }
+
+ protected SearchCommand createCommand() {
+ return new SearchCommand(mySearchContext.getProject(), this);
+ }
+
+ protected String _getPresentableText() {
+ return myConfiguration.getMatchOptions().getSearchPattern();
+ }
+
+ public UsageTarget getTarget() {
+ return new MyUsageTarget(_getPresentableText());
+ }
+
+ public void configure(@NotNull UsageViewPresentation presentation) {
+ String s = _getPresentableText();
+ if (s.length() > 15) s = s.substring(0,15) + "...";
+ final String usagesString = SSRBundle.message("occurrences.of", s);
+ presentation.setUsagesString(usagesString);
+ presentation.setTabText(StringUtil.capitalize(usagesString));
+ presentation.setUsagesWord(SSRBundle.message("occurrence"));
+ presentation.setCodeUsagesString(SSRBundle.message("found.occurrences"));
+ }
+
+ protected void configureActions() {}
+
+ private class MyUsageTarget implements ConfigurableUsageTarget,ItemPresentation, TypeSafeDataProvider {
+ private final String myPresentableText;
+
+ MyUsageTarget(String str) {
+ myPresentableText = str;
+ }
+
+ @Override
+ public String getPresentableText() {
+ return myPresentableText;
+ }
+
+ @Override
+ public String getLocationString() {
+ //noinspection HardCodedStringLiteral
+ return "Do Not Know Where";
+ }
+
+ @Override
+ public Icon getIcon(boolean open) {
+ return null;
+ }
+
+ @Override
+ public void findUsages() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void findUsagesInEditor(@NotNull FileEditor editor) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public void highlightUsages(@NotNull PsiFile file, @NotNull Editor editor, boolean clearHighlights) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean isValid() {
+ return true;
+ }
+
+ @Override
+ public boolean isReadOnly() {
+ return true;
+ }
+
+ @Override
+ public VirtualFile[] getFiles() {
+ return null;
+ }
+
+ @Override
+ public void update() {
+ }
+
+ @Override
+ public String getName() {
+ //noinspection HardCodedStringLiteral
+ return "my name";
+ }
+
+ @Override
+ public ItemPresentation getPresentation() {
+ return this;
+ }
+
+ @Override
+ public void navigate(boolean requestFocus) {
+ throw new UnsupportedOperationException();
+ }
+
+ @Override
+ public boolean canNavigate() {
+ return false;
+ }
+
+ @Override
+ public boolean canNavigateToSource() {
+ return false;
+ }
+
+ @Override
+ public void showSettings() {
+ UIUtil.invokeAction(myConfiguration, mySearchContext);
+ }
+
+ @Override
+ public KeyboardShortcut getShortcut() {
+ return ActionManager.getInstance().getKeyboardShortcut(getCommand() instanceof ReplaceCommand ? "StructuralSearchPlugin.StructuralReplaceAction":"StructuralSearchPlugin.StructuralSearchAction");
+ }
+
+ @NotNull
+ @Override
+ public String getLongDescriptiveName() {
+ return _getPresentableText();
+ }
+
+ @Override
+ public void calcData(DataKey key, DataSink sink) {
+ if (key == UsageView.USAGE_SCOPE) {
+ sink.put(UsageView.USAGE_SCOPE, GlobalSearchScope.allScope(mySearchContext.getProject()));
+ }
+ }
+ }
+}