in apache-rat-core/src/main/java/org/apache/rat/configuration/MatcherBuilderTracker.java [102:131]
private void addBuilderImpl(final String className, final String name) {
Objects.requireNonNull(className, "className may not be null");
Class<?> clazz;
try {
clazz = getClass().getClassLoader().loadClass(className);
} catch (ClassNotFoundException e) {
throw new ConfigurationException(e);
}
if (AbstractBuilder.class.isAssignableFrom(clazz)) {
@SuppressWarnings("unchecked")
Class<? extends AbstractBuilder> candidate = (Class<? extends AbstractBuilder>) clazz;
String workingName = name;
if (StringUtils.isBlank(workingName)) {
workingName = candidate.getSimpleName();
if (!workingName.endsWith("Builder")) {
throw new ConfigurationException(
"name is required, or " + candidate.getName() + " must end with 'Builder'");
}
workingName = workingName.substring(0, workingName.lastIndexOf("Builder"));
if (StringUtils.isBlank(workingName)) {
throw new ConfigurationException("Last segment of " + candidate.getName()
+ " may not be 'Builder', but must end in 'Builder'");
}
workingName = WordUtils.uncapitalize(workingName);
}
matcherBuilders.put(workingName, candidate);
} else {
throw new ConfigurationException("Class " + clazz.getName() + " does not extend " + AbstractBuilder.class);
}
}