IntelliJ插件开发:在类中的所有字段之后插入新代码

时间:2018-02-07 14:17:04

标签: java intellij-idea jetbrains-ide intellij-plugin idea-plugin

我正在使用一个在类中生成方法的插件。

问题是我生成的代码会在其他字段和方法之间随机插入。例如。我有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"功能。以编程方式调用它可能会解决我的问题,但到目前为止我还没有找到如何做到这一点。

1 个答案:

答案 0 :(得分:1)

可以通过这种方式调用此操作:

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的第一种方法或结束声明并在正确的位置插入方法。