【问题标题】:How can I configure a live template that generates a builder method in IntelliJ IDEA?如何在 IntelliJ IDEA 中配置生成构建器方法的实时模板?
【发布时间】:2016-06-06 14:27:29
【问题描述】:

我经常需要在我的代码中创建构建器方法。这些方法与 getter 类似,但它们使用return this 并且使用with 而不是get

为了更快地完成这项任务,我想在 IDEA 中创建一个实时模板。

这是我走了多远:

(在~/.IntelliJIdea14/config/templates/user.xml 中看起来像这样:)

<template name="builderMethod" value="public $CLASS_NAME$ with$VAR_GET$(final $TYPE$ $PARAM_NAME$) {&#10;    this.$VAR$ = $PARAM_NAME$;&#10;    return this;&#10;}" description="create a builder method" toReformat="true" toShortenFQNames="true">
    <variable name="CLASS_NAME" expression="className()" defaultValue="" alwaysStopAt="true" />
    <variable name="VAR" expression="complete()" defaultValue="" alwaysStopAt="true" />
    <variable name="PARAM_NAME" expression="VAR" defaultValue="" alwaysStopAt="true" />
    <variable name="TYPE" expression="typeOfVariable(&quot;this.&quot; + VAR)" defaultValue="" alwaysStopAt="true" />
    <variable name="VAR_GET" expression="capitalize(VAR)" defaultValue="" alwaysStopAt="true" />
    <context>
      <option name="JAVA_EXPRESSION" value="false" />
      <option name="JAVA_DECLARATION" value="true" />
    </context>
  </template>

这几乎可以工作,除了typeOfVariable("this." + VAR) 没有。我只是猜测如何调用此方法,因为除了this page 之外,我找不到任何关于表达式中使用的语法的文档,它甚至没有提及脚本语言名称或任何可以让谷歌搜索更容易的东西。

如何解决对typeOfVariable 的呼叫?

额外问题:我怎样才能让complete()VAR 只显示字段?

类似的问题,但甚至没有开始:Live Template for Fluent-API Builder in IntelliJ

【问题讨论】:

  • 关于奖励问题:我认为不可能只列出字段。
  • 如果您检查TYPECLASS_NAME 变量的“如果已定义则跳过”选项可能更方便,因为您可能永远不需要更改为它们生成的值。

标签: intellij-idea live-templates


【解决方案1】:

typeOfVariable("this." + VAR) 替换为typeOfVariable(VAR)

编辑:

生成构建器方法的另一种方法是使用适当的 setter 模板(而不是实时模板)。
https://www.jetbrains.com/help/idea/2016.1/generate-setter-dialog.html

已经有一个名为“Builder”的内置setter模板,它可以生成setter,例如:

public Foo setBar(int bar) {
  this.bar = bar;
  return this;
}

您可以创建自己的模板(例如通过复制它)并更改它,使方法前缀为with
并使生成的方法参数最终转到设置:

  • Editor | Code Style | Java
  • 选择代码生成选项卡
  • 勾选将生成的参数设为最终参数

IntelliJ IDEA add final to auto-generated setters

【讨论】:

  • 很奇怪。我可以发誓我测试过。显然我没有,因为它有效。
猜你喜欢
  • 2013-07-10
  • 1970-01-01
  • 2012-09-14
  • 2014-12-12
  • 1970-01-01
  • 2017-09-24
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多