пустые строки вне тела метода с шаблонами intellij getter / setter - PullRequest
0 голосов
/ 04 августа 2020

В моей нынешней компании мы используем несколько иной стиль кода. Между методами есть разделитель, состоящий из новой строки, нескольких слэшей и еще одной новой строки для структурирования кода. Я хотел адаптировать шаблоны getter / setter IntelliJ для их автоматического создания.

Это значение по умолчанию:

#if($field.modifierStatic)
static ##
#end
void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) {
  #if ($field.name == $paramName)
    #if (!$field.modifierStatic)
      this.##
    #else
      $classname.##
    #end
  #end
  $field.name = $paramName;
}

Когда я просто пытаюсь добавить новые строки и косые черты:

#set($paramName = $helper.getParamName($field, $project))

//////////

#if($field.modifierStatic)
static ##
#end
void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) {
  #if ($field.name == $paramName)
    #if (!$field.modifierStatic)
      this.##
    #else
      $classname.##
    #end
  #end
  $field.name = $paramName;
}

Я получаю сообщение об ошибке incorrect method. Без новых строк он отлично работает. Есть идеи, как изменить шаблон для достижения моей цели?

1 Ответ

0 голосов
/ 04 августа 2020

Мне пришлось создать ответ, потому что он будет достаточно подробным и не поместится в комментарии.

Если причины не интересны, то просто переходите в конец, в раздел с решением .

Сначала я использовал этот фрагмент, как я уже упоминал в комментариях:

#set($paramName = $helper.getParamName($field, $project))
#set($newline = "
")
${newline}//////////////////${newline}
#if($field.modifierStatic)
static ##
#end
void set$StringUtil.capitalizeWithJavaBeanConvention($StringUtil.sanitizeJavaIdentifier($helper.getPropertyName($field, $project)))($field.type $paramName) {
  #if ($field.name == $paramName)
    #if (!$field.modifierStatic)
      this.##
    #else
      $classname.##
    #end
  #end
  $field.name = $paramName;
}

Ну, на самом деле это не сработало, поэтому сначала я посмотрел документацию. Согласно this , IntelliJ использует Velocity в качестве механизма шаблонов. И, учитывая его синтаксис, все должно работать нормально. И это так, если вы посмотрите на сообщение об ошибке:

error

you can see that it handles indentation correctly.

So, I looked into the source to see как они это обрабатывают , и оказалось, что они также используют языковой сервер для проверки . Почему они считают начало метода с пустой строки недопустимым idk, мне этого достаточно.

Итак, решение :

Использовать фрагмент по умолчанию, но создать живой шаблон (да, живые шаблоны поддерживают пустые строки).

Итак, создайте шаблон, например:

example-template

Select whole method body (I prefer Ctrl + W, when cursor inside method body). And then Ctrl+Alt+J -> template_name

More info здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...