【发布时间】: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$) { this.$VAR$ = $PARAM_NAME$; return this; }" 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("this." + 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
【问题讨论】:
-
关于奖励问题:我认为不可能只列出字段。
-
如果您检查
TYPE和CLASS_NAME变量的“如果已定义则跳过”选项可能更方便,因为您可能永远不需要更改为它们生成的值。
标签: intellij-idea live-templates