how to modify a KtUltraLightClass?

hello, I'm development a plug-in and need to modify a method that previously looked like this:
···
override fun getLayoutId(): Int {
TODO("not implemented")
}
···

I hope the result is this:

···

override fun getLayoutId(): Int {
return R.layout.myactivity

···

 

now i generated class is a KtUltraLightClass,

I'm trying to modify it like this:

···

if (activityClass is KtUltraLightClass){
activityClass.kotlinOrigin.findFunctionByName("getLayoutId")
activityClass.ownMethods.find {
it.name=="getLayoutId"
}?.let {
val fieldName = AndroidResourceUtil.getRJavaFieldName(FileUtil.getNameWithoutExtension(layoutFileName))
val layoutFieldRef = "$appPackage.R.layout.$fieldName"
getKtStatement(it, layoutFieldRef, false)
}
}


fun getKtStatement(method: PsiMethod, layoutFieldRef: String, isJava: Boolean) {
val project = method.project
WriteCommandAction.writeCommandAction(project, method.containingFile).run<Throwable> {
val newStatement = PsiElementFactory.getInstance(project).createStatementFromText(
"return $layoutFieldRef${if (isJava) ";" else ""}", method)
method.add(newStatement)
JavaCodeStyleManager.getInstance(project).shortenClassReferences(method)
CodeStyleManager.getInstance(project).reformat(method)
}
}

···

 

but now throw a error:

com.intellij.util.IncorrectOperationException: org.jetbrains.kotlin.asJava.classes.KtUltraLightMethodForSourceDeclaration
at com.intellij.psi.impl.light.LightElement.add(LightElement.java:139)
at com.longforus.mvpautocodeplus.maker.LayoutCreatorKt$getKtStatement$1.run(LayoutCreator.kt:104)
at com.intellij.openapi.command.WriteCommandAction$BuilderImpl$1.run(WriteCommandAction.java:125)
at com.intellij.openapi.application.RunResult.run(RunResult.java:35)
at com.intellij.openapi.command.WriteCommandAction.lambda$null$1(WriteCommandAction.java:264)
at com.intellij.openapi.application.impl.ApplicationImpl.runWriteAction(ApplicationImpl.java:994)
at com.intellij.openapi.command.WriteCommandAction.lambda$performWriteCommandAction$2(WriteCommandAction.java:263)
at com.intellij.openapi.command.WriteCommandAction.lambda$doExecuteCommand$4(WriteCommandAction.java:320)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:220)
at com.intellij.openapi.command.impl.CoreCommandProcessor.executeCommand(CoreCommandProcessor.java:188)
at com.intellij.openapi.command.WriteCommandAction.doExecuteCommand(WriteCommandAction.java:322)
at com.intellij.openapi.command.WriteCommandAction.performWriteCommandAction(WriteCommandAction.java:263)
at com.intellij.openapi.command.WriteCommandAction.execute(WriteCommandAction.java:245)
at com.intellij.openapi.command.WriteCommandAction$BuilderImpl.run(WriteCommandAction.java:127)
at com.longforus.mvpautocodeplus.maker.LayoutCreatorKt.getKtStatement(LayoutCreator.kt:101)
at com.longforus.mvpautocodeplus.maker.LayoutCreatorKt.createLayoutFileForActivityOrFragment(LayoutCreator.kt:73)
at com.longforus.mvpautocodeplus.maker.LayoutCreatorKt$doCreateLayoutFile$1.run(LayoutCreator.kt:39)
at com.intellij.openapi.application.TransactionGuardImpl$2.run(TransactionGuardImpl.java:312)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.doRun(LaterInvocator.java:433)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.runNextEvent(LaterInvocator.java:416)
at com.intellij.openapi.application.impl.LaterInvocator$FlushQueue.run(LaterInvocator.java:399)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764)
at java.awt.EventQueue.access$500(EventQueue.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:715)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:734)
at com.intellij.ide.IdeEventQueue.defaultDispatchEvent(IdeEventQueue.java:873)
at com.intellij.ide.IdeEventQueue._dispatchEvent(IdeEventQueue.java:822)
at com.intellij.ide.IdeEventQueue.lambda$dispatchEvent$8(IdeEventQueue.java:461)
at com.intellij.openapi.progress.impl.CoreProgressManager.computePrioritized(CoreProgressManager.java:704)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:460)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

 

 

Please tell me how to modify it.

0

请先登录再写评论。