各种create/add

这篇博客详细介绍了在Java代码中进行的各种操作,包括使用RefactoringFactory创建重命名,通过FileContentUtil重新解析文件,为方法添加调用,向方法和类中插入语句、字段和导入语句,创建和编辑文件,添加方法参数,修改方法体,以及添加注释。这些操作对于代码维护和自动化工具开发至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.create rename:      RefactoringFactory.createRename()

2.重新build  virtualFile对应的PsiFile           :  FileContentUtil.reparseFiles()

3.为某个方法,增加文本;比如:public void onClick(View v){},插件生成了个方法叫doClick(View v)(参考AccountSDKUtil)。生成后在onClick中添加这个方法的调用

 fun addStatementElementToMethodIfNotExist(text:String,method:PsiMethod,factory:PsiElementFactory){

        var add = factory.createStatementFromText(text,null)

        var has = method.body?.children?.filter {

            it.text == add.text

        }?:return

        if(has.size == 0){

            method.body!!.add(add)

        }

    }

var onClick = mClassOpt!!.findMethodsByName("onClick",true)

        if(onClick.size>0){

            var clickMethod = onClick[0] //粗糙的按这个类中只有一个onClick方法来算

            var param = clickMethod.parameters[0].name

            PsiElementUtil.addStatementElementToMethodIfNotExist("doClick($param);",clickMethod,factory)

        }

4.psiClass add method:  mClassOpt!!.add(factory.createMethodFromText("method text"))

5.psiClass add field :    mClassOpt!!.add(factory.createFieldFromText("private $type $fieldName;", null))

6.psiClass add improt: 

 val importList = (mClassOpt!!.containingFile as PsiJavaFile).importList

                        if(importList!!.findSingleClassImportStatement(clazz.qualifiedName) == null){

                            importList?.add(factory.createImportStatement(clazz))

                        }

ps:有些情况下的增加import可以使用另一个逻辑完成,就是当添加代码的时候,直接使用类型的全路径修饰,比如Button btn  -> android.weight.Button。如此本身就不用增加import

然后使用JavaCodeStyleManager shortenClassReferences 来自动将其改变

7.某个目录下创建一个文件:  virtualFile.createChildData  打开文件:OpenFileDescriptor(action.project!!, mFile!!).navigate(true)

8.某个方法增加注释:  

val document = factory.createDocCommentFromText("/**\n*/")

        document.add(factory.createDocTagFromText("@Description" + " " + model.name + "-" + event.doc))

  document.add(factory.createParamTag(it, "String"))

 psiMethod.addBefore(document, psiMethod.firstChild);

9 方法增加参数:   psiMethod.parameterList.add(factory.createParameterFromText("$parameterType $it", psiMethod))

10 方法重写body:或创建方法后动态构建body:  

1)还是直接createMethod的时候,直接用文本创建这个method,这样的话,不管修饰符 返回值 参数还是body,都可以写好再创建,但有时条件很多,导致最后生成的method的body等都会根据条件不同而不同,所以这个方式虽然依然可以,但是构建会麻烦,且代码很丑。如果方法构成较单一,这个方式就不丑了。

2)var psiMethod = factory.createMethod(event.id!!.toMethod(), PsiType.VOID)

        psiMethod.modifierList.setModifierProperty("public", true)

        psiMethod.modifierList.setModifierProperty("static", true)

        psiMethod.body?.delete() //method原有的body直接删除

        psiMethod.add(factory.createCodeBlockFromText(body.toString(), psiMethod))//将新的block再设置给method。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值