Формат получателя/сеттера Eclipse

Кто-нибудь знает о подключаемом модуле Eclipse или методе, чтобы заставить Eclipse генерировать getter/seters в одной строке следующим образом:

public String getAbc() { return abc; }

Вместо

public String getAbc() {
   return abc;
}

Я на Eclipse v. 3.2.2.

Спасибо.

Ответ 1

Я не знаю, как заставить Eclipse генерировать их в нужном вам формате, но вы можете выполнить поиск/замену с помощью этих регулярных выражений после создания методов:

Поиск:

(?m)((?:public |private |protected )?[\w$]+) (get|set|is)([\w$]+)\(([\w$]+(?:\[\])? [\w$]+)?\) \{\s+(return [\w$]+;|this.[\w$]+ = [\w$]+;)\s+\}

Заменить на:

$1 $2$3($4) { $5 }

Это выражение преобразует сгенерированные геттеры и сеттеры в одну строку. Не беспокойтесь о запуске его смесью преобразованных и вновь созданных методов; он будет работать нормально.

Ответ 2

Я думаю, что подходящие дженерики также важны, поэтому правильное регулярное выражение:

(?m)((?:public |private |protected )?[\w\<\>$]+) (get|set|is)([\w$]+)\(([\w\<\>$]+ [\w$]+)?\) \{\s+(return [\w$]+;|this.[\w$]+ = [\w$]+;)\s+\}

Ответ 3

В качестве варианта подхода замены regexp следующие переформатируют пробел, так что сеттерам следует пустая строка, но геттеры не являются.

Поиск:

(\s(?:get|is|set)\w+\([^)]*\))\s*\{\s*(?:([^=;}]+;)\s*\}\s*(\R)|([^=;}]+=[^=;}]+;)\s*\}\s*(\R))

Заменить на:

$1 { $2$4 } \R$5

Результаты в:

int getTotal() { return total; } 
void setTotal(int total) { this.total = total; } 

List<String> getList() { return list; } 
void setList(List<String> list) { this.list = list; } 

Map.Entry<String, Integer> getEntry() { return entry; } 
void setEntry(Map.Entry<String, Integer> entry) { this.entry = entry; } 

Это незначительная эстетическая вещь, но я подумал, что если вы ищете ответ на этот вопрос, то вы, вероятно, (почти) как анал, как я; -)

Я знаю, что мои условия регулярного выражения не такие строгие, как условия @Hosam, но я не испытывал никаких "ложноположительных" замен.

Ответ 4

Форматирование кода Java в Eclipse не отличает между getters/seters и любыми другими методами в классе. Таким образом, это невозможно сделать с помощью встроенного форматирования eclipse.

Вам понадобится:

  • выполнить поиск/замену с помощью указанного выше выражения
  • получить внешний плагин, например PMD или CheckStyle и выполните правило регулярного выражения на основе предыдущей опции

Ответ 6

Я хотел опубликовать комментарий к назначенному ответу, но, похоже, не могу.

Я изменил Hosam Aly на работу с родовыми и внутренними типами формы:

List<X>

и

Map.Entry

Пересмотренная строка поиска регулярных выражений:

(?m)((?:public |private |protected )?[\w\.\<\>$]+) (get|set|is)([\w$]+)\(([\w\.\<\>$]+ [\w$]+)?\) \{\s+(return [\w\.\<\>$]+;|this.[\w$]+ = [\w$]+;)\s+\}

Это регулярное выражение позволяет использовать угловые скобки и точку в типе.

Например:

public List<String> getStringList()

и

public void setStringList(List<String> list)

и

public Map.Entry getEntry ()

И строка замены такая же, как и раньше:

$1 $2$3($4) { $5 }