summaryrefslogtreecommitdiff
path: root/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchContext.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchContext.java')
-rw-r--r--platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchContext.java59
1 files changed, 59 insertions, 0 deletions
diff --git a/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchContext.java b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchContext.java
new file mode 100644
index 000000000000..62371e7e29d1
--- /dev/null
+++ b/platform/structuralsearch/source/com/intellij/structuralsearch/plugin/ui/SearchContext.java
@@ -0,0 +1,59 @@
+package com.intellij.structuralsearch.plugin.ui;
+
+import com.intellij.openapi.actionSystem.CommonDataKeys;
+import com.intellij.openapi.actionSystem.DataContext;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.fileEditor.FileEditorManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.project.ProjectManager;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiManager;
+import com.intellij.structuralsearch.impl.matcher.DataProvider;
+
+/**
+ * Context of the search to be done
+ */
+public final class SearchContext implements DataProvider, Cloneable {
+ private final PsiFile file;
+ private final Project project;
+
+ private SearchContext(Project project, PsiFile file) {
+ this.project = project;
+ this.file = file;
+ }
+
+ public PsiFile getFile() {
+ return file;
+ }
+
+ public Project getProject() {
+ return project;
+ }
+
+ public static SearchContext buildFromDataContext(DataContext context) {
+ Project project = CommonDataKeys.PROJECT.getData(context);
+ if (project == null) {
+ project = ProjectManager.getInstance().getDefaultProject();
+ }
+
+ PsiFile file = CommonDataKeys.PSI_FILE.getData(context);
+ final VirtualFile vFile = CommonDataKeys.VIRTUAL_FILE.getData(context);
+ if (vFile != null && (file == null || !vFile.equals(file.getContainingFile().getVirtualFile()))) {
+ file = PsiManager.getInstance(project).findFile(vFile);
+ }
+ return new SearchContext(project, file);
+ }
+
+ public Editor getEditor() {
+ return FileEditorManager.getInstance(project).getSelectedTextEditor();
+ }
+
+ protected Object clone() {
+ try {
+ return super.clone();
+ } catch(CloneNotSupportedException ex) {
+ return null;
+ }
+ }
+}