Skip to content

Commit

Permalink
Issue checkstyle#4742: add 3rd party AuditListener and require defaul…
Browse files Browse the repository at this point in the history
…t constructor
  • Loading branch information
rnveach committed Aug 7, 2017
1 parent 16f91dd commit 30b09c0
Showing 1 changed file with 32 additions and 2 deletions.
Expand Up @@ -20,6 +20,7 @@
package com.puppycrawl.tools.checkstyle.utils;

import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.Set;
Expand All @@ -29,6 +30,7 @@
import com.puppycrawl.tools.checkstyle.TreeWalkerFilter;
import com.puppycrawl.tools.checkstyle.api.AbstractCheck;
import com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck;
import com.puppycrawl.tools.checkstyle.api.AuditListener;
import com.puppycrawl.tools.checkstyle.api.AutomaticBean;
import com.puppycrawl.tools.checkstyle.api.BeforeExecutionFileFilter;
import com.puppycrawl.tools.checkstyle.api.Filter;
Expand Down Expand Up @@ -65,7 +67,7 @@ public static Set<Class<?>> getCheckstyleModules(
/**
* Checks whether a class may be considered as a checkstyle module. Checkstyle's modules are
* non-abstract classes, which are either checkstyle's checks, file sets, filters, file filters,
* {@code TreeWalker} filters or root module.
* {@code TreeWalker} filters, audit listener, or root module.
* @param clazz class to check.
* @return true if the class may be considered as the checkstyle module.
*/
Expand All @@ -76,6 +78,7 @@ public static boolean isCheckstyleModule(Class<?> clazz) {
|| isFilterModule(clazz)
|| isFileFilterModule(clazz)
|| isTreeWalkerFilterModule(clazz)
|| isAuditListener(clazz)
|| isRootModule(clazz));
}

Expand All @@ -86,7 +89,24 @@ public static boolean isCheckstyleModule(Class<?> clazz) {
*/
public static boolean isValidCheckstyleClass(Class<?> clazz) {
return AutomaticBean.class.isAssignableFrom(clazz)
&& !Modifier.isAbstract(clazz.getModifiers());
&& !Modifier.isAbstract(clazz.getModifiers())
&& hasDefaultConstructor(clazz);
}

/**
* Checks if the class has a default constructor.
* @param clazz class to check
* @return true if the class has a default constructor.
*/
private static boolean hasDefaultConstructor(Class<?> clazz) {
boolean result = false;
for (Constructor<?> constructor : clazz.getConstructors()) {
if (constructor.getParameterCount() == 0) {
result = true;
break;
}
}
return result;
}

/**
Expand Down Expand Up @@ -129,6 +149,16 @@ public static boolean isFileFilterModule(Class<?> clazz) {
return BeforeExecutionFileFilter.class.isAssignableFrom(clazz);
}

/**
* Checks whether a class may be considered as the checkstyle audit listener module.
* Checkstyle's audit listener modules are classes which implement 'AuditListener' interface.
* @param clazz class to check.
* @return true if a class may be considered as the checkstyle audit listener module.
*/
public static boolean isAuditListener(Class<?> clazz) {
return AuditListener.class.isAssignableFrom(clazz);
}

/**
* Checks whether a class may be considered as the checkstyle root module.
* Checkstyle's root modules are classes which implement 'RootModule' interface.
Expand Down

0 comments on commit 30b09c0

Please sign in to comment.