【发布时间】:2018-07-11 04:20:36
【问题描述】:
我正在实现一个插件,我需要在其中为现有类添加extends 子句。
我有 PsiClass 实例代表说 MyClass。
有一个 API 允许获取 MyClass 扩展的所有类:
PsiReferenceList extendsList = psiClass.getExtendsList()
从理论上讲,我可以添加一些东西,这会奏效。
问题: PsiReferenceList.add() 消耗 PsiElement,我不知道如何创建一个 PsiElement 的对象,该对象具有我要使用的类的完全限定名称。
更具体地说,如何将字符串com.mycompany.MyAbstractClass 转换为代表此类的PsiElement?
更新: 我设法使用以下逻辑实现了结果:
PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
PsiReferenceList extendsList = aClass.getExtendsList();
PsiShortNamesCache instance = PsiShortNamesCache.getInstance(project);
PsiClass[] abstractClasses = instance.getClassesByName(
"MyAbstractClass",
GlobalSearchScope.allScope(project)
);
PsiJavaCodeReferenceElement referenceElement = factory
.createClassReferenceElement(abstractClasses[0]);
extendsList.add(referenceElement);
它有效,但我想应该有更优化的方法。
【问题讨论】:
-
咨询 IntelliJ IDEA API 问题的最佳地点是development forum。
标签: java intellij-idea jetbrains-ide intellij-plugin