@Override public void navigate(Project project) { VirtualFile currentVirtualFile = null; AccessToken accessToken = ReadAction.start(); try { if (!myVirtualFile.isValid()) return; PsiFile psiFile = PsiManager.getInstance(project).findFile(myVirtualFile); if (psiFile != null) { PsiElement navigationElement = psiFile.getNavigationElement(); // Sources may be downloaded. if (navigationElement instanceof PsiFile) { currentVirtualFile = ((PsiFile) navigationElement).getVirtualFile(); } } if (currentVirtualFile == null) { currentVirtualFile = myVirtualFile; } } finally { accessToken.finish(); } new OpenFileHyperlinkInfo(myProject, currentVirtualFile, myLineNumber - 1).navigate(project); }
public void registerReference( @NotNull PsiJavaReference ref, @NotNull JavaResolveResult resolveResult) { PsiElement refElement = resolveResult.getElement(); PsiFile psiFile = refElement == null ? null : refElement.getContainingFile(); if (psiFile != null) psiFile = (PsiFile) psiFile .getNavigationElement(); // look at navigation elements because all references // resolve into Cls elements when highlighting library // source if (refElement != null && psiFile != null && myFile.getViewProvider().equals(psiFile.getViewProvider())) { registerLocalRef(ref, refElement.getNavigationElement()); } PsiElement resolveScope = resolveResult.getCurrentFileResolveScope(); if (resolveScope instanceof PsiImportStatementBase) { registerImportStatement(ref, (PsiImportStatementBase) resolveScope); } }
private static Icon getIconForFile(PsiFile psiFile) { return psiFile.getNavigationElement().getIcon(0); }