我尝试从Kotlin文件(PsiFile实例为KtFile)获得PsiClass,但是没有得到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;
}
}
PsiClass
仅用于java classes。对于Kotlin,您应该使用KtClass。