public void selectElementAtCaret()

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);
        }
    }