@NotNull
  private static AccessorsInfo buildAccessorsInfo(@Nullable PsiClass psiClass, @Nullable Boolean chainDeclaredValue,
                                                  @Nullable Boolean fluentDeclaredValue,
                                                  @Nullable Boolean makeFinalDeclaredValue,
                                                  @NotNull Collection<String> prefixDeclared) {
    final boolean isFluent;
    final boolean isChained;
    final boolean makeFinal;
    final boolean doNotUseIsPrefix;
    final CapitalizationStrategy capitalizationStrategy;
    final String[] prefixes;

    if (null != psiClass) {
      final ConfigDiscovery configDiscovery = ConfigDiscovery.getInstance();
      if (null == fluentDeclaredValue) {
        isFluent = configDiscovery.getBooleanLombokConfigProperty(ConfigKey.ACCESSORS_FLUENT, psiClass);
      }
      else {
        isFluent = fluentDeclaredValue;
      }

      if (null == chainDeclaredValue) {
        isChained = configDiscovery.getBooleanLombokConfigProperty(ConfigKey.ACCESSORS_CHAIN, psiClass);
      }
      else {
        isChained = chainDeclaredValue;
      }

      if (null == makeFinalDeclaredValue) {
        makeFinal = configDiscovery.getBooleanLombokConfigProperty(ConfigKey.ACCESSORS_MAKE_FINAL, psiClass);
      }
      else {
        makeFinal = makeFinalDeclaredValue;
      }

      if (prefixDeclared.isEmpty()) {
        prefixes = ArrayUtil.toStringArray(configDiscovery.getMultipleValueLombokConfigProperty(ConfigKey.ACCESSORS_PREFIX, psiClass));
      }
      else {
        prefixes = ArrayUtil.toStringArray(prefixDeclared);
      }

      doNotUseIsPrefix = configDiscovery.getBooleanLombokConfigProperty(ConfigKey.GETTER_NO_IS_PREFIX, psiClass);

      final String capitalizationStrategyValue = configDiscovery.getStringLombokConfigProperty(ConfigKey.ACCESSORS_JAVA_BEANS_SPEC_CAPITALIZATION, psiClass);
      capitalizationStrategy = CapitalizationStrategy.convertValue(capitalizationStrategyValue);
    }
    else {
      isFluent = null != fluentDeclaredValue && fluentDeclaredValue;
      isChained = null != chainDeclaredValue && chainDeclaredValue;
      makeFinal = null != makeFinalDeclaredValue && makeFinalDeclaredValue;
      prefixes = ArrayUtil.toStringArray(prefixDeclared);
      doNotUseIsPrefix = false;
      capitalizationStrategy = CapitalizationStrategy.defaultValue();
    }

    boolean isChainDeclaredOrImplicit = isChained || (isFluent && null == chainDeclaredValue);
    return build(isFluent, isChainDeclaredOrImplicit, makeFinal, doNotUseIsPrefix, capitalizationStrategy, prefixes);
  }
@NotNull
  private static AccessorsInfo buildAccessorsInfo(@Nullable PsiClass psiClass, @Nullable Boolean chainDeclaredValue,
                                                  @Nullable Boolean fluentDeclaredValue,
                                                  @Nullable Boolean makeFinalDeclaredValue,
                                                  @NotNull Collection<String> prefixDeclared)