Цепные вызовы методов: Вырубить, если долго вызывает странные эффекты с конструкторами / функциями со многими параметрами? - PullRequest
0 голосов
/ 09 мая 2018

Мне нравится использовать intellij idea для моей повседневной работы, но с тех пор, как я попал в новые java-приложения, такие как streams и builder, одна вещь меня подвела.

Когда я устанавливаю стиль кода Java "Цепные вызовы метода" на "Обрубить, если долго", мой конструктор:

public Blog(Blog c) {
    this(c.getId(), c.getFromId(), c.getSiteId(), c.getUserId(), c.getTitle(), c.getFolder(), c.getAddedDate(), c.getFrontPos(), c.isUseSiteWidgets(), c
      .isNeedValidSubscriptionToView(), c.isMayStudentPostComments(), c.getLastIndexDate(), c.isCommentsEnabled(), c.isOverrideSiteSettings(), c
      .isNotifyOnComment(), c.isOnlyNotiftyOnUnapprovedComment());
  }

становится:

public Blog(Blog c) {
    this(c.getId(), c.getFromId(), c.getSiteId(), c.getUserId(), c.getTitle(), c.getFolder(), c.getAddedDate(), c.getFrontPos(), c.isUseSiteWidgets(), c
      .isNeedValidSubscriptionToView(), c
      .isMayStudentPostComments(), c.getLastIndexDate(), c.isCommentsEnabled(), c.isOverrideSiteSettings(), c.isNotifyOnComment(), c
      .isOnlyNotiftyOnUnapprovedComment());
  }

Когда я устанавливаю «Цепные вызовы методов» на «Не переносить», мои вызовы методов компоновщика становятся очень запутанными. От:

getWizard().sendCommandToServer(CommandProtos.Wrapper.newBuilder()
          .setGetTutorSites(CommandProtos.GetTutorSites.newBuilder()
            .setEmail(loginUserForm.getEmail().getText())
            .setPass(new String(loginUserForm.getPass().getPassword()))
            .build())
          .build());

на один вкладыш:

getWizard().sendCommandToServer(CommandProtos.Wrapper.newBuilder().setGetTutorSites(CommandProtos.GetTutorSites.newBuilder().setEmail(loginUserForm
          .getEmail().getText()).setPass(new String(loginUserForm.getPass().getPassword())).build()).build());

Можно ли получить лучшее от обоих миров? Другими словами, правильно отформатированная функция / конструктор со многими параметрами и правильно отформатированный компоновщик.

1 Ответ

0 голосов
/ 07 июня 2018

Я только что попробовал новую идею 2018.4, и похоже, что решение «Цепные вызовы методов» - «Обтекать всегда» и отключение «Обернуть первым вызовом» и «Выровнять при многострочности» - это решение.

Теперь цепочки и длинные конструкторы форматируются правильно. Надеюсь, что это помогает людям с похожими проблемами.

[править] Вышеописанное работало хорошо, пока вы не обнаружили, что вызываете что-то вроде:

myclass.myfunc().myfunc()

Кажется, это часто встречается при работе со свингом. Приведенные выше настройки приводят к:

myclass.myfunc()
.myfunc()

«Связанные вызовы метода» для «вырубки, если долго» и отключения «переноса первого вызова» и «выравнивания при многострочности», а также установки «аргументов вызова метода» на «перенос, если долго» (необходим для длинных конструкторов) работа.

Стиль кода для модуля может решить многие из этих проблем, но это не в интеллигенции, но вы можете проголосовать: https://youtrack.jetbrains.com/issue/IDEA-69685

...