in src/main/java/idea/plugin/psiviewer/view/PsiViewerPanel.java [344:389]
public void selectElementAtCaret(@Nullable Editor editor, @Nullable String changeSource)
{
if (editor == null) {
debug("selectElementAtCaret: Can't select element, editor is null");
return;
}
PsiFile psiFile = PsiDocumentManager.getInstance(_project).getPsiFile(editor.getDocument());
PsiElement elementAtCaret = null;
if (psiFile != null)
{
Language selectedLanguage = _projectComponent.getSelectedLanguage();
FileViewProvider viewProvider = psiFile.getViewProvider();
if (selectedLanguage != null)
{
PsiFile selectedRoot = viewProvider.getPsi(selectedLanguage);
if (selectedRoot == null)
{
selectedLanguage = null;
}
}
if (selectedLanguage == null)
{
selectedLanguage = psiFile.getLanguage();
}
elementAtCaret = viewProvider.findElementAt(editor.getCaretModel().getOffset(), selectedLanguage);
if (elementAtCaret != null && elementAtCaret.getParent() != null)
{
if (elementAtCaret.getParent().getChildren().length == 0)
elementAtCaret = elementAtCaret.getParent();
}
}
if (elementAtCaret != null && elementAtCaret != getSelectedElement())
{
debug("new element at caret " + elementAtCaret + ", current root=" + getRootElement());
if (!PsiTreeUtil.isAncestor(getRootElement(), elementAtCaret, false))
selectRootElement(psiFile, TITLE_PREFIX_CURRENT_FILE);
setSelectedElement(elementAtCaret, changeSource == null ? PsiViewerPanel.CARET_MOVED : changeSource);
}
}