Files
openide/source/com/intellij/ide/impl/ProjectViewSelectInTarget.java
Olesya Smirnova 089dd8f342 (no message)
2005-01-17 19:44:09 +03:00

74 lines
2.4 KiB
Java

package com.intellij.ide.impl;
import com.intellij.aspects.psi.PsiAspect;
import com.intellij.aspects.psi.PsiAspectFile;
import com.intellij.ide.SelectInTarget;
import com.intellij.ide.projectView.ProjectView;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.ToolWindowId;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiJavaFile;
public abstract class ProjectViewSelectInTarget implements SelectInTarget {
protected Project myProject;
public ProjectViewSelectInTarget(Project project) {
myProject = project;
}
public void select(PsiElement element, final boolean requestFocus) {
while (true) {
if (element instanceof PsiFile) break;
if (isTopLevelClass(element)) break;
element = element.getParent();
}
if (element instanceof PsiAspectFile) {
PsiAspect[] aspects = ((PsiAspectFile) element).getAspects();
if (aspects.length > 0) {
element = aspects[0];
}
}
else if (element instanceof PsiJavaFile) {
PsiClass[] classes = ((PsiJavaFile)element).getClasses();
if (classes.length > 0) {
element = classes[0];
}
}
final ProjectView projectView = ProjectView.getInstance(myProject);
final PsiElement _element1 = element.getOriginalElement();
ToolWindowManager windowManager=ToolWindowManager.getInstance(myProject);
final Runnable runnable = new Runnable() {
public void run() {
if (requestFocus) {
projectView.changeView(getMinorViewId());
}
projectView.selectPsiElement(_element1, requestFocus);
}
};
if (requestFocus) {
windowManager.getToolWindow(ToolWindowId.PROJECT_VIEW).activate(runnable);
}
else {
runnable.run();
}
}
private boolean isTopLevelClass(final PsiElement element) {
if (!(element instanceof PsiClass)) return false;
final PsiElement parent = element.getParent();
if (!(parent instanceof PsiFile)) return false;
final VirtualFile virtualFile = ((PsiFile)parent).getVirtualFile();
if (virtualFile == null) return false;
return virtualFile.getFileType() == StdFileTypes.JAVA;
}
public String getToolWindowId() {
return ToolWindowId.PROJECT_VIEW;
}
}