AddLintingRule.java

package org.thewonderlemming.c4plantuml.linter.builder;

import java.util.Set;

import org.thewonderlemming.c4plantuml.linter.Linter;
import org.thewonderlemming.c4plantuml.linter.LinterBuilder;
import org.thewonderlemming.c4plantuml.linter.rules.AbstractLintingRule;

/**
 * A part of the {@link LinterBuilder} to add {@link AbstractLintingRule} and build a new {@link Linter} instance.
 *
 * @author thewonderlemming
 *
 */
public interface AddLintingRule {

    /**
     * Adds a {@link AbstractLintingRule} to the set of active rules.
     * <p>
     * Adding the same rule multiple times is not forbidden but in the end it will be part of a {@link Set}.
     *
     * @param lintingRule the {@link AbstractLintingRule} to add to the instance.
     * @return the current {@link AddLintingRule} builder instance.
     */
    AddLintingRule addLintingRule(final AbstractLintingRule lintingRule);

    /**
     * Adds a set of {@link AbstractLintingRule} to the set of active rules.
     *
     * @param lintingRules the {@link Set} of rules to add to the instance.
     * @return the current {@link AddLintingRule} builder instance.
     */
    default AddLintingRule addLintingRules(final Set<AbstractLintingRule> lintingRules) {

        lintingRules.forEach(this::addLintingRule);
        return this;
    }

    /**
     * Builds and returns the expected {@link Linter} instance.
     *
     * @return the new {@link Linter} instance.
     */
    Linter build();
}