Eclipse JavaEditor 扩展:如何添加正确的缩进行?

发布于 2024-07-15 08:14:05 字数 1107 浏览 4 评论 0原文

需要什么?

我们正在为 Eclipse 的 JavaEditor 编写扩展。 我们需要一种方法在光标所在行的前后添加一行。

新行上的光标应该位于正确的位置(正确插入)。

示例(# 是光标):

之前 (I):

public class Test {
    public static void main#(String[] args) {
        System.out.println("Test!");
    }
}

想要之后 (II):

public class Test {
    #
    public static void main(String[] args) {
        System.out.println("Test!");
    }

不想要之后(又名当前状态)(III):

public class Test {
#
    public static void main(String[] args) {
        System.out.println("Test!");
    }

当前状态:

IIII 的转换可以通过 IDocument.replace()(一个 InsertEdit 或通过 IDocumentExtension4 的 rewriteSessions。

问题是如何在扩展中插入新行后调用JavaEditor的缩进函数。 或者甚至可以直接正确地缩进该行(III)? (缩进的长度不应该总是当前行的长度,而是正确的长度。如果可能,不应使用 internal 包,否则 IndentUtil 将是解决方案。)

What is needed?

We are writing an extension to eclipse's JavaEditor. We need a way to add a line before and after the line the cursor is in.

The cursor on the new line should be on the correct position (correctly indeted).

Sample (# is the cursor):

before (I):

public class Test {
    public static void main#(String[] args) {
        System.out.println("Test!");
    }
}

after wanted (II):

public class Test {
    #
    public static void main(String[] args) {
        System.out.println("Test!");
    }

after not wanted (a.k.a. the present state) (III):

public class Test {
#
    public static void main(String[] args) {
        System.out.println("Test!");
    }

Present state:

The transformation from I to III can be done via IDocument.replace(), an InsertEdit or via IDocumentExtension4's rewriteSessions.

The problem is how to call JavaEditor's indent function after inserting the new line from the extension. Or is it even possible to indent the line directly correct (I to II)? (The length of the indent should not always be the one of the current line, but the correct one. internal packages should not be used if possible, otherwise IndentUtil would be the solution.)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

权谋诡计 2024-07-22 08:14:05

一种解决方案似乎是不使用IDocument.replace(),例如,

myTextViewer.getDocument().replace(...)

而是使用insert(),例如,

textViewer.getTextWidget().insert(...)

这可以工作,但还不是一个完整的解决方案,可以在不使用缩进函数的情况下调用缩进函数。生成对 org.eclipse.jdt 的依赖项:-(。这仍然是需要的。

One solution seems to be not to use IDocument.replace(), e.g.

myTextViewer.getDocument().replace(...)

but insert(), e.g.

textViewer.getTextWidget().insert(...)

That works but is not yet a complete solution to call the indent function without generating dependencies to org.eclipse.jdt :-(. That is still needed.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文