2016-06-05 15 views
1

Ich muss oft Builder-Methoden in meinem Code erstellen. Diese Methoden sind ähnlich wie Getter, aber sie verwenden return this und sie verwenden with anstelle von get.Wie kann ich eine Live-Vorlage konfigurieren, die eine Builder-Methode in IntelliJ IDEA generiert?

Um mit dieser Aufgabe schneller zu sein, möchte ich eine Live-Vorlage in IDEA erstellen. Diese

, wie weit ich bekam:

configuration of the builder

(in ~/.IntelliJIdea14/config/templates/user.xml dies wie folgt aussieht :)

<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> 

Diese fast funktioniert, mit Ausnahme von typeOfVariable("this." + VAR), die nicht der Fall ist. Ich habe nur getippt, wie ich diese Methode aufrufen soll, da ich keine Dokumentation über die in den Ausdrücken verwendete Syntax finden konnte, mit Ausnahme von this page, in der nicht einmal der Name einer Skriptsprache erwähnt wird oder etwas, das das Suchen einfacher macht.

Wie behebe ich den Anruf zu typeOfVariable?

Bonus Frage: Wie kann ich complete() für VAR nur Felder anzeigen?

ähnliche Frage aber nicht hat noch nicht einmal einen Anfang: Live Template for Fluent-API Builder in IntelliJ

+0

In Bezug auf den Bonus erzeugt Stellen Frage: Ich glaube nicht, dass es möglich ist, nur Felder aufzulisten. – binoternary

+1

Es ist wahrscheinlich bequemer, wenn Sie die Option "Skip if defined" für 'TYPE'- und' CLASS_NAME'-Variablen aktivieren, da Sie wahrscheinlich nie die für sie generierten Werte ändern müssen. – binoternary

Antwort

1

ersetzen typeOfVariable("this." + VAR) mit typeOfVariable(VAR).

Edit:

Ein anderer Weg, Generator-Methoden zu erzeugen, ist eine geeignete Setter-Vorlage (anstelle von Live-Vorlage) zu verwenden.
https://www.jetbrains.com/help/idea/2016.1/generate-setter-dialog.html

Es gibt bereits eine eingebaute in Setter Vorlage mit dem Namen „Builder“, die Setter wie erzeugt:

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

Sie können Ihre eigene Vorlage (durch Kopieren zB) erstellen und ändern, so dass Das Methodenpräfix lautet with.
und die erzeugten Methodenparameter endgültig gehen, um die Einstellungen zu machen:

  • Editor | Code Style | Java
  • die Codegenerierung Wählen Sie die Registerkarte
  • Tick Parameter
  • final

IntelliJ IDEA add final to auto-generated setters

+0

Seltsam. Ich hätte schwören können, dass ich das getestet habe. Offensichtlich habe ich nicht, weil es funktioniert. – yankee