code: @SuppressWarnings("unchecked") // NOSONAR (Avoid Duplicate Literals)
      private void processAllDataProvidersWithEachRule() {
          // For each data provider
          List<Object> transformedDataProvidersOutput = new ArrayList<Object>(dataProviders.size());
          for (DataProvider<DPO> dataProvider : dataProviders) {
              // Get the data provider output
              Object transformedOutput = dataProvider.getData();
  
              // Transform the data provider output
              if (dataProviderOutputTransformers != null) {
                  for (Transformer transformer : dataProviderOutputTransformers) {
                      transformedOutput = transformer.transform(transformedOutput);
                  }
              }
  
              // Put the transformed data provider output in a list
              transformedDataProvidersOutput.add(transformedOutput);
          }
  
          // Transform the list of transformed data provider output to rule input
          Object transformedRulesInput = transformedDataProvidersOutput;
          if (ruleInputTransformers != null) {
              for (Transformer transformer : ruleInputTransformers) {
                  transformedRulesInput = transformer.transform(transformedRulesInput);
              }
          }
          RI ruleInput = (RI) transformedRulesInput;
  
          // Process the rule input with the rules
          processRules(ruleInput);
      }
docs: Processes the output of all data providers, all at once, with each rule.