我们可以通过具体的PsiElement的getContainingClass()方法来获取PsiClass,但是这是有前提条件的,就是鼠标光标如果在方法上,则需要先将PsiElement转换成PsiMethodImpl,然后调用getContainingClass,同理,如果鼠标在其他地方,则需要先将其转换成指定的PsiElement具体实现才行,为了避免这种if判断的行为,本文下面的代码将展示:
鼠标光标在任意位置,都可以获取到PsiClass,这是通过PsiFile做到的
public class MyAction extends AnAction {
@Override
public void actionPerformed(@NotNull AnActionEvent e) {
PsiFile psiFile = e.getData(PlatformDataKeys.PSI_FILE);
FileASTNode node = psiFile.getNode();
PsiElement psi = node.getPsi();
PsiJavaFile pp=(PsiJavaFile) psi;
PsiClass[] classes = pp.getClasses();
for (PsiClass aClass : classes) {
// 此处即可获得当前文件的PsiClass
System.out.println(aClass.getName());
}
}
}