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
}
我刚刚开始我的 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
}