如何在Eclipse中“正确”缩进流畅接口模式?

61

我刚刚创建了一个生成器,用于一些流畅接口。现在我有很多像这样的代码:

new MyFluentInterface()
    .setFirst( "first" )
    .setSecond( "second" )
    .setThird( "third" )
    .invoke( obj );

我喜欢上面显示的缩进方式,但是我找不到一种方法来配置Eclipse以正确地缩进。

Eclipse总是这样缩进:

new MyFluentInterface()
.setFirst( "first" )
.setSecond( "second" )
.setThird( "third" )
.invoke( obj );

我该如何配置Eclipse,使其按照我第一个代码示例所示的方式缩进这个流畅接口模式?


你想让格式化程序这样做吗?我的意思是在整个缓冲区上按“CONTROL+SHIFT+f”,还是只想缩进那一行? - dacwe
如果Eclipse的格式化器或缩进器能够完成这个任务,那就太好了。 - tangens
1
嗨,我知道这是一个旧的帖子,你有没有注意到 Ctrl+ACtrl+I 可以撤消这种格式化? - durron597
这个 Ctrl+I 的东西真是让人烦死了 :) - Daniel Kitachewsky
1个回答

74

使用Eclipse 3.6,可以通过配置自定义的Java > Code Style > Formatter文件来实现。编辑并转到Line Wrapping选项卡,选择Function Call > Qualified invocations。然后,在Settings for qualified invocations中进行配置,如下所示:

alt text

这将(应该)产生预期的结果:
SomeEntity e1 = new SomeEntity.Builder()
    .age(10)
    .amount(10.0d)
    .firstname("foo")
    .lastname("bar")
    .build();

但是这会影响所有代码,个人不太喜欢。因此我使用Eclipse 3.6中的新Off/On Tags(编辑配置文件时的最后一个选项卡):

alt text

请将无法按照我的要求格式化的部分括起来,让我自己来处理:

// @formatter:off
SomeEntity e2 = new SomeEntity.Builder()
    .age(10)
    .amount(10.0d)
    .firstname("foo")
    .lastname("bar")
    .build();
// @formatter:on

选择你的毒药 :)

4
@seanizer: 实际上,以上内容是Builder Pattern Eclipse Plugin的结果。我很喜欢这个小插件本身 :) - Pascal Thivent
1
这对我没用。即使进行了设置,点号开始的行仍然与初始行的开头匹配。 - Johannes Brodwall
2
起初我并不认为这个有效。后来我发现它可以与自动格式化一起使用,但是添加“正确缩进”以保存操作会覆盖并撤销它。我打算提出一个Eclipse的bug。 - TedTrippin
我已启用显示空格(http://www.eclipse.org/forums/index.php/m/249836/),并使用打开/关闭标签为不同的嵌套创建自定义缩进(我正在使用Json构建器)。 - Jaap
@SeanPatrickFloyd 你可能想试试这个:https://code.google.com/p/fluent-builders-generator-eclipse-plugin/ - usr-local-ΕΨΗΕΛΩΝ
如果它不起作用,请确保没有编译错误。我在解决格式问题时在Eclipse中被困扰了几周。 - LegendLength

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接