MVPArmsHelper插件编写代码编写(二)
大约 1 分钟
####导航 MVPArmsHelper 网络代码自动生成插件MVPArmsHelper插件编写环境配置(一)MVPArmsHelper插件编写代码编写(二)
####一、插件编写流程 1、触发Action事件,获得复制内容(见上一) 2、弹框补充信息 3、生成对应模板信息 4、动态插入文件
####一、弹框补充对应信息 新建--》GUI Form 生成文件继承JFrame 如安卓代码一般编写 拖拽的时候自动生成控件ID
####二、生成对应模板信息类
详见ArmsConstant.java
三、动态插入文件 核心是PSI 程序结构接口,通俗讲java像xml一样解析 http://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview/psi.html?search=Psi
修改project文件 常见三个点 1、寻找文件 2、java文件加载、解析、 3、新文件写入内容(非java)
1、寻找文件
//api
FilenameIndex.getFilesByName(project, name, scope);
//真实封装
public static PsiFile getFileByName(PsiFile psiFile, String fileName) {
Project project = psiFile.getProject();
PsiFile[] psiFiles = FilenameIndex.getFilesByName(project, fileName, new EverythingGlobalScope(psiFile.getProject()));
if (psiFiles.length != 0) {
return psiFiles[0];
}
return null;
}
2、java文件加载、解析、
//psiFile转psiClass
public static PsiClass getPsiClass(PsiFile psiFile) {
String fullName = psiFile.getName();
String className = fullName.split("\.")[0];
PsiClass[] psiClasses = PsiShortNamesCache.getInstance(psiFile.getProject()).getClassesByName(className, new EverythingGlobalScope(psiFile.getProject()));
return psiClasses[0];
}
//插入文件
PsiElementFactory factory = PsiFileUtils.getFactory(psiFile);
String content = ArmConstant.getPageContractView(entity);
psiClass.add(factory.createMethodFromText(content,psiClass));
//新建文件写入
directory.createFile(entity.getClearResponseBean()+".java");
PsiFile file = directory.findFile(entity.getClearResponseBean()+".java");
VirtualFile vf= file.getVirtualFile();
String content = ArmConstant.getBeanStr(entity);
ToastUtil.show(content);
try {
vf.setBinaryContent(content.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
####部署 编译后可以生成插件
####github 代码 https://github.com/yinlingchaoliu/MVPArmsNetworkHelper