in src/main/java/org/apache/maven/buildcache/CacheControllerImpl.java [589:644]
private void recordMojoProperties(CompletedExecution execution, MojoExecutionEvent executionEvent) {
final MojoExecution mojoExecution = executionEvent.getExecution();
final boolean logAll = cacheConfig.isLogAllProperties(mojoExecution);
List<TrackedProperty> trackedProperties = cacheConfig.getTrackedProperties(mojoExecution);
List<PropertyName> noLogProperties = cacheConfig.getNologProperties(mojoExecution);
List<PropertyName> forceLogProperties = cacheConfig.getLoggedProperties(mojoExecution);
final Object mojo = executionEvent.getMojo();
final File baseDir = executionEvent.getProject().getBasedir();
final String baseDirPath = FilenameUtils.normalizeNoEndSeparator(baseDir.getAbsolutePath()) + File.separator;
final List<Parameter> parameters = mojoExecution.getMojoDescriptor().getParameters();
for (Parameter parameter : parameters) {
// editable parameters could be configured by user
if (!parameter.isEditable()) {
continue;
}
final String propertyName = parameter.getName();
final boolean tracked = isTracked(propertyName, trackedProperties);
if (!tracked && isExcluded(propertyName, logAll, noLogProperties, forceLogProperties)) {
continue;
}
try {
Field field = ReflectionUtils.getFieldByNameIncludingSuperclasses(propertyName, mojo.getClass());
if (field != null) {
final Object value = ReflectionUtils.getValueIncludingSuperclasses(propertyName, mojo);
DtoUtils.addProperty(execution, propertyName, value, baseDirPath, tracked);
continue;
}
// no field but maybe there is a getter with standard naming and no args
Method getter = getGetter(propertyName, mojo.getClass());
if (getter != null) {
Object value = getter.invoke(mojo);
DtoUtils.addProperty(execution, propertyName, value, baseDirPath, tracked);
continue;
}
if (LOGGER.isWarnEnabled()) {
LOGGER.warn(
"Cannot find a Mojo parameter '{}' to read for Mojo {}. This parameter should be ignored.",
propertyName,
mojoExecution);
}
} catch (IllegalAccessException | InvocationTargetException e) {
LOGGER.info("Cannot get property {} value from {}: {}", propertyName, mojo, e.getMessage());
if (tracked) {
throw new IllegalArgumentException("Property configured in cache introspection config " + "for "
+ mojo + " is not accessible: " + propertyName);
}
}
}
}