IntelliJ 插件开发:在 class 中的所有字段之后插入新代码
IntelliJ Plugin Development: insert new code after all fields within a class
我正在开发一个在 class.
中生成方法的插件
问题是我生成的代码被随机插入到其他字段和方法之间。例如。我有 4 个字段,我的方法被插入到第二个和第三个字段之间,将字段部分分成两部分。
问题:如何在字段部分插入新代码?
这是我使用的代码:
MyMembersHandlerBase extends GenerateMembersHandlerBase {
@Override
protected List<? extends GenerationInfo> generateMemberPrototypes(
PsiClass psiClass, ClassMember[] members) {
PsiMethod method1 = // method generation logic
PsiMethod method2 = // ...
return asList(
new PsiGenerationInfo(method1),
new PsiGenerationInfo(method2),
...
);
}
@Override
protected ClassMember[] getAllOriginalMembers(PsiClass psiClass) {
// ...
}
}
更新: 我在 UI 中找到了 "Rearrange Code" 功能。可能以编程方式调用它会解决我的问题,但到目前为止我还没有找到如何做到这一点。
动作可以这样调用:
Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
ActionManager actionManager = ActionManager.getInstance();
AnAction rearrangeAction = actionManager.getAction("RearrangeCode");
DataContext dataContext = DataManager.getInstance()
.getDataContext(editor.getContentComponent());
Presentation presentation = rearrangeAction.getTemplatePresentation();
rearrangeAction.actionPerformed(
AnActionEvent.createFromDataContext("", presentation, dataContext)
);
但恕我直言,更正确的做法是在 AST 中搜索第一个方法或声明的结尾,然后在正确的位置插入方法。
我正在开发一个在 class.
中生成方法的插件问题是我生成的代码被随机插入到其他字段和方法之间。例如。我有 4 个字段,我的方法被插入到第二个和第三个字段之间,将字段部分分成两部分。
问题:如何在字段部分插入新代码?
这是我使用的代码:
MyMembersHandlerBase extends GenerateMembersHandlerBase {
@Override
protected List<? extends GenerationInfo> generateMemberPrototypes(
PsiClass psiClass, ClassMember[] members) {
PsiMethod method1 = // method generation logic
PsiMethod method2 = // ...
return asList(
new PsiGenerationInfo(method1),
new PsiGenerationInfo(method2),
...
);
}
@Override
protected ClassMember[] getAllOriginalMembers(PsiClass psiClass) {
// ...
}
}
更新: 我在 UI 中找到了 "Rearrange Code" 功能。可能以编程方式调用它会解决我的问题,但到目前为止我还没有找到如何做到这一点。
动作可以这样调用:
Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor();
ActionManager actionManager = ActionManager.getInstance();
AnAction rearrangeAction = actionManager.getAction("RearrangeCode");
DataContext dataContext = DataManager.getInstance()
.getDataContext(editor.getContentComponent());
Presentation presentation = rearrangeAction.getTemplatePresentation();
rearrangeAction.actionPerformed(
AnActionEvent.createFromDataContext("", presentation, dataContext)
);
但恕我直言,更正确的做法是在 AST 中搜索第一个方法或声明的结尾,然后在正确的位置插入方法。