diff options
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.java | 59 |
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; + } + } +} |