Я разрабатываю плагин и мне нужно изменить метод, который раньше выглядел так:
override fun getLayoutId(): Int {
TODO("not implemented")
}
Я надеюсь, что результат будет таким:
override fun getLayoutId(): Int {
return R.layout.myactivity
}
Теперь я сгенерировал класс KtUltraLightClass
, я пытаюсь изменить его следующим образом:
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)
}
}
, но теперь выдает ошибку:
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.
Скажите, пожалуйста, как его изменить.