001///////////////////////////////////////////////////////////////////////////////////////////////
002// checkstyle: Checks Java source code and other text files for adherence to a set of rules.
003// Copyright (C) 2001-2026 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.IOException;
023import java.util.HashMap;
024import java.util.HashSet;
025import java.util.LinkedHashSet;
026import java.util.List;
027import java.util.Map;
028import java.util.Map.Entry;
029import java.util.Set;
030import java.util.function.Supplier;
031import java.util.stream.Collectors;
032import java.util.stream.Stream;
033
034import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
035import com.puppycrawl.tools.checkstyle.utils.ModuleReflectionUtil;
036
037/**
038 * A factory for creating objects from package names and names.
039 * Consider the below example for better understanding.
040 * <ul>
041 *     <li>module name - name of java class that represents module;</li>
042 *     <li>module full name - fully qualifies name of java class that represents module;</li>
043 *     <li>check module short name - name of Check without 'Check' suffix;</li>
044 *     <li>check module name - name of java class that represents Check (with 'Check' suffix);</li>
045 *     <li>
046 *         check module full name - fully qualifies name of java class
047 *         that represents Check (with 'Check' suffix).
048 *     </li>
049 * </ul>
050 */
051public class PackageObjectFactory implements ModuleFactory {
052
053    /**
054     * Enum class to define loading options.
055     */
056    public enum ModuleLoadOption {
057
058        /**
059         * Searching from registered checkstyle modules and from packages given in constructor.
060         **/
061        SEARCH_REGISTERED_PACKAGES,
062        /**
063         * As SEARCH_REGISTERED_PACKAGES and also try to load class from all of packages given in
064         * constructor.
065         * Required for eclipse-cs plugin.
066         **/
067        TRY_IN_ALL_REGISTERED_PACKAGES,
068
069    }
070
071    /** Base package of checkstyle modules checks. */
072    public static final String BASE_PACKAGE = "com.puppycrawl.tools.checkstyle";
073
074    /** Exception message when it is unable to create a class instance. */
075    public static final String UNABLE_TO_INSTANTIATE_EXCEPTION_MESSAGE =
076            "PackageObjectFactory.unableToInstantiateExceptionMessage";
077
078    /** Exception message when there is ambiguous module name in config file. */
079    public static final String AMBIGUOUS_MODULE_NAME_EXCEPTION_MESSAGE =
080            "PackageObjectFactory.ambiguousModuleNameExceptionMessage";
081
082    /** Suffix of checks. */
083    public static final String CHECK_SUFFIX = "Check";
084
085    /** Character separate package names in qualified name of java class. */
086    public static final String PACKAGE_SEPARATOR = ".";
087
088    /** Exception message when null class loader is given. */
089    public static final String NULL_LOADER_MESSAGE = "moduleClassLoader must not be null";
090
091    /** Exception message when null package name is given. */
092    public static final String NULL_PACKAGE_MESSAGE = "package name must not be null";
093
094    /** Separator to use in strings. */
095    public static final String STRING_SEPARATOR = ", ";
096
097    /** Map of Checkstyle module names to their fully qualified names. */
098    private static final Map<String, String> NAME_TO_FULL_MODULE_NAME = new HashMap<>();
099
100    /** Package names to prepend to class names. */
101    private final Set<String> packages;
102
103    /** The class loader used to load Checkstyle core and custom modules. */
104    private final ClassLoader moduleClassLoader;
105
106    /** Map of third party Checkstyle module names to the set of their fully qualified names. */
107    private Map<String, Set<String>> thirdPartyNameToFullModuleNames;
108
109    /** Module load option which defines class search type. */
110    private ModuleLoadOption moduleLoadOption;
111
112    static {
113        fillShortToFullModuleNamesMap();
114    }
115
116    /**
117     * Creates a new {@code PackageObjectFactory} instance.
118     *
119     * @param packageNames package names to use
120     * @param moduleClassLoader class loader used to load Checkstyle
121     *          core and custom modules
122     */
123    public PackageObjectFactory(Set<String> packageNames, ClassLoader moduleClassLoader) {
124        this(packageNames, moduleClassLoader, ModuleLoadOption.SEARCH_REGISTERED_PACKAGES);
125    }
126
127    /**
128     * Creates a new {@code PackageObjectFactory} instance.
129     *
130     * @param packageName The package name to use
131     * @param moduleClassLoader class loader used to load Checkstyle
132     *          core and custom modules
133     * @throws IllegalArgumentException if moduleClassLoader is null or packageNames is null
134     */
135    public PackageObjectFactory(String packageName, ClassLoader moduleClassLoader) {
136        if (moduleClassLoader == null) {
137            throw new IllegalArgumentException(NULL_LOADER_MESSAGE);
138        }
139        if (packageName == null) {
140            throw new IllegalArgumentException(NULL_PACKAGE_MESSAGE);
141        }
142
143        packages = Set.of(packageName);
144        this.moduleClassLoader = moduleClassLoader;
145    }
146
147    /**
148     * Creates a new {@code PackageObjectFactory} instance.
149     *
150     * @param packageNames package names to use
151     * @param moduleClassLoader class loader used to load Checkstyle
152     *          core and custom modules
153     * @param moduleLoadOption loading option
154     * @throws IllegalArgumentException if moduleClassLoader is null or packageNames contains null
155     */
156    public PackageObjectFactory(Set<String> packageNames, ClassLoader moduleClassLoader,
157            ModuleLoadOption moduleLoadOption) {
158        if (moduleClassLoader == null) {
159            throw new IllegalArgumentException(NULL_LOADER_MESSAGE);
160        }
161        if (packageNames.contains(null)) {
162            throw new IllegalArgumentException(NULL_PACKAGE_MESSAGE);
163        }
164
165        // create a copy of the given set, but retain ordering
166        packages = new LinkedHashSet<>(packageNames);
167        this.moduleClassLoader = moduleClassLoader;
168        this.moduleLoadOption = moduleLoadOption;
169    }
170
171    /**
172     * Creates a new instance of a class from a given name, or that name
173     * concatenated with &quot;Check&quot;. If the name is
174     * a class name, creates an instance of the named class. Otherwise, creates
175     * an instance of a class name obtained by concatenating the given name
176     * to a package name from a given list of package names.
177     *
178     * @param name the name of a class.
179     * @return the {@code Object} created by loader.
180     * @throws CheckstyleException if an error occurs.
181     */
182    @Override
183    public Object createModule(String name) throws CheckstyleException {
184        Object instance = null;
185        // if the name is a simple class name, try to find it in maps at first
186        if (!name.contains(PACKAGE_SEPARATOR)) {
187            instance = createFromStandardCheckSet(name);
188            // find the name in third party map
189            if (instance == null) {
190                instance = createObjectFromClassPath(name);
191            }
192        }
193        if (instance == null) {
194            instance = createObject(name);
195        }
196        if (instance == null
197                && moduleLoadOption == ModuleLoadOption.TRY_IN_ALL_REGISTERED_PACKAGES) {
198            instance = createModuleByTryInEachPackage(name);
199        }
200        if (instance == null) {
201            String attemptedNames = null;
202            if (!name.contains(PACKAGE_SEPARATOR)) {
203                final String nameCheck = name + CHECK_SUFFIX;
204                attemptedNames = joinPackageNamesWithClassName(name, packages)
205                        + STRING_SEPARATOR + nameCheck + STRING_SEPARATOR
206                        + joinPackageNamesWithClassName(nameCheck, packages);
207            }
208            final LocalizedMessage exceptionMessage = new LocalizedMessage(
209                Definitions.CHECKSTYLE_BUNDLE, getClass(),
210                UNABLE_TO_INSTANTIATE_EXCEPTION_MESSAGE, name, attemptedNames);
211            throw new CheckstyleException(exceptionMessage.getMessage());
212        }
213        return instance;
214    }
215
216    /**
217     * Create object from one of Checkstyle module names.
218     *
219     * @param name name of module.
220     * @return instance of module.
221     * @throws CheckstyleException if the class fails to instantiate or there are ambiguous classes.
222     */
223    private Object createFromStandardCheckSet(String name) throws CheckstyleException {
224        final String fullModuleName = NAME_TO_FULL_MODULE_NAME.get(name);
225        Object instance = null;
226        if (fullModuleName == null) {
227            final String fullCheckModuleName =
228                    NAME_TO_FULL_MODULE_NAME.get(name + CHECK_SUFFIX);
229            if (fullCheckModuleName != null) {
230                instance = createObject(fullCheckModuleName);
231            }
232        }
233        else {
234            instance = createObject(fullModuleName);
235        }
236        return instance;
237    }
238
239    /**
240     * Create object with the help of the classpath.
241     *
242     * @param name name of module.
243     * @return instance of module if it is found in modules map and no ambiguous classes exist.
244     * @throws CheckstyleException if the class fails to instantiate or there are ambiguous classes.
245     */
246    private Object createObjectFromClassPath(String name)
247            throws CheckstyleException {
248        thirdPartyNameToFullModuleNames = lazyLoad(
249                thirdPartyNameToFullModuleNames,
250                () -> generateThirdPartyNameToFullModuleName(moduleClassLoader)
251        );
252        final Set<String> fullModuleNames = thirdPartyNameToFullModuleNames.get(name);
253        Object instance = null;
254        if (fullModuleNames == null) {
255            final Set<String> fullCheckModuleNames =
256                    thirdPartyNameToFullModuleNames.get(name + CHECK_SUFFIX);
257            if (fullCheckModuleNames != null) {
258                instance = createObjectFromFullModuleNames(name, fullCheckModuleNames);
259            }
260        }
261        else {
262            instance = createObjectFromFullModuleNames(name, fullModuleNames);
263        }
264        return instance;
265    }
266
267    /**
268     * Create Object from optional full module names.
269     * In most case, there should be only one element in {@code fullModuleNames}, otherwise
270     * an exception would be thrown.
271     *
272     * @param name name of module
273     * @param fullModuleNames the supplied full module names set
274     * @return instance of module if there is only one element in {@code fullModuleNames}
275     * @throws CheckstyleException if the class fails to instantiate or there are more than one
276     *      element in {@code fullModuleNames}
277     */
278    private Object createObjectFromFullModuleNames(String name, Set<String> fullModuleNames)
279            throws CheckstyleException {
280        final Object returnValue;
281        if (fullModuleNames.size() == 1) {
282            returnValue = createObject(fullModuleNames.iterator().next());
283        }
284        else {
285            final String optionalNames = fullModuleNames.stream()
286                    .sorted()
287                    .collect(Collectors.joining(STRING_SEPARATOR));
288            final LocalizedMessage exceptionMessage = new LocalizedMessage(
289                    Definitions.CHECKSTYLE_BUNDLE, getClass(),
290                    AMBIGUOUS_MODULE_NAME_EXCEPTION_MESSAGE, name, optionalNames);
291            throw new CheckstyleException(exceptionMessage.getMessage());
292        }
293        return returnValue;
294    }
295
296    /**
297     * Generate the map of third party Checkstyle module names to the set of their fully qualified
298     * names.
299     *
300     * @param loader the class loader used to load Checkstyle package names
301     * @return the map of third party Checkstyle module names to the set of their fully qualified
302     *      names
303     */
304    private Map<String, Set<String>> generateThirdPartyNameToFullModuleName(ClassLoader loader) {
305        Map<String, Set<String>> returnValue;
306        try {
307            returnValue = ModuleReflectionUtil.getCheckstyleModules(packages, loader).stream()
308                .collect(Collectors.groupingBy(Class::getSimpleName,
309                    Collectors.mapping(
310                        Class::getCanonicalName,
311                        Collectors.toCollection(HashSet::new))));
312        }
313        catch (IOException ignore) {
314            returnValue = Map.of();
315        }
316        return returnValue;
317    }
318
319    /**
320     * Returns simple check name from full modules names map.
321     *
322     * @param fullName name of the class for joining.
323     * @return simple check name.
324     */
325    public static String getShortFromFullModuleNames(String fullName) {
326        return NAME_TO_FULL_MODULE_NAME
327                .entrySet()
328                .stream()
329                .filter(entry -> entry.getValue().equals(fullName))
330                .findFirst()
331                .map(Entry::getKey)
332                .orElse(fullName);
333    }
334
335    /**
336     * Creates a string by joining package names with a class name.
337     *
338     * @param className name of the class for joining.
339     * @param packages packages names.
340     * @return a string which is obtained by joining package names with a class name.
341     */
342    private static String joinPackageNamesWithClassName(String className, Set<String> packages) {
343        return packages.stream().collect(
344            Collectors.joining(PACKAGE_SEPARATOR + className + STRING_SEPARATOR, "",
345                    PACKAGE_SEPARATOR + className));
346    }
347
348    /**
349     * Creates a new instance of a named class.
350     *
351     * @param className the name of the class to instantiate.
352     * @return the {@code Object} created by loader or null.
353     * @throws CheckstyleException if the class fails to instantiate.
354     */
355    private Object createObject(String className) throws CheckstyleException {
356        Class<?> clazz = null;
357
358        try {
359            clazz = Class.forName(className, true, moduleClassLoader);
360        }
361        catch (final ReflectiveOperationException | NoClassDefFoundError ignored) {
362            // ignore the exception
363        }
364
365        Object instance = null;
366
367        if (clazz != null) {
368            try {
369                instance = clazz.getDeclaredConstructor().newInstance();
370            }
371            catch (final ReflectiveOperationException exc) {
372                throw new CheckstyleException("Unable to instantiate " + className, exc);
373            }
374        }
375
376        return instance;
377    }
378
379    /**
380     * Searching to class with given name (or name concatenated with &quot;Check&quot;) in existing
381     * packages. Returns instance if class found or, otherwise, null.
382     *
383     * @param name the name of a class.
384     * @return the {@code Object} created by loader.
385     * @throws CheckstyleException if an error occurs.
386     */
387    private Object createModuleByTryInEachPackage(String name) throws CheckstyleException {
388        final List<String> possibleNames = packages.stream()
389            .map(packageName -> packageName + PACKAGE_SEPARATOR + name)
390            .flatMap(className -> Stream.of(className, className + CHECK_SUFFIX))
391            .toList();
392        Object instance = null;
393        for (String possibleName : possibleNames) {
394            instance = createObject(possibleName);
395            if (instance != null) {
396                break;
397            }
398        }
399        return instance;
400    }
401
402    /**
403     * Initialize object by supplier if object is null.
404     *
405     * @param <T> type of object
406     * @param object object to initialize
407     * @param supplier function to initialize if object is null
408     * @return object as it was provided in method or initialized
409     */
410    private static <T> T lazyLoad(T object, Supplier<T> supplier) {
411        final T result;
412        if (object == null) {
413            result = supplier.get();
414        }
415        else {
416            result = object;
417        }
418        return result;
419    }
420
421    /**
422     * Fill short-to-full module names map.
423     */
424    private static void fillShortToFullModuleNamesMap() {
425        fillChecksFromAnnotationPackage();
426        fillChecksFromBlocksPackage();
427        fillChecksFromCodingPackage();
428        fillChecksFromDesignPackage();
429        fillChecksFromHeaderPackage();
430        fillChecksFromImportsPackage();
431        fillChecksFromIndentationPackage();
432        fillChecksFromJavadocPackage();
433        fillChecksFromMetricsPackage();
434        fillChecksFromModifierPackage();
435        fillChecksFromNamingPackage();
436        fillChecksFromRegexpPackage();
437        fillChecksFromSizesPackage();
438        fillChecksFromWhitespacePackage();
439        fillModulesFromChecksPackage();
440        fillModulesFromFilefiltersPackage();
441        fillModulesFromFiltersPackage();
442        fillModulesFromCheckstylePackage();
443    }
444
445    /**
446     * Fill short-to-full module names map with Checks from annotation package.
447     */
448    private static void fillChecksFromAnnotationPackage() {
449        NAME_TO_FULL_MODULE_NAME.put("AnnotationLocationCheck",
450                BASE_PACKAGE + ".checks.annotation.AnnotationLocationCheck");
451        NAME_TO_FULL_MODULE_NAME.put("AnnotationOnSameLineCheck",
452                BASE_PACKAGE + ".checks.annotation.AnnotationOnSameLineCheck");
453        NAME_TO_FULL_MODULE_NAME.put("AnnotationUseStyleCheck",
454                BASE_PACKAGE + ".checks.annotation.AnnotationUseStyleCheck");
455        NAME_TO_FULL_MODULE_NAME.put("MissingDeprecatedCheck",
456                BASE_PACKAGE + ".checks.annotation.MissingDeprecatedCheck");
457        NAME_TO_FULL_MODULE_NAME.put("MissingOverrideCheck",
458                BASE_PACKAGE + ".checks.annotation.MissingOverrideCheck");
459        NAME_TO_FULL_MODULE_NAME.put("MissingOverrideOnRecordAccessorCheck",
460                BASE_PACKAGE + ".checks.annotation.MissingOverrideOnRecordAccessorCheck");
461        NAME_TO_FULL_MODULE_NAME.put("PackageAnnotationCheck",
462                BASE_PACKAGE + ".checks.annotation.PackageAnnotationCheck");
463        NAME_TO_FULL_MODULE_NAME.put("SuppressWarningsCheck",
464                BASE_PACKAGE + ".checks.annotation.SuppressWarningsCheck");
465    }
466
467    /**
468     * Fill short-to-full module names map with Checks from blocks package.
469     */
470    private static void fillChecksFromBlocksPackage() {
471        NAME_TO_FULL_MODULE_NAME.put("AvoidNestedBlocksCheck",
472                BASE_PACKAGE + ".checks.blocks.AvoidNestedBlocksCheck");
473        NAME_TO_FULL_MODULE_NAME.put("EmptyBlockCheck",
474                BASE_PACKAGE + ".checks.blocks.EmptyBlockCheck");
475        NAME_TO_FULL_MODULE_NAME.put("EmptyCatchBlockCheck",
476                BASE_PACKAGE + ".checks.blocks.EmptyCatchBlockCheck");
477        NAME_TO_FULL_MODULE_NAME.put("LeftCurlyCheck",
478                BASE_PACKAGE + ".checks.blocks.LeftCurlyCheck");
479        NAME_TO_FULL_MODULE_NAME.put("NeedBracesCheck",
480                BASE_PACKAGE + ".checks.blocks.NeedBracesCheck");
481        NAME_TO_FULL_MODULE_NAME.put("RightCurlyCheck",
482                BASE_PACKAGE + ".checks.blocks.RightCurlyCheck");
483    }
484
485    /**
486     * Fill short-to-full module names map with Checks from coding package.
487     */
488    // -@cs[ExecutableStatementCount] splitting this method is not reasonable.
489    // -@cs[JavaNCSS] splitting this method is not reasonable.
490    private static void fillChecksFromCodingPackage() {
491        NAME_TO_FULL_MODULE_NAME.put("ArrayTrailingCommaCheck",
492                BASE_PACKAGE + ".checks.coding.ArrayTrailingCommaCheck");
493        NAME_TO_FULL_MODULE_NAME.put("AvoidDoubleBraceInitializationCheck",
494                BASE_PACKAGE + ".checks.coding.AvoidDoubleBraceInitializationCheck");
495        NAME_TO_FULL_MODULE_NAME.put("AvoidInlineConditionalsCheck",
496                BASE_PACKAGE + ".checks.coding.AvoidInlineConditionalsCheck");
497        NAME_TO_FULL_MODULE_NAME.put("AvoidNoArgumentSuperConstructorCallCheck",
498                BASE_PACKAGE + ".checks.coding.AvoidNoArgumentSuperConstructorCallCheck");
499        NAME_TO_FULL_MODULE_NAME.put("ConstructorsDeclarationGroupingCheck",
500                BASE_PACKAGE + ".checks.coding.ConstructorsDeclarationGroupingCheck");
501        NAME_TO_FULL_MODULE_NAME.put("CovariantEqualsCheck",
502                BASE_PACKAGE + ".checks.coding.CovariantEqualsCheck");
503        NAME_TO_FULL_MODULE_NAME.put("DeclarationOrderCheck",
504                BASE_PACKAGE + ".checks.coding.DeclarationOrderCheck");
505        NAME_TO_FULL_MODULE_NAME.put("DefaultComesLastCheck",
506                BASE_PACKAGE + ".checks.coding.DefaultComesLastCheck");
507        NAME_TO_FULL_MODULE_NAME.put("EmptyStatementCheck",
508                BASE_PACKAGE + ".checks.coding.EmptyStatementCheck");
509        NAME_TO_FULL_MODULE_NAME.put("EqualsAvoidNullCheck",
510                BASE_PACKAGE + ".checks.coding.EqualsAvoidNullCheck");
511        NAME_TO_FULL_MODULE_NAME.put("EqualsHashCodeCheck",
512                BASE_PACKAGE + ".checks.coding.EqualsHashCodeCheck");
513        NAME_TO_FULL_MODULE_NAME.put("ExplicitInitializationCheck",
514                BASE_PACKAGE + ".checks.coding.ExplicitInitializationCheck");
515        NAME_TO_FULL_MODULE_NAME.put("FallThroughCheck",
516                BASE_PACKAGE + ".checks.coding.FallThroughCheck");
517        NAME_TO_FULL_MODULE_NAME.put("FinalLocalVariableCheck",
518                BASE_PACKAGE + ".checks.coding.FinalLocalVariableCheck");
519        NAME_TO_FULL_MODULE_NAME.put("HiddenFieldCheck",
520                BASE_PACKAGE + ".checks.coding.HiddenFieldCheck");
521        NAME_TO_FULL_MODULE_NAME.put("IllegalCatchCheck",
522                BASE_PACKAGE + ".checks.coding.IllegalCatchCheck");
523        NAME_TO_FULL_MODULE_NAME.put("IllegalInstantiationCheck",
524                BASE_PACKAGE + ".checks.coding.IllegalInstantiationCheck");
525        NAME_TO_FULL_MODULE_NAME.put("IllegalSymbolCheck",
526                BASE_PACKAGE + ".checks.coding.IllegalSymbolCheck");
527        NAME_TO_FULL_MODULE_NAME.put("IllegalThrowsCheck",
528                BASE_PACKAGE + ".checks.coding.IllegalThrowsCheck");
529        NAME_TO_FULL_MODULE_NAME.put("IllegalTokenCheck",
530                BASE_PACKAGE + ".checks.coding.IllegalTokenCheck");
531        NAME_TO_FULL_MODULE_NAME.put("IllegalTokenTextCheck",
532                BASE_PACKAGE + ".checks.coding.IllegalTokenTextCheck");
533        NAME_TO_FULL_MODULE_NAME.put("IllegalTypeCheck",
534                BASE_PACKAGE + ".checks.coding.IllegalTypeCheck");
535        NAME_TO_FULL_MODULE_NAME.put("InnerAssignmentCheck",
536                BASE_PACKAGE + ".checks.coding.InnerAssignmentCheck");
537        NAME_TO_FULL_MODULE_NAME.put("MagicNumberCheck",
538                BASE_PACKAGE + ".checks.coding.MagicNumberCheck");
539        NAME_TO_FULL_MODULE_NAME.put("MissingCtorCheck",
540                BASE_PACKAGE + ".checks.coding.MissingCtorCheck");
541        NAME_TO_FULL_MODULE_NAME.put("MissingNullCaseInSwitchCheck",
542                BASE_PACKAGE + ".checks.coding.MissingNullCaseInSwitchCheck");
543        NAME_TO_FULL_MODULE_NAME.put("MissingSwitchDefaultCheck",
544                BASE_PACKAGE + ".checks.coding.MissingSwitchDefaultCheck");
545        NAME_TO_FULL_MODULE_NAME.put("ModifiedControlVariableCheck",
546                BASE_PACKAGE + ".checks.coding.ModifiedControlVariableCheck");
547        NAME_TO_FULL_MODULE_NAME.put("MultipleStringLiteralsCheck",
548                BASE_PACKAGE + ".checks.coding.MultipleStringLiteralsCheck");
549        NAME_TO_FULL_MODULE_NAME.put("MultipleVariableDeclarationsCheck",
550                BASE_PACKAGE + ".checks.coding.MultipleVariableDeclarationsCheck");
551        NAME_TO_FULL_MODULE_NAME.put("NestedForDepthCheck",
552                BASE_PACKAGE + ".checks.coding.NestedForDepthCheck");
553        NAME_TO_FULL_MODULE_NAME.put("NestedIfDepthCheck",
554                BASE_PACKAGE + ".checks.coding.NestedIfDepthCheck");
555        NAME_TO_FULL_MODULE_NAME.put("NestedTryDepthCheck",
556                BASE_PACKAGE + ".checks.coding.NestedTryDepthCheck");
557        NAME_TO_FULL_MODULE_NAME.put("NoCloneCheck",
558                BASE_PACKAGE + ".checks.coding.NoCloneCheck");
559        NAME_TO_FULL_MODULE_NAME.put("NoEnumTrailingCommaCheck",
560                BASE_PACKAGE + ".checks.coding.NoEnumTrailingCommaCheck");
561        NAME_TO_FULL_MODULE_NAME.put("NoFinalizerCheck",
562                BASE_PACKAGE + ".checks.coding.NoFinalizerCheck");
563        NAME_TO_FULL_MODULE_NAME.put("OneStatementPerLineCheck",
564                BASE_PACKAGE + ".checks.coding.OneStatementPerLineCheck");
565        NAME_TO_FULL_MODULE_NAME.put("OverloadMethodsDeclarationOrderCheck",
566                BASE_PACKAGE + ".checks.coding.OverloadMethodsDeclarationOrderCheck");
567        NAME_TO_FULL_MODULE_NAME.put("PackageDeclarationCheck",
568                BASE_PACKAGE + ".checks.coding.PackageDeclarationCheck");
569        NAME_TO_FULL_MODULE_NAME.put("PatternVariableAssignmentCheck",
570                BASE_PACKAGE + ".checks.coding.PatternVariableAssignmentCheck");
571        NAME_TO_FULL_MODULE_NAME.put("ParameterAssignmentCheck",
572                BASE_PACKAGE + ".checks.coding.ParameterAssignmentCheck");
573        NAME_TO_FULL_MODULE_NAME.put("RequireThisCheck",
574                BASE_PACKAGE + ".checks.coding.RequireThisCheck");
575        NAME_TO_FULL_MODULE_NAME.put("ReturnCountCheck",
576                BASE_PACKAGE + ".checks.coding.ReturnCountCheck");
577        NAME_TO_FULL_MODULE_NAME.put("SimplifyBooleanExpressionCheck",
578                BASE_PACKAGE + ".checks.coding.SimplifyBooleanExpressionCheck");
579        NAME_TO_FULL_MODULE_NAME.put("SimplifyBooleanReturnCheck",
580                BASE_PACKAGE + ".checks.coding.SimplifyBooleanReturnCheck");
581        NAME_TO_FULL_MODULE_NAME.put("StringLiteralEqualityCheck",
582                BASE_PACKAGE + ".checks.coding.StringLiteralEqualityCheck");
583        NAME_TO_FULL_MODULE_NAME.put("SuperCloneCheck",
584                BASE_PACKAGE + ".checks.coding.SuperCloneCheck");
585        NAME_TO_FULL_MODULE_NAME.put("SuperFinalizeCheck",
586                BASE_PACKAGE + ".checks.coding.SuperFinalizeCheck");
587        NAME_TO_FULL_MODULE_NAME.put("UnnecessaryParenthesesCheck",
588                BASE_PACKAGE + ".checks.coding.UnnecessaryParenthesesCheck");
589        NAME_TO_FULL_MODULE_NAME.put("UnnecessarySemicolonAfterOuterTypeDeclarationCheck",
590                BASE_PACKAGE
591                        + ".checks.coding.UnnecessarySemicolonAfterOuterTypeDeclarationCheck");
592        NAME_TO_FULL_MODULE_NAME.put("UnnecessarySemicolonAfterTypeMemberDeclarationCheck",
593                BASE_PACKAGE
594                    + ".checks.coding.UnnecessarySemicolonAfterTypeMemberDeclarationCheck");
595        NAME_TO_FULL_MODULE_NAME.put("UnnecessarySemicolonInEnumerationCheck",
596                BASE_PACKAGE + ".checks.coding.UnnecessarySemicolonInEnumerationCheck");
597        NAME_TO_FULL_MODULE_NAME.put("UnnecessarySemicolonInTryWithResourcesCheck",
598                BASE_PACKAGE + ".checks.coding.UnnecessarySemicolonInTryWithResourcesCheck");
599        NAME_TO_FULL_MODULE_NAME.put("UseEnhancedSwitchCheck",
600            BASE_PACKAGE + ".checks.coding.UseEnhancedSwitchCheck");
601        NAME_TO_FULL_MODULE_NAME.put("VariableDeclarationUsageDistanceCheck",
602                BASE_PACKAGE + ".checks.coding.VariableDeclarationUsageDistanceCheck");
603        NAME_TO_FULL_MODULE_NAME.put("WhenShouldBeUsedCheck",
604                BASE_PACKAGE + ".checks.coding.WhenShouldBeUsedCheck");
605        NAME_TO_FULL_MODULE_NAME.put("NoArrayTrailingCommaCheck",
606                BASE_PACKAGE + ".checks.coding.NoArrayTrailingCommaCheck");
607        NAME_TO_FULL_MODULE_NAME.put("MatchXpathCheck",
608                BASE_PACKAGE + ".checks.coding.MatchXpathCheck");
609        NAME_TO_FULL_MODULE_NAME.put("TextBlockGoogleStyleFormattingCheck",
610                BASE_PACKAGE + ".checks.coding.TextBlockGoogleStyleFormattingCheck");
611        NAME_TO_FULL_MODULE_NAME.put("UnusedLocalVariableCheck",
612                BASE_PACKAGE + ".checks.coding.UnusedLocalVariableCheck");
613        NAME_TO_FULL_MODULE_NAME.put("UnusedCatchParameterShouldBeUnnamedCheck",
614                BASE_PACKAGE + ".checks.coding.UnusedCatchParameterShouldBeUnnamedCheck");
615        NAME_TO_FULL_MODULE_NAME.put("UnusedLambdaParameterShouldBeUnnamedCheck",
616                BASE_PACKAGE + ".checks.coding.UnusedLambdaParameterShouldBeUnnamedCheck");
617        NAME_TO_FULL_MODULE_NAME.put("UnnecessaryNullCheckWithInstanceOfCheck",
618                BASE_PACKAGE + ".checks.coding.UnnecessaryNullCheckWithInstanceOfCheck");
619        NAME_TO_FULL_MODULE_NAME.put("UnusedTryResourceShouldBeUnnamedCheck",
620                BASE_PACKAGE + ".checks.coding.UnusedTryResourceShouldBeUnnamedCheck");
621        NAME_TO_FULL_MODULE_NAME.put("UnnecessaryTypeArgumentsWithRecordPatternCheck",
622                BASE_PACKAGE + ".checks.coding.UnnecessaryTypeArgumentsWithRecordPatternCheck");
623    }
624
625    /**
626     * Fill short-to-full module names map with Checks from design package.
627     */
628    private static void fillChecksFromDesignPackage() {
629        NAME_TO_FULL_MODULE_NAME.put("DesignForExtensionCheck",
630                BASE_PACKAGE + ".checks.design.DesignForExtensionCheck");
631        NAME_TO_FULL_MODULE_NAME.put("FinalClassCheck",
632                BASE_PACKAGE + ".checks.design.FinalClassCheck");
633        NAME_TO_FULL_MODULE_NAME.put("HideUtilityClassConstructorCheck",
634                BASE_PACKAGE + ".checks.design.HideUtilityClassConstructorCheck");
635        NAME_TO_FULL_MODULE_NAME.put("InnerTypeLastCheck",
636                BASE_PACKAGE + ".checks.design.InnerTypeLastCheck");
637        NAME_TO_FULL_MODULE_NAME.put("InterfaceIsTypeCheck",
638                BASE_PACKAGE + ".checks.design.InterfaceIsTypeCheck");
639        NAME_TO_FULL_MODULE_NAME.put("MutableExceptionCheck",
640                BASE_PACKAGE + ".checks.design.MutableExceptionCheck");
641        NAME_TO_FULL_MODULE_NAME.put("OneTopLevelClassCheck",
642                BASE_PACKAGE + ".checks.design.OneTopLevelClassCheck");
643        NAME_TO_FULL_MODULE_NAME.put("SealedShouldHavePermitsListCheck",
644                BASE_PACKAGE + ".checks.design.SealedShouldHavePermitsListCheck");
645        NAME_TO_FULL_MODULE_NAME.put("ThrowsCountCheck",
646                BASE_PACKAGE + ".checks.design.ThrowsCountCheck");
647        NAME_TO_FULL_MODULE_NAME.put("VisibilityModifierCheck",
648                BASE_PACKAGE + ".checks.design.VisibilityModifierCheck");
649    }
650
651    /**
652     * Fill short-to-full module names map with Checks from header package.
653     */
654    private static void fillChecksFromHeaderPackage() {
655        NAME_TO_FULL_MODULE_NAME.put("HeaderCheck",
656                BASE_PACKAGE + ".checks.header.HeaderCheck");
657        NAME_TO_FULL_MODULE_NAME.put("RegexpHeaderCheck",
658                BASE_PACKAGE + ".checks.header.RegexpHeaderCheck");
659        NAME_TO_FULL_MODULE_NAME.put("MultiFileRegexpHeaderCheck",
660                BASE_PACKAGE + ".checks.header.MultiFileRegexpHeaderCheck");
661    }
662
663    /**
664     * Fill short-to-full module names map with Checks from imports package.
665     */
666    private static void fillChecksFromImportsPackage() {
667        NAME_TO_FULL_MODULE_NAME.put("AvoidStarImportCheck",
668                BASE_PACKAGE + ".checks.imports.AvoidStarImportCheck");
669        NAME_TO_FULL_MODULE_NAME.put("AvoidStaticImportCheck",
670                BASE_PACKAGE + ".checks.imports.AvoidStaticImportCheck");
671        NAME_TO_FULL_MODULE_NAME.put("CustomImportOrderCheck",
672                BASE_PACKAGE + ".checks.imports.CustomImportOrderCheck");
673        NAME_TO_FULL_MODULE_NAME.put("IllegalImportCheck",
674                BASE_PACKAGE + ".checks.imports.IllegalImportCheck");
675        NAME_TO_FULL_MODULE_NAME.put("ImportControlCheck",
676                BASE_PACKAGE + ".checks.imports.ImportControlCheck");
677        NAME_TO_FULL_MODULE_NAME.put("ImportOrderCheck",
678                BASE_PACKAGE + ".checks.imports.ImportOrderCheck");
679        NAME_TO_FULL_MODULE_NAME.put("RedundantImportCheck",
680                BASE_PACKAGE + ".checks.imports.RedundantImportCheck");
681        NAME_TO_FULL_MODULE_NAME.put("UnusedImportsCheck",
682                BASE_PACKAGE + ".checks.imports.UnusedImportsCheck");
683    }
684
685    /**
686     * Fill short-to-full module names map with Checks from indentation package.
687     */
688    private static void fillChecksFromIndentationPackage() {
689        NAME_TO_FULL_MODULE_NAME.put("CommentsIndentationCheck",
690                BASE_PACKAGE + ".checks.indentation.CommentsIndentationCheck");
691        NAME_TO_FULL_MODULE_NAME.put("IndentationCheck",
692                BASE_PACKAGE + ".checks.indentation.IndentationCheck");
693    }
694
695    /**
696     * Fill short-to-full module names map with Checks from javadoc package.
697     */
698    private static void fillChecksFromJavadocPackage() {
699        NAME_TO_FULL_MODULE_NAME.put("AtclauseOrderCheck",
700                BASE_PACKAGE + ".checks.javadoc.AtclauseOrderCheck");
701        NAME_TO_FULL_MODULE_NAME.put("InvalidJavadocPositionCheck",
702                BASE_PACKAGE + ".checks.javadoc.InvalidJavadocPositionCheck");
703        NAME_TO_FULL_MODULE_NAME.put("JavadocBlockTagLocationCheck",
704                BASE_PACKAGE + ".checks.javadoc.JavadocBlockTagLocationCheck");
705        NAME_TO_FULL_MODULE_NAME.put("JavadocContentLocationCheck",
706                BASE_PACKAGE + ".checks.javadoc.JavadocContentLocationCheck");
707        NAME_TO_FULL_MODULE_NAME.put("JavadocLeadingAsteriskAlignCheck",
708                BASE_PACKAGE + ".checks.javadoc.JavadocLeadingAsteriskAlignCheck");
709        NAME_TO_FULL_MODULE_NAME.put("JavadocMethodCheck",
710                BASE_PACKAGE + ".checks.javadoc.JavadocMethodCheck");
711        NAME_TO_FULL_MODULE_NAME.put("JavadocMissingLeadingAsteriskCheck",
712                BASE_PACKAGE + ".checks.javadoc.JavadocMissingLeadingAsteriskCheck");
713        NAME_TO_FULL_MODULE_NAME.put("JavadocMissingWhitespaceAfterAsteriskCheck",
714                BASE_PACKAGE + ".checks.javadoc.JavadocMissingWhitespaceAfterAsteriskCheck");
715        NAME_TO_FULL_MODULE_NAME.put("JavadocPackageCheck",
716                BASE_PACKAGE + ".checks.javadoc.JavadocPackageCheck");
717        NAME_TO_FULL_MODULE_NAME.put("JavadocParagraphCheck",
718                BASE_PACKAGE + ".checks.javadoc.JavadocParagraphCheck");
719        NAME_TO_FULL_MODULE_NAME.put("JavadocTagContinuationIndentationCheck",
720                BASE_PACKAGE + ".checks.javadoc.JavadocTagContinuationIndentationCheck");
721        NAME_TO_FULL_MODULE_NAME.put("JavadocTypeCheck",
722                BASE_PACKAGE + ".checks.javadoc.JavadocTypeCheck");
723        NAME_TO_FULL_MODULE_NAME.put("JavadocVariableCheck",
724                BASE_PACKAGE + ".checks.javadoc.JavadocVariableCheck");
725        NAME_TO_FULL_MODULE_NAME.put("MissingJavadocMethodCheck",
726                BASE_PACKAGE + ".checks.javadoc.MissingJavadocMethodCheck");
727        NAME_TO_FULL_MODULE_NAME.put("MissingJavadocPackageCheck",
728                BASE_PACKAGE + ".checks.javadoc.MissingJavadocPackageCheck");
729        NAME_TO_FULL_MODULE_NAME.put("MissingJavadocTypeCheck",
730                BASE_PACKAGE + ".checks.javadoc.MissingJavadocTypeCheck");
731        NAME_TO_FULL_MODULE_NAME.put("NonEmptyAtclauseDescriptionCheck",
732                BASE_PACKAGE + ".checks.javadoc.NonEmptyAtclauseDescriptionCheck");
733        NAME_TO_FULL_MODULE_NAME.put("PreferJavadocInlineTagsCheck",
734                BASE_PACKAGE + ".checks.javadoc.PreferJavadocInlineTagsCheck");
735        NAME_TO_FULL_MODULE_NAME.put("RequireEmptyLineBeforeBlockTagGroupCheck",
736                BASE_PACKAGE + ".checks.javadoc.RequireEmptyLineBeforeBlockTagGroupCheck");
737        NAME_TO_FULL_MODULE_NAME.put("SingleLineJavadocCheck",
738                BASE_PACKAGE + ".checks.javadoc.SingleLineJavadocCheck");
739        NAME_TO_FULL_MODULE_NAME.put("SummaryJavadocCheck",
740                BASE_PACKAGE + ".checks.javadoc.SummaryJavadocCheck");
741        NAME_TO_FULL_MODULE_NAME.put("WriteTagCheck",
742                BASE_PACKAGE + ".checks.javadoc.WriteTagCheck");
743    }
744
745    /**
746     * Fill short-to-full module names map with Checks from metrics package.
747     */
748    private static void fillChecksFromMetricsPackage() {
749        NAME_TO_FULL_MODULE_NAME.put("BooleanExpressionComplexityCheck",
750                BASE_PACKAGE + ".checks.metrics.BooleanExpressionComplexityCheck");
751        NAME_TO_FULL_MODULE_NAME.put("ClassDataAbstractionCouplingCheck",
752                BASE_PACKAGE + ".checks.metrics.ClassDataAbstractionCouplingCheck");
753        NAME_TO_FULL_MODULE_NAME.put("ClassFanOutComplexityCheck",
754                BASE_PACKAGE + ".checks.metrics.ClassFanOutComplexityCheck");
755        NAME_TO_FULL_MODULE_NAME.put("CyclomaticComplexityCheck",
756                BASE_PACKAGE + ".checks.metrics.CyclomaticComplexityCheck");
757        NAME_TO_FULL_MODULE_NAME.put("JavaNCSSCheck",
758                BASE_PACKAGE + ".checks.metrics.JavaNCSSCheck");
759        NAME_TO_FULL_MODULE_NAME.put("NPathComplexityCheck",
760                BASE_PACKAGE + ".checks.metrics.NPathComplexityCheck");
761    }
762
763    /**
764     * Fill short-to-full module names map with Checks from modifier package.
765     */
766    private static void fillChecksFromModifierPackage() {
767        NAME_TO_FULL_MODULE_NAME.put("AnnotatedDeclarationVisibilityCheck",
768                BASE_PACKAGE + ".checks.modifier.AnnotatedDeclarationVisibilityCheck");
769        NAME_TO_FULL_MODULE_NAME.put("ClassMemberImpliedModifierCheck",
770            BASE_PACKAGE + ".checks.modifier.ClassMemberImpliedModifierCheck");
771        NAME_TO_FULL_MODULE_NAME.put("InterfaceMemberImpliedModifierCheck",
772            BASE_PACKAGE + ".checks.modifier.InterfaceMemberImpliedModifierCheck");
773        NAME_TO_FULL_MODULE_NAME.put("ModifierOrderCheck",
774                BASE_PACKAGE + ".checks.modifier.ModifierOrderCheck");
775        NAME_TO_FULL_MODULE_NAME.put("RedundantModifierCheck",
776                BASE_PACKAGE + ".checks.modifier.RedundantModifierCheck");
777    }
778
779    /**
780     * Fill short-to-full module names map with Checks from naming package.
781     */
782    private static void fillChecksFromNamingPackage() {
783        NAME_TO_FULL_MODULE_NAME.put("AbbreviationAsWordInNameCheck",
784                BASE_PACKAGE + ".checks.naming.AbbreviationAsWordInNameCheck");
785        NAME_TO_FULL_MODULE_NAME.put("AbstractClassNameCheck",
786                BASE_PACKAGE + ".checks.naming.AbstractClassNameCheck");
787        NAME_TO_FULL_MODULE_NAME.put("CatchParameterNameCheck",
788                BASE_PACKAGE + ".checks.naming.CatchParameterNameCheck");
789        NAME_TO_FULL_MODULE_NAME.put("ClassTypeParameterNameCheck",
790                BASE_PACKAGE + ".checks.naming.ClassTypeParameterNameCheck");
791        NAME_TO_FULL_MODULE_NAME.put("ConstantNameCheck",
792                BASE_PACKAGE + ".checks.naming.ConstantNameCheck");
793        NAME_TO_FULL_MODULE_NAME.put("InterfaceTypeParameterNameCheck",
794                BASE_PACKAGE + ".checks.naming.InterfaceTypeParameterNameCheck");
795        NAME_TO_FULL_MODULE_NAME.put("LambdaParameterNameCheck",
796                BASE_PACKAGE + ".checks.naming.LambdaParameterNameCheck");
797        NAME_TO_FULL_MODULE_NAME.put("LocalFinalVariableNameCheck",
798                BASE_PACKAGE + ".checks.naming.LocalFinalVariableNameCheck");
799        NAME_TO_FULL_MODULE_NAME.put("LocalVariableNameCheck",
800                BASE_PACKAGE + ".checks.naming.LocalVariableNameCheck");
801        NAME_TO_FULL_MODULE_NAME.put("MemberNameCheck",
802                BASE_PACKAGE + ".checks.naming.MemberNameCheck");
803        NAME_TO_FULL_MODULE_NAME.put("GoogleNonConstantFieldNameCheck",
804                BASE_PACKAGE + ".checks.naming.GoogleNonConstantFieldNameCheck");
805        NAME_TO_FULL_MODULE_NAME.put("MethodNameCheck",
806                BASE_PACKAGE + ".checks.naming.MethodNameCheck");
807        NAME_TO_FULL_MODULE_NAME.put("MethodTypeParameterNameCheck",
808                BASE_PACKAGE + ".checks.naming.MethodTypeParameterNameCheck");
809        NAME_TO_FULL_MODULE_NAME.put("PackageNameCheck",
810                BASE_PACKAGE + ".checks.naming.PackageNameCheck");
811        NAME_TO_FULL_MODULE_NAME.put("ParameterNameCheck",
812                BASE_PACKAGE + ".checks.naming.ParameterNameCheck");
813        NAME_TO_FULL_MODULE_NAME.put("RecordComponentNameCheck",
814                BASE_PACKAGE + ".checks.naming.RecordComponentNameCheck");
815        NAME_TO_FULL_MODULE_NAME.put("RecordTypeParameterNameCheck",
816                BASE_PACKAGE + ".checks.naming.RecordTypeParameterNameCheck");
817        NAME_TO_FULL_MODULE_NAME.put("StaticVariableNameCheck",
818                BASE_PACKAGE + ".checks.naming.StaticVariableNameCheck");
819        NAME_TO_FULL_MODULE_NAME.put("TypeNameCheck",
820                BASE_PACKAGE + ".checks.naming.TypeNameCheck");
821        NAME_TO_FULL_MODULE_NAME.put("PatternVariableNameCheck",
822                BASE_PACKAGE + ".checks.naming.PatternVariableNameCheck");
823        NAME_TO_FULL_MODULE_NAME.put("IllegalIdentifierNameCheck",
824            BASE_PACKAGE + ".checks.naming.IllegalIdentifierNameCheck");
825    }
826
827    /**
828     * Fill short-to-full module names map with Checks from regexp package.
829     */
830    private static void fillChecksFromRegexpPackage() {
831        NAME_TO_FULL_MODULE_NAME.put("RegexpCheck",
832                BASE_PACKAGE + ".checks.regexp.RegexpCheck");
833        NAME_TO_FULL_MODULE_NAME.put("RegexpMultilineCheck",
834                BASE_PACKAGE + ".checks.regexp.RegexpMultilineCheck");
835        NAME_TO_FULL_MODULE_NAME.put("RegexpOnFilenameCheck",
836                BASE_PACKAGE + ".checks.regexp.RegexpOnFilenameCheck");
837        NAME_TO_FULL_MODULE_NAME.put("RegexpSinglelineCheck",
838                BASE_PACKAGE + ".checks.regexp.RegexpSinglelineCheck");
839        NAME_TO_FULL_MODULE_NAME.put("RegexpSinglelineJavaCheck",
840                BASE_PACKAGE + ".checks.regexp.RegexpSinglelineJavaCheck");
841    }
842
843    /**
844     * Fill short-to-full module names map with Checks from sizes package.
845     */
846    private static void fillChecksFromSizesPackage() {
847        NAME_TO_FULL_MODULE_NAME.put("AnonInnerLengthCheck",
848                BASE_PACKAGE + ".checks.sizes.AnonInnerLengthCheck");
849        NAME_TO_FULL_MODULE_NAME.put("ExecutableStatementCountCheck",
850                BASE_PACKAGE + ".checks.sizes.ExecutableStatementCountCheck");
851        NAME_TO_FULL_MODULE_NAME.put("FileLengthCheck",
852                BASE_PACKAGE + ".checks.sizes.FileLengthCheck");
853        NAME_TO_FULL_MODULE_NAME.put("LambdaBodyLengthCheck",
854                BASE_PACKAGE + ".checks.sizes.LambdaBodyLengthCheck");
855        NAME_TO_FULL_MODULE_NAME.put("LineLengthCheck",
856                BASE_PACKAGE + ".checks.sizes.LineLengthCheck");
857        NAME_TO_FULL_MODULE_NAME.put("MethodCountCheck",
858                BASE_PACKAGE + ".checks.sizes.MethodCountCheck");
859        NAME_TO_FULL_MODULE_NAME.put("MethodLengthCheck",
860                BASE_PACKAGE + ".checks.sizes.MethodLengthCheck");
861        NAME_TO_FULL_MODULE_NAME.put("OuterTypeNumberCheck",
862                BASE_PACKAGE + ".checks.sizes.OuterTypeNumberCheck");
863        NAME_TO_FULL_MODULE_NAME.put("ParameterNumberCheck",
864                BASE_PACKAGE + ".checks.sizes.ParameterNumberCheck");
865        NAME_TO_FULL_MODULE_NAME.put("RecordComponentNumberCheck",
866                BASE_PACKAGE + ".checks.sizes.RecordComponentNumberCheck");
867    }
868
869    /**
870     * Fill short-to-full module names map with Checks from whitespace package.
871     */
872    private static void fillChecksFromWhitespacePackage() {
873        NAME_TO_FULL_MODULE_NAME.put("EmptyForInitializerPadCheck",
874                BASE_PACKAGE + ".checks.whitespace.EmptyForInitializerPadCheck");
875        NAME_TO_FULL_MODULE_NAME.put("EmptyForIteratorPadCheck",
876                BASE_PACKAGE + ".checks.whitespace.EmptyForIteratorPadCheck");
877        NAME_TO_FULL_MODULE_NAME.put("EmptyLineSeparatorCheck",
878                BASE_PACKAGE + ".checks.whitespace.EmptyLineSeparatorCheck");
879        NAME_TO_FULL_MODULE_NAME.put("FileTabCharacterCheck",
880                BASE_PACKAGE + ".checks.whitespace.FileTabCharacterCheck");
881        NAME_TO_FULL_MODULE_NAME.put("GenericWhitespaceCheck",
882                BASE_PACKAGE + ".checks.whitespace.GenericWhitespaceCheck");
883        NAME_TO_FULL_MODULE_NAME.put("MethodParamPadCheck",
884                BASE_PACKAGE + ".checks.whitespace.MethodParamPadCheck");
885        NAME_TO_FULL_MODULE_NAME.put("NoLineWrapCheck",
886                BASE_PACKAGE + ".checks.whitespace.NoLineWrapCheck");
887        NAME_TO_FULL_MODULE_NAME.put("NoWhitespaceAfterCheck",
888                BASE_PACKAGE + ".checks.whitespace.NoWhitespaceAfterCheck");
889        NAME_TO_FULL_MODULE_NAME.put("NoWhitespaceBeforeCheck",
890                BASE_PACKAGE + ".checks.whitespace.NoWhitespaceBeforeCheck");
891        NAME_TO_FULL_MODULE_NAME.put("NoWhitespaceBeforeCaseDefaultColonCheck",
892                BASE_PACKAGE + ".checks.whitespace.NoWhitespaceBeforeCaseDefaultColonCheck");
893        NAME_TO_FULL_MODULE_NAME.put("OperatorWrapCheck",
894                BASE_PACKAGE + ".checks.whitespace.OperatorWrapCheck");
895        NAME_TO_FULL_MODULE_NAME.put("ParenPadCheck",
896                BASE_PACKAGE + ".checks.whitespace.ParenPadCheck");
897        NAME_TO_FULL_MODULE_NAME.put("SeparatorWrapCheck",
898                BASE_PACKAGE + ".checks.whitespace.SeparatorWrapCheck");
899        NAME_TO_FULL_MODULE_NAME.put("SingleSpaceSeparatorCheck",
900                BASE_PACKAGE + ".checks.whitespace.SingleSpaceSeparatorCheck");
901        NAME_TO_FULL_MODULE_NAME.put("TypeBodyPaddingCheck",
902                BASE_PACKAGE + ".checks.whitespace.TypeBodyPaddingCheck");
903        NAME_TO_FULL_MODULE_NAME.put("TypecastParenPadCheck",
904                BASE_PACKAGE + ".checks.whitespace.TypecastParenPadCheck");
905        NAME_TO_FULL_MODULE_NAME.put("WhitespaceAfterCheck",
906                BASE_PACKAGE + ".checks.whitespace.WhitespaceAfterCheck");
907        NAME_TO_FULL_MODULE_NAME.put("WhitespaceAroundCheck",
908                BASE_PACKAGE + ".checks.whitespace.WhitespaceAroundCheck");
909    }
910
911    /**
912     * Fill short-to-full module names map with modules from checks package.
913     */
914    private static void fillModulesFromChecksPackage() {
915        NAME_TO_FULL_MODULE_NAME.put("ArrayTypeStyleCheck",
916                BASE_PACKAGE + ".checks.ArrayTypeStyleCheck");
917        NAME_TO_FULL_MODULE_NAME.put("AvoidEscapedUnicodeCharactersCheck",
918                BASE_PACKAGE + ".checks.AvoidEscapedUnicodeCharactersCheck");
919        NAME_TO_FULL_MODULE_NAME.put("DescendantTokenCheck",
920                BASE_PACKAGE + ".checks.DescendantTokenCheck");
921        NAME_TO_FULL_MODULE_NAME.put("FinalParametersCheck",
922                BASE_PACKAGE + ".checks.FinalParametersCheck");
923        NAME_TO_FULL_MODULE_NAME.put("NewlineAtEndOfFileCheck",
924                BASE_PACKAGE + ".checks.NewlineAtEndOfFileCheck");
925        NAME_TO_FULL_MODULE_NAME.put("LineEndingCheck",
926                BASE_PACKAGE + ".checks.LineEndingCheck");
927        NAME_TO_FULL_MODULE_NAME.put("NoCodeInFileCheck",
928                BASE_PACKAGE + ".checks.NoCodeInFileCheck");
929        NAME_TO_FULL_MODULE_NAME.put("OuterTypeFilenameCheck",
930                BASE_PACKAGE + ".checks.OuterTypeFilenameCheck");
931        NAME_TO_FULL_MODULE_NAME.put("OrderedPropertiesCheck",
932                BASE_PACKAGE + ".checks.OrderedPropertiesCheck");
933        NAME_TO_FULL_MODULE_NAME.put("SuppressWarningsHolder",
934                BASE_PACKAGE + ".checks.SuppressWarningsHolder");
935        NAME_TO_FULL_MODULE_NAME.put("TodoCommentCheck",
936                BASE_PACKAGE + ".checks.TodoCommentCheck");
937        NAME_TO_FULL_MODULE_NAME.put("TrailingCommentCheck",
938                BASE_PACKAGE + ".checks.TrailingCommentCheck");
939        NAME_TO_FULL_MODULE_NAME.put("TranslationCheck",
940                BASE_PACKAGE + ".checks.TranslationCheck");
941        NAME_TO_FULL_MODULE_NAME.put("UncommentedMainCheck",
942                BASE_PACKAGE + ".checks.UncommentedMainCheck");
943        NAME_TO_FULL_MODULE_NAME.put("UniquePropertiesCheck",
944                BASE_PACKAGE + ".checks.UniquePropertiesCheck");
945        NAME_TO_FULL_MODULE_NAME.put("UpperEllCheck",
946                BASE_PACKAGE + ".checks.UpperEllCheck");
947        NAME_TO_FULL_MODULE_NAME.put("HexLiteralCaseCheck",
948                BASE_PACKAGE + ".checks.HexLiteralCaseCheck");
949        NAME_TO_FULL_MODULE_NAME.put("NumericalPrefixesInfixesSuffixesCharacterCaseCheck",
950                BASE_PACKAGE + ".checks.NumericalPrefixesInfixesSuffixesCharacterCaseCheck");
951    }
952
953    /**
954     * Fill short-to-full module names map with modules from filefilters package.
955     */
956    private static void fillModulesFromFilefiltersPackage() {
957        NAME_TO_FULL_MODULE_NAME.put("BeforeExecutionExclusionFileFilter",
958                BASE_PACKAGE + ".filefilters.BeforeExecutionExclusionFileFilter");
959    }
960
961    /**
962     * Fill short-to-full module names map with modules from filters package.
963     */
964    private static void fillModulesFromFiltersPackage() {
965        NAME_TO_FULL_MODULE_NAME.put("SeverityMatchFilter",
966                BASE_PACKAGE + ".filters.SeverityMatchFilter");
967        NAME_TO_FULL_MODULE_NAME.put("SuppressWithPlainTextCommentFilter",
968            BASE_PACKAGE + ".filters.SuppressWithPlainTextCommentFilter");
969        NAME_TO_FULL_MODULE_NAME.put("SuppressionCommentFilter",
970                BASE_PACKAGE + ".filters.SuppressionCommentFilter");
971        NAME_TO_FULL_MODULE_NAME.put("SuppressionFilter",
972                BASE_PACKAGE + ".filters.SuppressionFilter");
973        NAME_TO_FULL_MODULE_NAME.put("SuppressionSingleFilter",
974                BASE_PACKAGE + ".filters.SuppressionSingleFilter");
975        NAME_TO_FULL_MODULE_NAME.put("SuppressionXpathFilter",
976                BASE_PACKAGE + ".filters.SuppressionXpathFilter");
977        NAME_TO_FULL_MODULE_NAME.put("SuppressionXpathSingleFilter",
978                BASE_PACKAGE + ".filters.SuppressionXpathSingleFilter");
979        NAME_TO_FULL_MODULE_NAME.put("SuppressWarningsFilter",
980                BASE_PACKAGE + ".filters.SuppressWarningsFilter");
981        NAME_TO_FULL_MODULE_NAME.put("SuppressWithNearbyCommentFilter",
982                BASE_PACKAGE + ".filters.SuppressWithNearbyCommentFilter");
983        NAME_TO_FULL_MODULE_NAME.put("SuppressWithNearbyTextFilter",
984                BASE_PACKAGE + ".filters.SuppressWithNearbyTextFilter");
985    }
986
987    /**
988     * Fill short-to-full module names map with modules from checkstyle package.
989     */
990    private static void fillModulesFromCheckstylePackage() {
991        NAME_TO_FULL_MODULE_NAME.put("Checker", BASE_PACKAGE + ".Checker");
992        NAME_TO_FULL_MODULE_NAME.put("TreeWalker", BASE_PACKAGE + ".TreeWalker");
993    }
994
995}