blob: 6307097395bffd3474ea8cb29e485bb483370ec3 [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
// checkstyle: Checks Java source code for adherence to a set of rules.
// Copyright (C) 2001-2017 the original author or authors.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
////////////////////////////////////////////////////////////////////////////////
package com.puppycrawl.tools.checkstyle;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
import com.puppycrawl.tools.checkstyle.api.LocalizedMessage;
import com.puppycrawl.tools.checkstyle.utils.ModuleReflectionUtils;
/**
* A factory for creating objects from package names and names.
* Consider the below example for better understanding.
* <ul>
* <li>module name - name of java class that represents module;</li>
* <li>module full name - fully qualifies name of java class that represents module;</li>
* <li>check module short name - name of Check without 'Check' suffix;</li>
* <li>check module name - name of java class that represents Check (with 'Check' suffix);</li>
* <li>
* check module full name - fully qualifies name of java class
* that represents Check (with 'Check' suffix).
* </li>
* </ul>
* @author Rick Giles
* @author lkuehne
*/
public class PackageObjectFactory implements ModuleFactory {
/**
* Enum class to define loading options.
*/
public enum ModuleLoadOption {
/**
* Searching from registered checkstyle modules and from packages given in constructor.
**/
SEARCH_REGISTERED_PACKAGES,
/**
* As SEARCH_REGISTERED_PACKAGES and also try to load class from all of packages given in
* constructor.
* Required for eclipse-cs plugin.
**/
TRY_IN_ALL_REGISTERED_PACKAGES,
}
/** Base package of checkstyle modules checks. */
public static final String BASE_PACKAGE = "com.puppycrawl.tools.checkstyle";
/** Exception message when it is unable to create a class instance. */
public static final String UNABLE_TO_INSTANTIATE_EXCEPTION_MESSAGE =
"PackageObjectFactory.unableToInstantiateExceptionMessage";
/** Exception message when there is ambiguous module name in config file. */
public static final String AMBIGUOUS_MODULE_NAME_EXCEPTION_MESSAGE =
"PackageObjectFactory.ambiguousModuleNameExceptionMessage";
/** Suffix of checks. */
public static final String CHECK_SUFFIX = "Check";
/** Character separate package names in qualified name of java class. */
public static final String PACKAGE_SEPARATOR = ".";
/** Exception message when null class loader is given. */
public static final String NULL_LOADER_MESSAGE = "moduleClassLoader must not be null";
/** Exception message when null package name is given. */
public static final String NULL_PACKAGE_MESSAGE = "package name must not be null";
/** Separator to use in strings. */
public static final String STRING_SEPARATOR = ", ";
/** Map of Checkstyle module names to their fully qualified names. */
private static final Map<String, String> NAME_TO_FULL_MODULE_NAME = new HashMap<>();
/** A list of package names to prepend to class names. */
private final Set<String> packages;
/** The class loader used to load Checkstyle core and custom modules. */
private final ClassLoader moduleClassLoader;
/** Map of third party Checkstyle module names to the set of their fully qualified names. */
private Map<String, Set<String>> thirdPartyNameToFullModuleNames;
/** Module load option which defines class search type. */
private ModuleLoadOption moduleLoadOption;
static {
fillShortToFullModuleNamesMap();
}
/**
* Creates a new {@code PackageObjectFactory} instance.
* @param packageNames the list of package names to use
* @param moduleClassLoader class loader used to load Checkstyle
* core and custom modules
*/
public PackageObjectFactory(Set<String> packageNames, ClassLoader moduleClassLoader) {
this(packageNames, moduleClassLoader, ModuleLoadOption.SEARCH_REGISTERED_PACKAGES);
}
/**
* Creates a new {@code PackageObjectFactory} instance.
* @param packageNames the list of package names to use
* @param moduleClassLoader class loader used to load Checkstyle
* core and custom modules
* @param moduleLoadOption loading option
*/
public PackageObjectFactory(Set<String> packageNames, ClassLoader moduleClassLoader,
ModuleLoadOption moduleLoadOption) {
if (moduleClassLoader == null) {
throw new IllegalArgumentException(NULL_LOADER_MESSAGE);
}
if (packageNames.contains(null)) {
throw new IllegalArgumentException(NULL_PACKAGE_MESSAGE);
}
//create a copy of the given set, but retain ordering
packages = new LinkedHashSet<>(packageNames);
this.moduleClassLoader = moduleClassLoader;
this.moduleLoadOption = moduleLoadOption;
}
/**
* Creates a new {@code PackageObjectFactory} instance.
* @param packageName The package name to use
* @param moduleClassLoader class loader used to load Checkstyle
* core and custom modules
*/
public PackageObjectFactory(String packageName, ClassLoader moduleClassLoader) {
if (moduleClassLoader == null) {
throw new IllegalArgumentException(NULL_LOADER_MESSAGE);
}
if (packageName == null) {
throw new IllegalArgumentException(NULL_PACKAGE_MESSAGE);
}
packages = new LinkedHashSet<>(1);
packages.add(packageName);
this.moduleClassLoader = moduleClassLoader;
}
/**
* Creates a new instance of a class from a given name, or that name
* concatenated with &quot;Check&quot;. If the name is
* a class name, creates an instance of the named class. Otherwise, creates
* an instance of a class name obtained by concatenating the given name
* to a package name from a given list of package names.
* @param name the name of a class.
* @return the {@code Object} created by loader.
* @throws CheckstyleException if an error occurs.
*/
@Override
public Object createModule(String name) throws CheckstyleException {
Object instance = null;
// if the name is a simple class name, try to find it in maps at first
if (!name.contains(PACKAGE_SEPARATOR)) {
instance = createFromStandardCheckSet(name);
// find the name in third party map
if (instance == null) {
if (thirdPartyNameToFullModuleNames == null) {
thirdPartyNameToFullModuleNames =
generateThirdPartyNameToFullModuleName(moduleClassLoader);
}
instance = createObjectFromMap(name, thirdPartyNameToFullModuleNames);
}
}
if (instance == null) {
instance = createObject(name);
}
if (instance == null
&& moduleLoadOption == ModuleLoadOption.TRY_IN_ALL_REGISTERED_PACKAGES) {
instance = createModuleByTryInEachPackage(name);
}
if (instance == null) {
String attemptedNames = null;
if (!name.contains(PACKAGE_SEPARATOR)) {
final String nameCheck = name + CHECK_SUFFIX;
attemptedNames = joinPackageNamesWithClassName(name, packages)
+ STRING_SEPARATOR + nameCheck + STRING_SEPARATOR
+ joinPackageNamesWithClassName(nameCheck, packages);
}
final LocalizedMessage exceptionMessage = new LocalizedMessage(0,
Definitions.CHECKSTYLE_BUNDLE, UNABLE_TO_INSTANTIATE_EXCEPTION_MESSAGE,
new String[] {name, attemptedNames}, null, getClass(), null);
throw new CheckstyleException(exceptionMessage.getMessage());
}
return instance;
}
/**
* Create object from one of Checkstyle module names.
* @param name name of module.
* @return instance of module.
* @throws CheckstyleException if the class fails to instantiate or there are ambiguous classes.
*/
private Object createFromStandardCheckSet(String name) throws CheckstyleException {
final String fullModuleName = NAME_TO_FULL_MODULE_NAME.get(name);
Object instance = null;
if (fullModuleName == null) {
final String fullCheckModuleName =
NAME_TO_FULL_MODULE_NAME.get(name + CHECK_SUFFIX);
if (fullCheckModuleName != null) {
instance = createObject(fullCheckModuleName);
}
}
else {
instance = createObject(fullModuleName);
}
return instance;
}
/**
* Create object with the help of the supplied map.
* @param name name of module.
* @param map the supplied map.
* @return instance of module if it is found in modules map and no ambiguous classes exist.
* @throws CheckstyleException if the class fails to instantiate or there are ambiguous classes.
*/
private Object createObjectFromMap(String name, Map<String, Set<String>> map)
throws CheckstyleException {
final Set<String> fullModuleNames = map.get(name);
Object instance = null;
if (fullModuleNames == null) {
final Set<String> fullCheckModuleNames = map.get(name + CHECK_SUFFIX);
if (fullCheckModuleNames != null) {
instance = createObjectFromFullModuleNames(name, fullCheckModuleNames);
}
}
else {
instance = createObjectFromFullModuleNames(name, fullModuleNames);
}
return instance;
}
/**
* Create Object from optional full module names.
* In most case, there should be only one element in {@code fullModuleName}, otherwise
* an exception would be thrown.
* @param name name of module
* @param fullModuleNames the supplied full module names set
* @return instance of module if there is only one element in {@code fullModuleName}
* @throws CheckstyleException if the class fails to instantiate or there are more than one
* element in {@code fullModuleName}
*/
private Object createObjectFromFullModuleNames(String name, Set<String> fullModuleNames)
throws CheckstyleException {
final Object returnValue;
if (fullModuleNames.size() == 1) {
returnValue = createObject(fullModuleNames.iterator().next());
}
else {
final String optionalNames = fullModuleNames.stream()
.sorted()
.collect(Collectors.joining(STRING_SEPARATOR));
final LocalizedMessage exceptionMessage = new LocalizedMessage(0,
Definitions.CHECKSTYLE_BUNDLE, AMBIGUOUS_MODULE_NAME_EXCEPTION_MESSAGE,
new String[] {name, optionalNames}, null, getClass(), null);
throw new CheckstyleException(exceptionMessage.getMessage());
}
return returnValue;
}
/**
* Generate the map of third party Checkstyle module names to the set of their fully qualified
* names.
* @param loader the class loader used to load Checkstyle package names
* @return the map of third party Checkstyle module names to the set of their fully qualified
* names
*/
private Map<String, Set<String>> generateThirdPartyNameToFullModuleName(ClassLoader loader) {
Map<String, Set<String>> returnValue;
try {
returnValue = ModuleReflectionUtils.getCheckstyleModules(packages, loader).stream()
.collect(Collectors.toMap(
Class::getSimpleName,
cls -> Collections.singleton(cls.getCanonicalName()),
(fullNames1, fullNames2) -> {
final Set<String> mergedNames = new LinkedHashSet<>(fullNames1);
mergedNames.addAll(fullNames2);
return mergedNames;
}));
}
catch (IOException ignore) {
returnValue = new HashMap<>();
}
return returnValue;
}
/**
* Creates a string by joining package names with a class name.
* @param className name of the class for joining.
* @param packages packages names.
* @return a string which is obtained by joining package names with a class name.
*/
private static String joinPackageNamesWithClassName(String className, Set<String> packages) {
return packages.stream().collect(
Collectors.joining(PACKAGE_SEPARATOR + className + STRING_SEPARATOR, "",
PACKAGE_SEPARATOR + className));
}
/**
* Creates a new instance of a named class.
* @param className the name of the class to instantiate.
* @return the {@code Object} created by loader or null.
* @throws CheckstyleException if the class fails to instantiate.
*/
private Object createObject(String className) throws CheckstyleException {
Class<?> clazz = null;
try {
clazz = Class.forName(className, true, moduleClassLoader);
}
catch (final ReflectiveOperationException | NoClassDefFoundError ignored) {
// ignore the exception
}
Object instance = null;
if (clazz != null) {
try {
final Constructor<?> declaredConstructor = clazz.getDeclaredConstructor();
declaredConstructor.setAccessible(true);
instance = declaredConstructor.newInstance();
}
catch (final ReflectiveOperationException ex) {
throw new CheckstyleException("Unable to instantiate " + className, ex);
}
}
return instance;
}
/**
* Searching to class with given name (or name concatenated with &quot;Check&quot;) in existing
* packages. Returns instance if class found or, otherwise, null.
* @param name the name of a class.
* @return the {@code Object} created by loader.
* @throws CheckstyleException if an error occurs.
*/
private Object createModuleByTryInEachPackage(String name) throws CheckstyleException {
final Set<String> possibleNames = packages.stream()
.map(packageName -> packageName + PACKAGE_SEPARATOR + name)
.collect(Collectors.toSet());
possibleNames.addAll(possibleNames.stream()
.map(possibleName -> possibleName + CHECK_SUFFIX)
.collect(Collectors.toSet()));
Object instance = null;
for (String possibleName : possibleNames) {
instance = createObject(possibleName);
if (instance != null) {
break;
}
}
return instance;
}
/**
* Fill short-to-full module names map.
*/
private static void fillShortToFullModuleNamesMap() {
fillChecksFromAnnotationPackage();
fillChecksFromBlocksPackage();
fillChecksFromCodingPackage();
fillChecksFromDesignPackage();
fillChecksFromHeaderPackage();
fillChecksFromImportsPackage();
fillChecksFromIndentationPackage();
fillChecksFromJavadocPackage();
fillChecksFromMetricsPackage();
fillChecksFromModifierPackage();
fillChecksFromNamingPackage();
fillChecksFromRegexpPackage();
fillChecksFromSizesPackage();
fillChecksFromWhitespacePackage();
fillModulesFromChecksPackage();
fillModulesFromFilefiltersPackage();
fillModulesFromFiltersPackage();
fillModulesFromCheckstylePackage();
}
/**
* Fill short-to-full module names map with Checks from annotation package.
*/
private static void fillChecksFromAnnotationPackage() {
NAME_TO_FULL_MODULE_NAME.put("AnnotationLocationCheck",
BASE_PACKAGE + ".checks.annotation.AnnotationLocationCheck");
NAME_TO_FULL_MODULE_NAME.put("AnnotationOnSameLineCheck",
BASE_PACKAGE + ".checks.annotation.AnnotationOnSameLineCheck");
NAME_TO_FULL_MODULE_NAME.put("AnnotationUseStyleCheck",
BASE_PACKAGE + ".checks.annotation.AnnotationUseStyleCheck");
NAME_TO_FULL_MODULE_NAME.put("MissingDeprecatedCheck",
BASE_PACKAGE + ".checks.annotation.MissingDeprecatedCheck");
NAME_TO_FULL_MODULE_NAME.put("MissingOverrideCheck",
BASE_PACKAGE + ".checks.annotation.MissingOverrideCheck");
NAME_TO_FULL_MODULE_NAME.put("PackageAnnotationCheck",
BASE_PACKAGE + ".checks.annotation.PackageAnnotationCheck");
NAME_TO_FULL_MODULE_NAME.put("SuppressWarningsCheck",
BASE_PACKAGE + ".checks.annotation.SuppressWarningsCheck");
}
/**
* Fill short-to-full module names map with Checks from blocks package.
*/
private static void fillChecksFromBlocksPackage() {
NAME_TO_FULL_MODULE_NAME.put("AvoidNestedBlocksCheck",
BASE_PACKAGE + ".checks.blocks.AvoidNestedBlocksCheck");
NAME_TO_FULL_MODULE_NAME.put("EmptyBlockCheck",
BASE_PACKAGE + ".checks.blocks.EmptyBlockCheck");
NAME_TO_FULL_MODULE_NAME.put("EmptyCatchBlockCheck",
BASE_PACKAGE + ".checks.blocks.EmptyCatchBlockCheck");
NAME_TO_FULL_MODULE_NAME.put("LeftCurlyCheck",
BASE_PACKAGE + ".checks.blocks.LeftCurlyCheck");
NAME_TO_FULL_MODULE_NAME.put("NeedBracesCheck",
BASE_PACKAGE + ".checks.blocks.NeedBracesCheck");
NAME_TO_FULL_MODULE_NAME.put("RightCurlyCheck",
BASE_PACKAGE + ".checks.blocks.RightCurlyCheck");
}
/**
* Fill short-to-full module names map with Checks from coding package.
*/
// -@cs[ExecutableStatementCount] splitting this method is not reasonable.
private static void fillChecksFromCodingPackage() {
NAME_TO_FULL_MODULE_NAME.put("ArrayTrailingCommaCheck",
BASE_PACKAGE + ".checks.coding.ArrayTrailingCommaCheck");
NAME_TO_FULL_MODULE_NAME.put("AvoidInlineConditionalsCheck",
BASE_PACKAGE + ".checks.coding.AvoidInlineConditionalsCheck");
NAME_TO_FULL_MODULE_NAME.put("CovariantEqualsCheck",
BASE_PACKAGE + ".checks.coding.CovariantEqualsCheck");
NAME_TO_FULL_MODULE_NAME.put("DeclarationOrderCheck",
BASE_PACKAGE + ".checks.coding.DeclarationOrderCheck");
NAME_TO_FULL_MODULE_NAME.put("DefaultComesLastCheck",
BASE_PACKAGE + ".checks.coding.DefaultComesLastCheck");
NAME_TO_FULL_MODULE_NAME.put("EmptyStatementCheck",
BASE_PACKAGE + ".checks.coding.EmptyStatementCheck");
NAME_TO_FULL_MODULE_NAME.put("EqualsAvoidNullCheck",
BASE_PACKAGE + ".checks.coding.EqualsAvoidNullCheck");
NAME_TO_FULL_MODULE_NAME.put("EqualsHashCodeCheck",
BASE_PACKAGE + ".checks.coding.EqualsHashCodeCheck");
NAME_TO_FULL_MODULE_NAME.put("ExplicitInitializationCheck",
BASE_PACKAGE + ".checks.coding.ExplicitInitializationCheck");
NAME_TO_FULL_MODULE_NAME.put("FallThroughCheck",
BASE_PACKAGE + ".checks.coding.FallThroughCheck");
NAME_TO_FULL_MODULE_NAME.put("FinalLocalVariableCheck",
BASE_PACKAGE + ".checks.coding.FinalLocalVariableCheck");
NAME_TO_FULL_MODULE_NAME.put("HiddenFieldCheck",
BASE_PACKAGE + ".checks.coding.HiddenFieldCheck");
NAME_TO_FULL_MODULE_NAME.put("IllegalCatchCheck",
BASE_PACKAGE + ".checks.coding.IllegalCatchCheck");
NAME_TO_FULL_MODULE_NAME.put("IllegalInstantiationCheck",
BASE_PACKAGE + ".checks.coding.IllegalInstantiationCheck");
NAME_TO_FULL_MODULE_NAME.put("IllegalThrowsCheck",
BASE_PACKAGE + ".checks.coding.IllegalThrowsCheck");
NAME_TO_FULL_MODULE_NAME.put("IllegalTokenCheck",
BASE_PACKAGE + ".checks.coding.IllegalTokenCheck");
NAME_TO_FULL_MODULE_NAME.put("IllegalTokenTextCheck",
BASE_PACKAGE + ".checks.coding.IllegalTokenTextCheck");
NAME_TO_FULL_MODULE_NAME.put("IllegalTypeCheck",
BASE_PACKAGE + ".checks.coding.IllegalTypeCheck");
NAME_TO_FULL_MODULE_NAME.put("InnerAssignmentCheck",
BASE_PACKAGE + ".checks.coding.InnerAssignmentCheck");
NAME_TO_FULL_MODULE_NAME.put("MagicNumberCheck",
BASE_PACKAGE + ".checks.coding.MagicNumberCheck");
NAME_TO_FULL_MODULE_NAME.put("MissingCtorCheck",
BASE_PACKAGE + ".checks.coding.MissingCtorCheck");
NAME_TO_FULL_MODULE_NAME.put("MissingSwitchDefaultCheck",
BASE_PACKAGE + ".checks.coding.MissingSwitchDefaultCheck");
NAME_TO_FULL_MODULE_NAME.put("ModifiedControlVariableCheck",
BASE_PACKAGE + ".checks.coding.ModifiedControlVariableCheck");
NAME_TO_FULL_MODULE_NAME.put("MultipleStringLiteralsCheck",
BASE_PACKAGE + ".checks.coding.MultipleStringLiteralsCheck");
NAME_TO_FULL_MODULE_NAME.put("MultipleVariableDeclarationsCheck",
BASE_PACKAGE + ".checks.coding.MultipleVariableDeclarationsCheck");
NAME_TO_FULL_MODULE_NAME.put("NestedForDepthCheck",
BASE_PACKAGE + ".checks.coding.NestedForDepthCheck");
NAME_TO_FULL_MODULE_NAME.put("NestedIfDepthCheck",
BASE_PACKAGE + ".checks.coding.NestedIfDepthCheck");
NAME_TO_FULL_MODULE_NAME.put("NestedTryDepthCheck",
BASE_PACKAGE + ".checks.coding.NestedTryDepthCheck");
NAME_TO_FULL_MODULE_NAME.put("NoCloneCheck",
BASE_PACKAGE + ".checks.coding.NoCloneCheck");
NAME_TO_FULL_MODULE_NAME.put("NoFinalizerCheck",
BASE_PACKAGE + ".checks.coding.NoFinalizerCheck");
NAME_TO_FULL_MODULE_NAME.put("OneStatementPerLineCheck",
BASE_PACKAGE + ".checks.coding.OneStatementPerLineCheck");
NAME_TO_FULL_MODULE_NAME.put("OverloadMethodsDeclarationOrderCheck",
BASE_PACKAGE + ".checks.coding.OverloadMethodsDeclarationOrderCheck");
NAME_TO_FULL_MODULE_NAME.put("PackageDeclarationCheck",
BASE_PACKAGE + ".checks.coding.PackageDeclarationCheck");
NAME_TO_FULL_MODULE_NAME.put("ParameterAssignmentCheck",
BASE_PACKAGE + ".checks.coding.ParameterAssignmentCheck");
NAME_TO_FULL_MODULE_NAME.put("RequireThisCheck",
BASE_PACKAGE + ".checks.coding.RequireThisCheck");
NAME_TO_FULL_MODULE_NAME.put("ReturnCountCheck",
BASE_PACKAGE + ".checks.coding.ReturnCountCheck");
NAME_TO_FULL_MODULE_NAME.put("SimplifyBooleanExpressionCheck",
BASE_PACKAGE + ".checks.coding.SimplifyBooleanExpressionCheck");
NAME_TO_FULL_MODULE_NAME.put("SimplifyBooleanReturnCheck",
BASE_PACKAGE + ".checks.coding.SimplifyBooleanReturnCheck");
NAME_TO_FULL_MODULE_NAME.put("StringLiteralEqualityCheck",
BASE_PACKAGE + ".checks.coding.StringLiteralEqualityCheck");
NAME_TO_FULL_MODULE_NAME.put("SuperCloneCheck",
BASE_PACKAGE + ".checks.coding.SuperCloneCheck");
NAME_TO_FULL_MODULE_NAME.put("SuperFinalizeCheck",
BASE_PACKAGE + ".checks.coding.SuperFinalizeCheck");
NAME_TO_FULL_MODULE_NAME.put("UnnecessaryParenthesesCheck",
BASE_PACKAGE + ".checks.coding.UnnecessaryParenthesesCheck");
NAME_TO_FULL_MODULE_NAME.put("VariableDeclarationUsageDistanceCheck",
BASE_PACKAGE + ".checks.coding.VariableDeclarationUsageDistanceCheck");
}
/**
* Fill short-to-full module names map with Checks from design package.
*/
private static void fillChecksFromDesignPackage() {
NAME_TO_FULL_MODULE_NAME.put("DesignForExtensionCheck",
BASE_PACKAGE + ".checks.design.DesignForExtensionCheck");
NAME_TO_FULL_MODULE_NAME.put("FinalClassCheck",
BASE_PACKAGE + ".checks.design.FinalClassCheck");
NAME_TO_FULL_MODULE_NAME.put("HideUtilityClassConstructorCheck",
BASE_PACKAGE + ".checks.design.HideUtilityClassConstructorCheck");
NAME_TO_FULL_MODULE_NAME.put("InnerTypeLastCheck",
BASE_PACKAGE + ".checks.design.InnerTypeLastCheck");
NAME_TO_FULL_MODULE_NAME.put("InterfaceIsTypeCheck",
BASE_PACKAGE + ".checks.design.InterfaceIsTypeCheck");
NAME_TO_FULL_MODULE_NAME.put("MutableExceptionCheck",
BASE_PACKAGE + ".checks.design.MutableExceptionCheck");
NAME_TO_FULL_MODULE_NAME.put("OneTopLevelClassCheck",
BASE_PACKAGE + ".checks.design.OneTopLevelClassCheck");
NAME_TO_FULL_MODULE_NAME.put("ThrowsCountCheck",
BASE_PACKAGE + ".checks.design.ThrowsCountCheck");
NAME_TO_FULL_MODULE_NAME.put("VisibilityModifierCheck",
BASE_PACKAGE + ".checks.design.VisibilityModifierCheck");
}
/**
* Fill short-to-full module names map with Checks from header package.
*/
private static void fillChecksFromHeaderPackage() {
NAME_TO_FULL_MODULE_NAME.put("HeaderCheck",
BASE_PACKAGE + ".checks.header.HeaderCheck");
NAME_TO_FULL_MODULE_NAME.put("RegexpHeaderCheck",
BASE_PACKAGE + ".checks.header.RegexpHeaderCheck");
}
/**
* Fill short-to-full module names map with Checks from imports package.
*/
private static void fillChecksFromImportsPackage() {
NAME_TO_FULL_MODULE_NAME.put("AvoidStarImportCheck",
BASE_PACKAGE + ".checks.imports.AvoidStarImportCheck");
NAME_TO_FULL_MODULE_NAME.put("AvoidStaticImportCheck",
BASE_PACKAGE + ".checks.imports.AvoidStaticImportCheck");
NAME_TO_FULL_MODULE_NAME.put("CustomImportOrderCheck",
BASE_PACKAGE + ".checks.imports.CustomImportOrderCheck");
NAME_TO_FULL_MODULE_NAME.put("IllegalImportCheck",
BASE_PACKAGE + ".checks.imports.IllegalImportCheck");
NAME_TO_FULL_MODULE_NAME.put("ImportControlCheck",
BASE_PACKAGE + ".checks.imports.ImportControlCheck");
NAME_TO_FULL_MODULE_NAME.put("ImportOrderCheck",
BASE_PACKAGE + ".checks.imports.ImportOrderCheck");
NAME_TO_FULL_MODULE_NAME.put("RedundantImportCheck",
BASE_PACKAGE + ".checks.imports.RedundantImportCheck");
NAME_TO_FULL_MODULE_NAME.put("UnusedImportsCheck",
BASE_PACKAGE + ".checks.imports.UnusedImportsCheck");
}
/**
* Fill short-to-full module names map with Checks from indentation package.
*/
private static void fillChecksFromIndentationPackage() {
NAME_TO_FULL_MODULE_NAME.put("CommentsIndentationCheck",
BASE_PACKAGE + ".checks.indentation.CommentsIndentationCheck");
NAME_TO_FULL_MODULE_NAME.put("IndentationCheck",
BASE_PACKAGE + ".checks.indentation.IndentationCheck");
}
/**
* Fill short-to-full module names map with Checks from javadoc package.
*/
private static void fillChecksFromJavadocPackage() {
NAME_TO_FULL_MODULE_NAME.put("AtclauseOrderCheck",
BASE_PACKAGE + ".checks.javadoc.AtclauseOrderCheck");
NAME_TO_FULL_MODULE_NAME.put("JavadocMethodCheck",
BASE_PACKAGE + ".checks.javadoc.JavadocMethodCheck");
NAME_TO_FULL_MODULE_NAME.put("JavadocPackageCheck",
BASE_PACKAGE + ".checks.javadoc.JavadocPackageCheck");
NAME_TO_FULL_MODULE_NAME.put("JavadocParagraphCheck",
BASE_PACKAGE + ".checks.javadoc.JavadocParagraphCheck");
NAME_TO_FULL_MODULE_NAME.put("JavadocStyleCheck",
BASE_PACKAGE + ".checks.javadoc.JavadocStyleCheck");
NAME_TO_FULL_MODULE_NAME.put("JavadocTagContinuationIndentationCheck",
BASE_PACKAGE + ".checks.javadoc.JavadocTagContinuationIndentationCheck");
NAME_TO_FULL_MODULE_NAME.put("JavadocTypeCheck",
BASE_PACKAGE + ".checks.javadoc.JavadocTypeCheck");
NAME_TO_FULL_MODULE_NAME.put("JavadocVariableCheck",
BASE_PACKAGE + ".checks.javadoc.JavadocVariableCheck");
NAME_TO_FULL_MODULE_NAME.put("NonEmptyAtclauseDescriptionCheck",
BASE_PACKAGE + ".checks.javadoc.NonEmptyAtclauseDescriptionCheck");
NAME_TO_FULL_MODULE_NAME.put("SingleLineJavadocCheck",
BASE_PACKAGE + ".checks.javadoc.SingleLineJavadocCheck");
NAME_TO_FULL_MODULE_NAME.put("SummaryJavadocCheck",
BASE_PACKAGE + ".checks.javadoc.SummaryJavadocCheck");
NAME_TO_FULL_MODULE_NAME.put("WriteTagCheck",
BASE_PACKAGE + ".checks.javadoc.WriteTagCheck");
}
/**
* Fill short-to-full module names map with Checks from metrics package.
*/
private static void fillChecksFromMetricsPackage() {
NAME_TO_FULL_MODULE_NAME.put("BooleanExpressionComplexityCheck",
BASE_PACKAGE + ".checks.metrics.BooleanExpressionComplexityCheck");
NAME_TO_FULL_MODULE_NAME.put("ClassDataAbstractionCouplingCheck",
BASE_PACKAGE + ".checks.metrics.ClassDataAbstractionCouplingCheck");
NAME_TO_FULL_MODULE_NAME.put("ClassFanOutComplexityCheck",
BASE_PACKAGE + ".checks.metrics.ClassFanOutComplexityCheck");
NAME_TO_FULL_MODULE_NAME.put("CyclomaticComplexityCheck",
BASE_PACKAGE + ".checks.metrics.CyclomaticComplexityCheck");
NAME_TO_FULL_MODULE_NAME.put("JavaNCSSCheck",
BASE_PACKAGE + ".checks.metrics.JavaNCSSCheck");
NAME_TO_FULL_MODULE_NAME.put("NPathComplexityCheck",
BASE_PACKAGE + ".checks.metrics.NPathComplexityCheck");
}
/**
* Fill short-to-full module names map with Checks from modifier package.
*/
private static void fillChecksFromModifierPackage() {
NAME_TO_FULL_MODULE_NAME.put("ModifierOrderCheck",
BASE_PACKAGE + ".checks.modifier.ModifierOrderCheck");
NAME_TO_FULL_MODULE_NAME.put("RedundantModifierCheck",
BASE_PACKAGE + ".checks.modifier.RedundantModifierCheck");
}
/**
* Fill short-to-full module names map with Checks from naming package.
*/
private static void fillChecksFromNamingPackage() {
NAME_TO_FULL_MODULE_NAME.put("AbbreviationAsWordInNameCheck",
BASE_PACKAGE + ".checks.naming.AbbreviationAsWordInNameCheck");
NAME_TO_FULL_MODULE_NAME.put("AbstractClassNameCheck",
BASE_PACKAGE + ".checks.naming.AbstractClassNameCheck");
NAME_TO_FULL_MODULE_NAME.put("CatchParameterNameCheck",
BASE_PACKAGE + ".checks.naming.CatchParameterNameCheck");
NAME_TO_FULL_MODULE_NAME.put("ClassTypeParameterNameCheck",
BASE_PACKAGE + ".checks.naming.ClassTypeParameterNameCheck");
NAME_TO_FULL_MODULE_NAME.put("ConstantNameCheck",
BASE_PACKAGE + ".checks.naming.ConstantNameCheck");
NAME_TO_FULL_MODULE_NAME.put("InterfaceTypeParameterNameCheck",
BASE_PACKAGE + ".checks.naming.InterfaceTypeParameterNameCheck");
NAME_TO_FULL_MODULE_NAME.put("LocalFinalVariableNameCheck",
BASE_PACKAGE + ".checks.naming.LocalFinalVariableNameCheck");
NAME_TO_FULL_MODULE_NAME.put("LocalVariableNameCheck",
BASE_PACKAGE + ".checks.naming.LocalVariableNameCheck");
NAME_TO_FULL_MODULE_NAME.put("MemberNameCheck",
BASE_PACKAGE + ".checks.naming.MemberNameCheck");
NAME_TO_FULL_MODULE_NAME.put("MethodNameCheck",
BASE_PACKAGE + ".checks.naming.MethodNameCheck");
NAME_TO_FULL_MODULE_NAME.put("MethodTypeParameterNameCheck",
BASE_PACKAGE + ".checks.naming.MethodTypeParameterNameCheck");
NAME_TO_FULL_MODULE_NAME.put("PackageNameCheck",
BASE_PACKAGE + ".checks.naming.PackageNameCheck");
NAME_TO_FULL_MODULE_NAME.put("ParameterNameCheck",
BASE_PACKAGE + ".checks.naming.ParameterNameCheck");
NAME_TO_FULL_MODULE_NAME.put("StaticVariableNameCheck",
BASE_PACKAGE + ".checks.naming.StaticVariableNameCheck");
NAME_TO_FULL_MODULE_NAME.put("TypeNameCheck",
BASE_PACKAGE + ".checks.naming.TypeNameCheck");
}
/**
* Fill short-to-full module names map with Checks from regexp package.
*/
private static void fillChecksFromRegexpPackage() {
NAME_TO_FULL_MODULE_NAME.put("RegexpCheck",
BASE_PACKAGE + ".checks.regexp.RegexpCheck");
NAME_TO_FULL_MODULE_NAME.put("RegexpMultilineCheck",
BASE_PACKAGE + ".checks.regexp.RegexpMultilineCheck");
NAME_TO_FULL_MODULE_NAME.put("RegexpOnFilenameCheck",
BASE_PACKAGE + ".checks.regexp.RegexpOnFilenameCheck");
NAME_TO_FULL_MODULE_NAME.put("RegexpSinglelineCheck",
BASE_PACKAGE + ".checks.regexp.RegexpSinglelineCheck");
NAME_TO_FULL_MODULE_NAME.put("RegexpSinglelineJavaCheck",
BASE_PACKAGE + ".checks.regexp.RegexpSinglelineJavaCheck");
}
/**
* Fill short-to-full module names map with Checks from sizes package.
*/
private static void fillChecksFromSizesPackage() {
NAME_TO_FULL_MODULE_NAME.put("AnonInnerLengthCheck",
BASE_PACKAGE + ".checks.sizes.AnonInnerLengthCheck");
NAME_TO_FULL_MODULE_NAME.put("ExecutableStatementCountCheck",
BASE_PACKAGE + ".checks.sizes.ExecutableStatementCountCheck");
NAME_TO_FULL_MODULE_NAME.put("FileLengthCheck",
BASE_PACKAGE + ".checks.sizes.FileLengthCheck");
NAME_TO_FULL_MODULE_NAME.put("LineLengthCheck",
BASE_PACKAGE + ".checks.sizes.LineLengthCheck");
NAME_TO_FULL_MODULE_NAME.put("MethodCountCheck",
BASE_PACKAGE + ".checks.sizes.MethodCountCheck");
NAME_TO_FULL_MODULE_NAME.put("MethodLengthCheck",
BASE_PACKAGE + ".checks.sizes.MethodLengthCheck");
NAME_TO_FULL_MODULE_NAME.put("OuterTypeNumberCheck",
BASE_PACKAGE + ".checks.sizes.OuterTypeNumberCheck");
NAME_TO_FULL_MODULE_NAME.put("ParameterNumberCheck",
BASE_PACKAGE + ".checks.sizes.ParameterNumberCheck");
}
/**
* Fill short-to-full module names map with Checks from whitespace package.
*/
private static void fillChecksFromWhitespacePackage() {
NAME_TO_FULL_MODULE_NAME.put("EmptyForInitializerPadCheck",
BASE_PACKAGE + ".checks.whitespace.EmptyForInitializerPadCheck");
NAME_TO_FULL_MODULE_NAME.put("EmptyForIteratorPadCheck",
BASE_PACKAGE + ".checks.whitespace.EmptyForIteratorPadCheck");
NAME_TO_FULL_MODULE_NAME.put("EmptyLineSeparatorCheck",
BASE_PACKAGE + ".checks.whitespace.EmptyLineSeparatorCheck");
NAME_TO_FULL_MODULE_NAME.put("FileTabCharacterCheck",
BASE_PACKAGE + ".checks.whitespace.FileTabCharacterCheck");
NAME_TO_FULL_MODULE_NAME.put("GenericWhitespaceCheck",
BASE_PACKAGE + ".checks.whitespace.GenericWhitespaceCheck");
NAME_TO_FULL_MODULE_NAME.put("MethodParamPadCheck",
BASE_PACKAGE + ".checks.whitespace.MethodParamPadCheck");
NAME_TO_FULL_MODULE_NAME.put("NoLineWrapCheck",
BASE_PACKAGE + ".checks.whitespace.NoLineWrapCheck");
NAME_TO_FULL_MODULE_NAME.put("NoWhitespaceAfterCheck",
BASE_PACKAGE + ".checks.whitespace.NoWhitespaceAfterCheck");
NAME_TO_FULL_MODULE_NAME.put("NoWhitespaceBeforeCheck",
BASE_PACKAGE + ".checks.whitespace.NoWhitespaceBeforeCheck");
NAME_TO_FULL_MODULE_NAME.put("OperatorWrapCheck",
BASE_PACKAGE + ".checks.whitespace.OperatorWrapCheck");
NAME_TO_FULL_MODULE_NAME.put("ParenPadCheck",
BASE_PACKAGE + ".checks.whitespace.ParenPadCheck");
NAME_TO_FULL_MODULE_NAME.put("SeparatorWrapCheck",
BASE_PACKAGE + ".checks.whitespace.SeparatorWrapCheck");
NAME_TO_FULL_MODULE_NAME.put("SingleSpaceSeparatorCheck",
BASE_PACKAGE + ".checks.whitespace.SingleSpaceSeparatorCheck");
NAME_TO_FULL_MODULE_NAME.put("TypecastParenPadCheck",
BASE_PACKAGE + ".checks.whitespace.TypecastParenPadCheck");
NAME_TO_FULL_MODULE_NAME.put("WhitespaceAfterCheck",
BASE_PACKAGE + ".checks.whitespace.WhitespaceAfterCheck");
NAME_TO_FULL_MODULE_NAME.put("WhitespaceAroundCheck",
BASE_PACKAGE + ".checks.whitespace.WhitespaceAroundCheck");
}
/**
* Fill short-to-full module names map with modules from checks package.
*/
private static void fillModulesFromChecksPackage() {
NAME_TO_FULL_MODULE_NAME.put("ArrayTypeStyleCheck",
BASE_PACKAGE + ".checks.ArrayTypeStyleCheck");
NAME_TO_FULL_MODULE_NAME.put("AvoidEscapedUnicodeCharactersCheck",
BASE_PACKAGE + ".checks.AvoidEscapedUnicodeCharactersCheck");
NAME_TO_FULL_MODULE_NAME.put("DescendantTokenCheck",
BASE_PACKAGE + ".checks.DescendantTokenCheck");
NAME_TO_FULL_MODULE_NAME.put("FinalParametersCheck",
BASE_PACKAGE + ".checks.FinalParametersCheck");
NAME_TO_FULL_MODULE_NAME.put("NewlineAtEndOfFileCheck",
BASE_PACKAGE + ".checks.NewlineAtEndOfFileCheck");
NAME_TO_FULL_MODULE_NAME.put("OuterTypeFilenameCheck",
BASE_PACKAGE + ".checks.OuterTypeFilenameCheck");
NAME_TO_FULL_MODULE_NAME.put("SuppressWarningsHolder",
BASE_PACKAGE + ".checks.SuppressWarningsHolder");
NAME_TO_FULL_MODULE_NAME.put("TodoCommentCheck",
BASE_PACKAGE + ".checks.TodoCommentCheck");
NAME_TO_FULL_MODULE_NAME.put("TrailingCommentCheck",
BASE_PACKAGE + ".checks.TrailingCommentCheck");
NAME_TO_FULL_MODULE_NAME.put("TranslationCheck",
BASE_PACKAGE + ".checks.TranslationCheck");
NAME_TO_FULL_MODULE_NAME.put("UncommentedMainCheck",
BASE_PACKAGE + ".checks.UncommentedMainCheck");
NAME_TO_FULL_MODULE_NAME.put("UniquePropertiesCheck",
BASE_PACKAGE + ".checks.UniquePropertiesCheck");
NAME_TO_FULL_MODULE_NAME.put("UpperEllCheck",
BASE_PACKAGE + ".checks.UpperEllCheck");
}
/**
* Fill short-to-full module names map with modules from filefilters package.
*/
private static void fillModulesFromFilefiltersPackage() {
NAME_TO_FULL_MODULE_NAME.put("BeforeExecutionExclusionFileFilter",
BASE_PACKAGE + ".filefilters.BeforeExecutionExclusionFileFilter");
}
/**
* Fill short-to-full module names map with modules from filters package.
*/
private static void fillModulesFromFiltersPackage() {
NAME_TO_FULL_MODULE_NAME.put("CsvFilter",
BASE_PACKAGE + ".filters.CsvFilter");
NAME_TO_FULL_MODULE_NAME.put("IntMatchFilter",
BASE_PACKAGE + ".filters.IntMatchFilter");
NAME_TO_FULL_MODULE_NAME.put("IntRangeFilter",
BASE_PACKAGE + ".filters.IntRangeFilter");
NAME_TO_FULL_MODULE_NAME.put("SeverityMatchFilter",
BASE_PACKAGE + ".filters.SeverityMatchFilter");
NAME_TO_FULL_MODULE_NAME.put("SuppressWithPlainTextCommentFilter",
BASE_PACKAGE + ".filters.SuppressWithPlainTextCommentFilter");
NAME_TO_FULL_MODULE_NAME.put("SuppressionCommentFilter",
BASE_PACKAGE + ".filters.SuppressionCommentFilter");
NAME_TO_FULL_MODULE_NAME.put("SuppressionFilter",
BASE_PACKAGE + ".filters.SuppressionFilter");
NAME_TO_FULL_MODULE_NAME.put("SuppressionXpathFilter",
BASE_PACKAGE + ".filters.SuppressionXpathFilter");
NAME_TO_FULL_MODULE_NAME.put("SuppressWarningsFilter",
BASE_PACKAGE + ".filters.SuppressWarningsFilter");
NAME_TO_FULL_MODULE_NAME.put("SuppressWithNearbyCommentFilter",
BASE_PACKAGE + ".filters.SuppressWithNearbyCommentFilter");
}
/**
* Fill short-to-full module names map with modules from checkstyle package.
*/
private static void fillModulesFromCheckstylePackage() {
NAME_TO_FULL_MODULE_NAME.put("Checker", BASE_PACKAGE + ".Checker");
NAME_TO_FULL_MODULE_NAME.put("TreeWalker", BASE_PACKAGE + ".TreeWalker");
}
}