001///////////////////////////////////////////////////////////////////////////////////////////////
002// checkstyle: Checks Java source code and other text files for adherence to a set of rules.
003// Copyright (C) 2001-2022 the original author or authors.
004//
005// This library is free software; you can redistribute it and/or
006// modify it under the terms of the GNU Lesser General Public
007// License as published by the Free Software Foundation; either
008// version 2.1 of the License, or (at your option) any later version.
009//
010// This library is distributed in the hope that it will be useful,
011// but WITHOUT ANY WARRANTY; without even the implied warranty of
012// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
013// Lesser General Public License for more details.
014//
015// You should have received a copy of the GNU Lesser General Public
016// License along with this library; if not, write to the Free Software
017// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
018///////////////////////////////////////////////////////////////////////////////////////////////
019
020package com.puppycrawl.tools.checkstyle;
021
022import java.io.Serializable;
023
024/**
025 * Thread mode settings for the checkstyle modules.
026 *
027 * @noinspection SerializableHasSerializationMethods
028 * @noinspectionreason SerializableHasSerializationMethods - we only need serialVersionUID
029 *      to differentiate between threads
030 */
031public class ThreadModeSettings implements Serializable {
032
033    /** A checker module name. */
034    public static final String CHECKER_MODULE_NAME = Checker.class.getSimpleName();
035
036    /** A multi thread checker module name. */
037    public static final String MULTI_THREAD_CHECKER_MODULE_NAME =
038            Checker.class.getSimpleName();
039
040    /** A three walker module name. */
041    public static final String TREE_WALKER_MODULE_NAME = TreeWalker.class.getSimpleName();
042
043    /** A multi thread three walker module name. */
044    public static final String MULTI_THREAD_TREE_WALKER_MODULE_NAME =
045            TreeWalker.class.getSimpleName();
046
047    /** A single thread mode settings instance. */
048    public static final ThreadModeSettings SINGLE_THREAD_MODE_INSTANCE =
049            new ThreadModeSettings(1, 1);
050
051    /** A unique serial version identifier. */
052    private static final long serialVersionUID = 1L;
053
054    /** The checker threads number. */
055    private final int checkerThreadsNumber;
056    /** The tree walker threads number. */
057    private final int treeWalkerThreadsNumber;
058
059    /**
060     * Initializes the thread mode configuration.
061     *
062     * @param checkerThreadsNumber the Checker threads number
063     * @param treeWalkerThreadsNumber the TreeWalker threads number
064     */
065    public ThreadModeSettings(int checkerThreadsNumber, int treeWalkerThreadsNumber) {
066        this.checkerThreadsNumber = checkerThreadsNumber;
067        this.treeWalkerThreadsNumber = treeWalkerThreadsNumber;
068    }
069
070    /**
071     * Gets the number of threads for the Checker module.
072     *
073     * @return the number of threads for the Checker module.
074     */
075    public int getCheckerThreadsNumber() {
076        return checkerThreadsNumber;
077    }
078
079    /**
080     * Gets the number of threads for the TreeWalker module.
081     *
082     * @return the number of threads for the TreeWalker module.
083     */
084    public int getTreeWalkerThreadsNumber() {
085        return treeWalkerThreadsNumber;
086    }
087
088    /**
089     * Resolves the module name according to the thread settings.
090     *
091     * @param name The original module name.
092     * @return resolved module name.
093     * @throws IllegalArgumentException when name is Checker or TreeWalker
094     */
095    public final String resolveName(String name) {
096        if (checkerThreadsNumber > 1) {
097            if (CHECKER_MODULE_NAME.equals(name)) {
098                throw new IllegalArgumentException(
099                        "Multi thread mode for Checker module is not implemented");
100            }
101            if (TREE_WALKER_MODULE_NAME.equals(name)) {
102                throw new IllegalArgumentException(
103                        "Multi thread mode for TreeWalker module is not implemented");
104            }
105        }
106
107        return name;
108    }
109
110}