in src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractRegexEntryHandler.java [57:91]
protected String extractTargetRunMode(String path, ContentPackage2FeatureModelConverter converter,
String runMode, String runModeMatch) {
String targetRunmode;
if (RunModePolicy.PREPEND_INHERITED.equals(converter.getRunModePolicy())) {
final List<String> runModes = new ArrayList<>();
final List<String> inheritedRunModes = runMode == null ? Collections.emptyList() : Arrays.asList(StringUtils.split(runMode, '.'));
runModes.addAll(inheritedRunModes);
// append found run modes without duplicates (legacy behavior direct_only established by appending to empty List)
if (StringUtils.isNotEmpty(runModeMatch)) {
// there is a specified RunMode
logger.debug("Runmode {} was extracted from path {}", runModeMatch, path);
List<String> newRunModes = Arrays.asList(StringUtils.split(runModeMatch, '.'));
// add only new RunModes that are not already present
List<String> newRunModesList = newRunModes.stream()
.filter(mode -> !runModes.contains(mode))
.collect(Collectors.toList());
// identify diverging list of run modes between parent & direct definition as diverging criteria between run mode policies
if(!runModes.isEmpty() && !CollectionUtils.isEqualCollection(newRunModes, inheritedRunModes)) {
logger.info("Found diverging run modes list {} diverging from defined run modes on the parent {}", newRunModes, inheritedRunModes);
logger.info("Effective run modes: {}", runModes);
}
runModes.addAll(newRunModesList);
}
targetRunmode = String.join(".", runModes);
} else {
//legacy behavior - direct_only - just use the directly defined run modes
targetRunmode = runModeMatch;
}
return targetRunmode;
}