IntellJj 插件开发 - 所选 java 文件的源代码

IntellJj Plugin Development - source code of selected java file

我刚刚开始我的 IntelliJ 插件开发之旅。 我需要做的是根据所选 java 文件的代码生成一些代码。 我已经设置了环境,我可以成功 运行 我的插件,我只能在 java 文件的上下文菜单上显示我的操作:我不知道如何做的是如何阅读所选文件的代码,其中 "reading" 我的意思是确定字段、方法等。 我可以很好地使用反射 api,但是如何在选择后加载 class?

这是仅显示 java 个文件的菜单条目的当前代码

public class MyConditionalAction extends AnAction {
    public void actionPerformed(AnActionEvent e) {
        DataContext dataContext = e.getDataContext();
        VirtualFile virtualFile = PlatformDataKeys.VIRTUAL_FILE.getData(dataContext);
        Project project = e.getData(PlatformDataKeys.PROJECT);
        //show popup with file path
        Messages.showMessageDialog(project, virtualFile.getPath(), "Information", Messages.getInformationIcon());
    }

    @Override
    public void update(AnActionEvent e) {
        super.update(e);
        determineVisibility(e);

    }

    private void determineVisibility(AnActionEvent e) {
        DataContext dataContext = e.getDataContext();
        VirtualFile virtualFile = PlatformDataKeys.VIRTUAL_FILE.getData(dataContext);
        e.getPresentation().setVisible(isJava(virtualFile));
    }

    private boolean isJava(VirtualFile file) {
        if (file == null) {
            return false;
        }
        return JavaFileType.INSTANCE.equals(file.getFileType());
    }

感谢任何帮助

你不能使用反射,因为正在编辑的类没有被编译并且没有加载到IntelliJ IDEA JVM中。相反,您需要使用 PSI API.

PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE);
if (psiFile instanceof PsiJavaFile) {
    PsiClass[] classes = ((PsiJavaFile) psiFile).getClasses();
    // and so on
}