Мне часто нужно создавать методы построителя в моем коде. Эти методы похожи на геттеры, но они 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)
, который не работает. Я только догадался, как вызвать этот метод, потому что не смог найти никакой документации по синтаксису, используемому в выражениях, кроме эта страница, на которой даже не упоминается название скриптового языка или что-то, что упростило бы поиск в Google.
Как исправить вызов typeOfVariable
?
Бонусный вопрос: как я могу заставить complete()
для VAR
показывать только поля?
Аналогичный вопрос, но даже не имеет начала: Конструктор API в IntelliJ
TYPE
иCLASS_NAME
, так как вам, вероятно, никогда не понадобится изменять сгенерированные для них значения. - person binoternary   schedule 05.06.2016