diff --git a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java index 4c6e72e68f83..acb1de464739 100644 --- a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java +++ b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesViewSelectInTarget.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.ide.favoritesTreeView; import com.intellij.ide.SelectInManager; @@ -26,10 +25,9 @@ import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowId; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.psi.*; -import com.intellij.psi.util.PsiUtilBase; +import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * @author anna @@ -51,33 +49,19 @@ public class FavoritesViewSelectInTarget extends SelectInTargetPsiWrapper { @Override protected void select(Object selector, VirtualFile virtualFile, boolean requestFocus) { - select(myProject, selector, null, null, virtualFile, requestFocus); + select(myProject, selector, virtualFile, requestFocus); } @Override protected void select(PsiElement element, boolean requestFocus) { - PsiElement toSelect = null; - if (element instanceof PsiFile || element instanceof PsiDirectory) { - toSelect = element; + PsiElement toSelect = findElementToSelect(element, null); + if (toSelect != null) { + VirtualFile virtualFile = PsiUtilCore.getVirtualFile(toSelect); + select(toSelect, virtualFile, requestFocus); } - else { - final PsiFile containingFile = element.getContainingFile(); - if (containingFile == null) return; - final FileViewProvider viewProvider = containingFile.getViewProvider(); - toSelect = viewProvider.getPsi(viewProvider.getBaseLanguage()); - } - if (toSelect == null) return; - PsiElement originalElement = toSelect.getOriginalElement(); - final VirtualFile virtualFile = PsiUtilBase.getVirtualFile(originalElement); - select(originalElement, virtualFile, requestFocus); } - public static ActionCallback select(@NotNull Project project, - final Object toSelect, - @Nullable final String viewId, - @Nullable final String subviewId, - final VirtualFile virtualFile, - final boolean requestFocus) { + private static ActionCallback select(@NotNull Project project, Object toSelect, VirtualFile virtualFile, boolean requestFocus) { final ActionCallback result = new ActionCallback(); ToolWindowManager windowManager = ToolWindowManager.getInstance(project); @@ -127,4 +111,4 @@ public class FavoritesViewSelectInTarget extends SelectInTargetPsiWrapper { protected boolean canWorkWithCustomObjects() { return false; } -} +} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/ide/impl/ProjectViewSelectInTarget.java b/platform/lang-impl/src/com/intellij/ide/impl/ProjectViewSelectInTarget.java index b05a10152c0e..497faa0b474e 100644 --- a/platform/lang-impl/src/com/intellij/ide/impl/ProjectViewSelectInTarget.java +++ b/platform/lang-impl/src/com/intellij/ide/impl/ProjectViewSelectInTarget.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.ide.impl; import com.intellij.ide.CompositeSelectInTarget; @@ -27,15 +26,15 @@ import com.intellij.ide.projectView.impl.ProjectViewPane; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.DumbService; -import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.ToolWindow; import com.intellij.openapi.wm.ToolWindowId; import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.psi.*; -import com.intellij.psi.util.PsiUtilBase; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFileSystemItem; +import com.intellij.psi.util.PsiUtilCore; import com.intellij.util.ObjectUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -65,7 +64,6 @@ public abstract class ProjectViewSelectInTarget extends SelectInTargetPsiWrapper final boolean requestFocus) { final ActionCallback result = new ActionCallback(); - final ProjectView projectView = ProjectView.getInstance(project); if (ApplicationManager.getApplication().isUnitTestMode()) { AbstractProjectViewPane pane = projectView.getProjectViewPaneById(ProjectViewPane.ID); @@ -95,7 +93,6 @@ public abstract class ProjectViewSelectInTarget extends SelectInTargetPsiWrapper return result; } - @Override @NotNull public Collection getSubTargets(@NotNull SelectInContext context) { @@ -131,27 +128,13 @@ public abstract class ProjectViewSelectInTarget extends SelectInTargetPsiWrapper } if (toSelect != null) break; } - if (toSelect == null) { - if (element instanceof PsiFile || element instanceof PsiDirectory) { - toSelect = element; - } - else { - final PsiFile containingFile = element.getContainingFile(); - if (containingFile == null) return; - final FileViewProvider viewProvider = containingFile.getViewProvider(); - toSelect = viewProvider.getPsi(viewProvider.getBaseLanguage()); - } + + toSelect = findElementToSelect(element, toSelect); + + if (toSelect != null) { + VirtualFile virtualFile = PsiUtilCore.getVirtualFile(toSelect); + select(toSelect, virtualFile, requestFocus); } - if (toSelect == null) return; - PsiElement originalElement; - try { - originalElement = toSelect.getOriginalElement(); - } - catch (IndexNotReadyException e) { - originalElement = toSelect; - } - final VirtualFile virtualFile = PsiUtilBase.getVirtualFile(originalElement); - select(originalElement, virtualFile, requestFocus); } private TreeStructureProvider[] getProvidersDumbAware() { @@ -177,4 +160,4 @@ public abstract class ProjectViewSelectInTarget extends SelectInTargetPsiWrapper public final String getSubId() { return mySubId; } -} +} \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/ide/impl/SelectInTargetPsiWrapper.java b/platform/lang-impl/src/com/intellij/ide/impl/SelectInTargetPsiWrapper.java index 234a729c29fc..bad62d6bbf9d 100644 --- a/platform/lang-impl/src/com/intellij/ide/impl/SelectInTargetPsiWrapper.java +++ b/platform/lang-impl/src/com/intellij/ide/impl/SelectInTargetPsiWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,20 +13,19 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package com.intellij.ide.impl; import com.intellij.ide.SelectInContext; import com.intellij.ide.SelectInTarget; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; +import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; - public abstract class SelectInTargetPsiWrapper implements SelectInTarget { protected final Project myProject; @@ -99,4 +98,35 @@ public abstract class SelectInTargetPsiWrapper implements SelectInTarget { protected abstract boolean canWorkWithCustomObjects(); protected abstract void select(PsiElement element, boolean requestFocus); -} + + @Nullable + protected static PsiElement findElementToSelect(PsiElement element, PsiElement candidate) { + PsiElement toSelect = candidate; + + if (toSelect == null) { + if (element instanceof PsiFile || element instanceof PsiDirectory) { + toSelect = element; + } + else { + PsiFile containingFile = element.getContainingFile(); + if (containingFile != null) { + FileViewProvider viewProvider = containingFile.getViewProvider(); + toSelect = viewProvider.getPsi(viewProvider.getBaseLanguage()); + } + } + } + + if (toSelect != null) { + PsiElement originalElement = null; + try { + originalElement = toSelect.getOriginalElement(); + } + catch (IndexNotReadyException ignored) { } + if (originalElement != null) { + toSelect = originalElement; + } + } + + return toSelect; + } +} \ No newline at end of file