LinterBuilder.java

package org.thewonderlemming.c4plantuml.linter;

import java.util.HashSet;
import java.util.Set;

import org.thewonderlemming.c4plantuml.linter.builder.AddLintingRule;
import org.thewonderlemming.c4plantuml.linter.builder.WithReporter;
import org.thewonderlemming.c4plantuml.linter.rules.AbstractLintingRule;

/**
 * A simple builder pattern to create {@link Linter} instances.
 *
 * @author thewonderlemming
 *
 */
public class LinterBuilder {

    /**
     * Returns a chain of method calls that ends with the build of a {@link Linter} instance.
     *
     * @return the next part of the method calls chain.
     */
    public WithReporter newLinter() {

        return reporter -> new AddLintingRule() {

            private final Set<AbstractLintingRule> lintingRules = new HashSet<>();

            @Override
            public AddLintingRule addLintingRule(final AbstractLintingRule lintingRule) {

                this.lintingRules.add(lintingRule);
                return this;
            }

            @Override
            public Linter build() {
                return new Linter(reporter, lintingRules);
            }
        };
    }
}