1 package com
.intellij
.ide
.impl
;
3 import com
.intellij
.ide
.SelectInContext
;
4 import com
.intellij
.ide
.SelectInTarget
;
5 import com
.intellij
.openapi
.editor
.Document
;
6 import com
.intellij
.openapi
.fileEditor
.FileDocumentManager
;
7 import com
.intellij
.openapi
.project
.Project
;
8 import com
.intellij
.openapi
.vfs
.VirtualFile
;
9 import com
.intellij
.psi
.*;
10 import org
.jetbrains
.annotations
.NotNull
;
13 public abstract class SelectInTargetPsiWrapper
implements SelectInTarget
{
14 protected final Project myProject
;
16 protected SelectInTargetPsiWrapper(@NotNull final Project project
) {
20 public abstract String
toString();
22 protected abstract boolean canSelect(PsiFileSystemItem file
);
24 public final boolean canSelect(SelectInContext context
) {
25 if (myProject
.isDisposed()) return false;
27 VirtualFile virtualFile
= context
.getVirtualFile();
28 final Document document
= FileDocumentManager
.getInstance().getDocument(virtualFile
);
29 final PsiFileSystemItem psiFile
;
30 if (document
!= null) {
31 psiFile
= PsiDocumentManager
.getInstance(myProject
).getPsiFile(document
);
33 else if (context
.getSelectorInFile() instanceof PsiFile
) {
34 psiFile
= (PsiFile
)context
.getSelectorInFile();
36 else if (virtualFile
.isDirectory()) {
37 psiFile
= PsiManager
.getInstance(myProject
).findDirectory(virtualFile
);
40 psiFile
= PsiManager
.getInstance(myProject
).findFile(virtualFile
);
42 return psiFile
!= null && canSelect(psiFile
) || canWorkWithCustomObjects();
45 public final void selectIn(SelectInContext context
, final boolean requestFocus
) {
46 Object selector
= context
.getSelectorInFile();
47 if (selector
== null) {
48 selector
= PsiManager
.getInstance(myProject
).findFile(context
.getVirtualFile());
51 if (selector
instanceof PsiElement
) {
52 select(((PsiElement
)selector
).getOriginalElement(), requestFocus
);
54 select(selector
, context
.getVirtualFile(), requestFocus
);
58 protected abstract void select(final Object selector
, VirtualFile virtualFile
, final boolean requestFocus
);
60 protected abstract boolean canWorkWithCustomObjects();
62 protected abstract void select(PsiElement element
, boolean requestFocus
);