Goland插件开发之使用Psi
前言
在工作中希望能够获取Model层中PO(Persistent Object)的一些信息,进而进行一些导出之类的操作。之前考虑过通过启动项目对struct进行加载,但是这种方式不够灵活每次启动编译有点慢,于是就转向了Goland插件的形式。
依赖引入
需要在plugin.xml中加入如下依赖:
1 | <depends>com.intellij.modules.go</depends> |
获取PsiFile
由于功能是集成在菜单中,可以通过AnActionEvent获取到Psi信息
1 | event.getData(CommonDataKeys.PSI_FILE); |
通过PsiFile获取文件中定义的结构体GoStructType
psiFile中的accept方法可以对文件的结构进行遍历,通过重写visitStructType方法即可遍历文件中所有的结构体
1 | psiFile.accept(new GoRecursiveVisitor() { |
获取Field信息
获取GoFieldDeclaration
对上面获取到的GoStructuralType调用getFieldDeclarationList()方法即可获取GoFieldDeclaration对象
1 | goStructType.getFieldDeclarationList(); |
获取Field类型
1 | declaration.getType().getText(); |
通过GoFieldDeclaration获取Identifier对象
对获取到的GoFieldDeclaration进行如下操作即可获取对应的Identifier
1 | Indentifier identifier = declaration.getFieldDefinitionList().get(0).getIdentifier(); |
获取Field name
1 | identifier.getText(); |
获取Tag信息
获取到Tag的文本,通过正则表达式提取信息就很方便了
1 | identifier.getTagText(); |
获取Field注释
目前没有找到优雅的获取Field注释的方式,下面提供一个小demo。即获取struct定义的文本,通过按行切分文本内容,然后正则提取。
1 | String structText = goStructType.getText(); |
Goland插件开发之使用Psi
https://www.huihongcloud.com/2021/08/15/goland/Goland插件开发之使用Psi/