idea插件开发之Java子类继承父类
2017-08-28 18:35
1196 查看
开发工具: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.AnAction import com.intellij.openapi.actionSystem.AnActionEvent import com.intellij.openapi.actionSystem.DataKeys import com.intellij.openapi.command.WriteCommandAction import com.intellij.openapi.project.Project import com.intellij.psi.* import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.util.PsiUtilBase class 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 } }
最终运行结果:
相关文章推荐
- java中子类继承父类时是否继承构造函数呢?
- JAVA 子类继承父类的构造函数的重载
- java中,子类能不能继承父类的构造方法?
- java中子类继承父类时是否继承构造函数
- java继承时,实例化子类,是否会默认调用父类构造方法
- java中子类继承父类时是否继承构造函数
- Java 中子类是否只继承父类的非私有变量和方法?
- java 子类继承父类 -- 重写、覆盖
- Java 中子类继承父类,执行顺序
- JAVA中子类继承父类中哪些成员
- Java继承中父类子类构造方法、静态代码块、非静态代码块的执行顺序
- java类继承中父类调用子类函数的问题
- Java中在从父类中继承的成员变量在子类改变,怎么父类(super.num)的成员也一起改变?
- java中子类继承了父类的哪些成员
- java中子类继承父类,程序运行顺序
- java 子类可以继承父类中的什么,子类中方法覆盖,final关键字的含义
- java中子类继承父类时是否继承构造函数
- Java对象的构造过程---子类继承父类时(非)静态块及构造函数等的执行顺序
- java 中子类如何实现对父类私有域的继承
- 多态的三个条件: 1、要有继承 2、要有重写 3、父类引用指向子类对象----java