2017-01-17 11 views
3

Я хотел бы написать плагин для Intellij IDEA, который должен изменить код Java и Kotlin.изменить класс Kotlin

Я использую метод

PsiClass.getMethods() 

для того, чтобы получить все методы Java и Котлин классов. До сих пор так хорошо, так что я использовать такие методы, как

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

, что все работает нормально, как только они называются на Java-файлы, но начинают бросать исключение

IncorrectOperationException 

когда я назвал их на Котлин класс.

Буду признателен за то, как я могу модифицировать классы Kotlin и Java (желательно с использованием того же подхода).

ответ

4

При поиске класса Kotlin с помощью JavaPsiFacade он возвращает класс света, который является неглубоким представлением, основанным только на информации в файле класса. Чтобы добавить элементы PSI, вы должны набрать navigationElement. Затем IJ проанализирует источник и построит полное дерево PSI, которое можно изменить.

Однако, если класс является классом Kotlin, navigationElement вернет KtClass, который не является производным от PsiClass. Вам необходимо будет использовать объекты в иерархии Котлин, чтобы изменить их. В экземплярах метода в Котлине также нет экземпляров PsiMethod, но экземпляры KtMethod.

Для анализа источников Java и Kotlin в общем виде существует другое синтаксическое дерево под названием «UAST», но для модификаций вам нужен языковой подход.

+0

Ваши предложения, похоже, сработают. Спасибо! Не могли бы вы посоветовать некоторый ресурс, где я мог бы узнать больше о теме? Я не нашел такую ​​информацию в учебнике http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started.html сайта JetBrain. – Andrew

+0

Думаю, вам придется посмотреть исходный код IJ и Kotlin. –