private static void bootstrapPruningProviders()

in wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/Configuration.java [528:581]


    private static void bootstrapPruningProviders(Configuration configuration) {
        {
            // By default, load pruning from the wayang.core.optimizer.pruning.strategies property.
            CollectionProvider<Class<PlanEnumerationPruningStrategy>> propertyBasedProvider =
                    new FunctionalCollectionProvider<>(
                            config -> {
                                final String strategyClassNames = config.getStringProperty("wayang.core.optimizer.pruning.strategies");
                                if (strategyClassNames == null || strategyClassNames.isEmpty()) {
                                    return Collections.emptySet();
                                }
                                Collection<Class<PlanEnumerationPruningStrategy>> strategyClasses = new LinkedList<>();
                                for (String strategyClassName : strategyClassNames.split(",")) {
                                    try {
                                        @SuppressWarnings("unchecked")
                                        final Class<PlanEnumerationPruningStrategy> strategyClass = (Class<PlanEnumerationPruningStrategy>) Class.forName(strategyClassName);
                                        strategyClasses.add(strategyClass);
                                    } catch (ClassNotFoundException e) {
                                        logger.warn("Illegal pruning strategy class name: \"{}\".", strategyClassName);
                                    }
                                }
                                return strategyClasses;
                            },
                            configuration
                    );
            CollectionProvider<Class<PlanEnumerationPruningStrategy>> overrideProvider =
                    new ExplicitCollectionProvider<>(configuration, propertyBasedProvider);
            configuration.setPruningStrategyClassProvider(overrideProvider);
        }
        {
            ValueProvider<ToDoubleFunction<ProbabilisticDoubleInterval>> defaultProvider =
                    new ConstantValueProvider<>(ProbabilisticDoubleInterval::getGeometricMeanEstimate, configuration);
            ValueProvider<ToDoubleFunction<ProbabilisticDoubleInterval>> overrideProvider =
                    new ConstantValueProvider<>(defaultProvider);
            configuration.setCostSquasherProvider(overrideProvider);
        }
        {
            ValueProvider<InstrumentationStrategy> defaultProvider =
                    new ConstantValueProvider<>(new OutboundInstrumentationStrategy(), configuration);
            ValueProvider<InstrumentationStrategy> configProvider =
                    new FunctionalValueProvider<>(
                            requestee -> {
                                Optional<String> optInstrumentationtStrategyClass =
                                        requestee.getConfiguration().getOptionalStringProperty("wayang.core.optimizer.instrumentation");
                                if (!optInstrumentationtStrategyClass.isPresent()) {
                                    return null;
                                }
                                return instantiateDefault(optInstrumentationtStrategyClass.get());
                            },
                            defaultProvider
                    );
            ValueProvider<InstrumentationStrategy> overrideProvider = new ConstantValueProvider<>(configProvider);
            configuration.setInstrumentationStrategyProvider(overrideProvider);
        }
    }