Почему я не могу получить PsiClass от Kotlin, но успешно в Java - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь получить PsiClass из файла Kotlin (экземпляр PsiFile - KtFile), но всегда получает значение NULL, в случае Java успешно.

    PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
    Editor editor = e.getData(CommonDataKeys.EDITOR);

    // null in kotlin
    PsiClass psiClass = getPsiClass(editor, psiFile);

    .....    

    private PsiClass getPsiClass(Editor editor, PsiFile file) {

        int offset = editor.getCaretModel().getOffset();
        PsiElement element = file.findElementAt(offset);

        if (element == null)
            element = file.findElementAt(offset - 1);
        if (element == null) {
            return null;
        } else {
            PsiClass target = (PsiClass) PsiTreeUtil.getParentOfType(element, PsiClass.class);
            if (target == null) {
                element = file.findElementAt(offset - 1);
                if (element == null)
                    return null;
                target = (PsiClass) PsiTreeUtil.getParentOfType(element, PsiClass.class);
            }
            return target instanceof SyntheticElement ? null : target;
        }
    }

1 Ответ

0 голосов
/ 26 сентября 2019

PsiClass используется только для классов Java .Для Kotlin вы должны использовать KtClass .

...