Создайте новый PSIClass с параметрами универсального типа.

Вопрос новичка о разработке плагина IntelliJ.

Мне нужно сгенерировать параметризованный класс (класс с дженериками) с учетом имени класса и имени параметра типа, но я не могу найти, как это сделать?

Кажется, PSIClass не поддерживает дженерики.

Пример

Данный

String className = "MyClass";
String typeName = "T"

Я хотел бы иметь PSIClass, который представляет это:

public class MyClass<T> { ... }

Цель состоит в том, чтобы динамически добавлять методы в такой класс и в конечном итоге записывать весь класс в файл. Класс должен объявить переменную типа, потому что некоторые методы будут получать/возвращать T

Спасибо!


person afcastano    schedule 19.02.2017    source источник
comment
PsiClass расширяет PsiTypeParameterListOwner, что вам и нужно.   -  person Bastien Jansen    schedule 19.02.2017
comment
PsiTypeParameterListOwner имеет методы для доступа к параметрам типа, но как я могу создать PsiTypeParametrListOwner ?   -  person afcastano    schedule 20.02.2017
comment
Ну, трудно сказать, что вам действительно нужно. Вам нужно создать новый файл, содержащий этот класс, или вам специально нужен экземпляр PsiClass? Не могли бы вы предоставить немного больше контекста?   -  person Bastien Jansen    schedule 20.02.2017
comment
Конечно, я немного отредактировал описание проблемы. По сути, мне нужен PsiClass, к которому я могу добавить методы и в конечном итоге записать его в файл. Класс должен объявить переменную типа T, потому что некоторые методы будут получать/возвращать T. Спасибо!   -  person afcastano    schedule 20.02.2017


Ответы (1)


Я нашел решение на форумах разработчиков IntelliJ. Это не кажется самым аккуратным, но это работает.

Я бы рекомендовал использовать PsiFileFactory.getInstance(...).createFileFromText("ClassName.java", JavaFileType.INSTANCE, "class ClassName {...}"), привести результат к PsiJavaFile и использовать его getClasses[0] в результате.

Вот ссылка на ветку:

https://intellij-support.jetbrains.com/hc/en-us/community/posts/115000089970-Create-a-new-PSIClass-with-Generic-type-parameters?page=1#community_comment_115000122164

person afcastano    schedule 22.02.2017