idea插件开发之Java子类继承父类
来源:互联网 发布:手机知乎怎么复制 编辑:程序博客网 时间:2024/06/05 20:08
开发工具:IntelliJ IDEA
开发语言:Kotlin
当前代码的用场就是制作类似于gsonformat的工具 可以根据json生成对应的实体类
或者是根据数据库映射成对应的实体类对象
lateinit var factory: PsiElementFactory//element工厂 包括生成控制 类,方法,变量 lateinit var project: Project override fun actionPerformed(event: AnActionEvent?) { project = event!!.project!! factory = JavaPsiFacade.getInstance(project).elementFactory var editor = event.getData(DataKeys.EDITOR)!! var psiFile = PsiUtilBase.getPsiFileInEditor(editor, project)!! var psiClass = (psiFile as PsiJavaFile).classes[0] write(psiClass); }
actionPerformed 是事件触发的时候调用的方法
event: AnActionEvent? 这个变量可以获取 idea工具当前触发的 窗口,文件,类,路径等
下面就是创建子类并且继承父类的核心代码
/** * 创建子类 * className:子类的名称 * parent:父类 */ fun createChildClass(className:String,parent: PsiClass): PsiClass { var childClazz=factory.createClass(className) //查询父类的范围 var scope= GlobalSearchScope.fileScope(parent.containingFile) //父类的类型 var parentType= PsiClassType.getTypeByName(parent.name,project,scope) //继承父类的类型 childClazz.getExtendsList()!!.add(factory.createReferenceElementByType(parentType)); return childClazz } /** * 创建一个父类 */ fun createParentClass(className:String):PsiClass{ var parentClass=factory.createClass(className) return parentClass }
上面两个是创建父类跟子类的方法
/** * 写入到编辑器里面 * */ fun write(psiClass: PsiClass) { //必须在当前的action里面写入添加事件才能写入到idea中 否则会报错 WriteCommandAction.runWriteCommandAction(project, object:Runnable { override fun run() { var parentClass=createParentClass("Animal") var childClass=createChildClass("Dog",parentClass) psiClass.add(parentClass) psiClass.add(childClass) } }); }
全部代码:
import com.intellij.openapi.actionSystem.AnActionimport com.intellij.openapi.actionSystem.AnActionEventimport com.intellij.openapi.actionSystem.DataKeysimport com.intellij.openapi.command.WriteCommandActionimport com.intellij.openapi.project.Projectimport com.intellij.psi.*import com.intellij.psi.search.GlobalSearchScopeimport com.intellij.psi.util.PsiUtilBaseclass Test():AnAction() { lateinit var factory: PsiElementFactory lateinit var project: Project override fun actionPerformed(event: AnActionEvent?) { project = event!!.project!! factory = JavaPsiFacade.getInstance(project).elementFactory var editor = event.getData(DataKeys.EDITOR)!! var psiFile = PsiUtilBase.getPsiFileInEditor(editor, project)!! var psiClass = (psiFile as PsiJavaFile).classes[0] write(psiClass); } /** * 创建子类 */ fun createChildClass(className:String,parent: PsiClass): PsiClass { var childClazz=factory.createClass(className) //查询父类的范围 var scope= GlobalSearchScope.fileScope(parent.containingFile) //父类的类型 var parentType= PsiClassType.getTypeByName(parent.name,project,scope) //继承父类的类型 childClazz.getExtendsList()!!.add(factory.createReferenceElementByType(parentType)); return childClazz } /** * 写入 * */ fun write(psiClass: PsiClass) { WriteCommandAction.runWriteCommandAction(project, object:Runnable { override fun run() { var parentClass=createParentClass("Animal") var childClass=createChildClass("Dog",parentClass) psiClass.add(parentClass) psiClass.add(childClass) } }); } /** * 创建一个父类 */ fun createParentClass(className:String):PsiClass{ var parentClass=factory.createClass(className) return parentClass }}
最终运行结果:
阅读全文
0 0
- idea插件开发之Java子类继承父类
- Java子类继承父类
- java子类继承父类
- java 子类继承父类 -- 重写、覆盖
- JAVA 继承 父类子类 内存分配
- java 子类继承父类运行顺序
- JAVA 继承 父类子类 内存分配
- JAVA 继承 父类子类 内存分配
- Java子类与父类的继承
- JAVA 继承 父类子类 内存分配
- java 子类继承父类运行顺序
- 子类继承父类
- 子类继承父类
- 子类继承父类
- 子类继承父类
- 子类继承父类
- 子类继承父类
- java中的继承-子类继承父类的权限问题
- upc 3795 食物链(邻接表+记忆dfs)
- atcoder 062D
- 网易2018秋招Java开发岗编程题
- TCP传输大文件(图片、文档)
- 预解释是一种毫无节操的机制(1-1-4)
- idea插件开发之Java子类继承父类
- 洛谷 P1090 合并果子
- 【剑指offer】替换空格问题
- Socket网络编程简单实例Demo,文件传输。
- JS事件委托
- 计蒜客 矩阵变换 (bfs+set)
- vld内存泄漏检查工具不能显示内存泄漏文件名与行号
- 线程池-invokeAll的使用
- java内存溢出问题处理