2017-01-17 97 views
3

我想爲Intellij IDEA編寫一個插件,它應該修改Java和Kotlin代碼。修改Kotlin類

我使用的方法

PsiClass.getMethods() 

爲了獲得Java和科特林類的所有方法。到目前爲止好,所以後來我用像

PsiClass.add(), PsiClass.addAfter(), PsiClass.addBefore() 

,所有做工精細,一旦他們被稱爲上的Java文件的方法,但開始拋出一個異常

IncorrectOperationException 

一次我打電話給他們在科特林類。

我很欣賞任何關於如何修改Kotlin和Java類的提示(最好使用相同的方法)。

回答

4

當您通過JavaPsiFacade搜索Kotlin類時,它將返回淺色表示,它只是基於類文件中的信息。爲了添加PSI元素,您必須在其上調用navigationElement。然後,IJ將解析源代碼並構建一個可以修改的完整PSI樹。

但是,如果該類是Kotlin類,navigationElement將返回KtClass而不是從PsiClass派生。您將不得不使用Kotlin層次結構中的工具對其進行修改。 Kotlin中的方法實例也不是PsiMethod的實例,而是KtMethod的實例。

爲了以一種通用的方式分析Java和Kotlin源文件,有一種名爲「UAST」的不同語法樹,但對於修改,您需要特定於語言的方法。

+0

你的建議似乎工作。謝謝!你能建議一些資源,我可以找到更多的關於這個話題?我還沒有在JetBrain網站的教程http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started.html上找到這些信息。 – Andrew

+0

我想你將不得不看看IJ和Kotlin的源代碼。 –