public static ValueAnalysisRefiner create(final ConfigurableProgramAnalysis pCpa)
      throws InvalidConfigurationException {

    final ARGCPA argCpa = retrieveCPA(pCpa, ARGCPA.class);
    final ValueAnalysisCPA valueAnalysisCpa = retrieveCPA(pCpa, ValueAnalysisCPA.class);

    valueAnalysisCpa.injectRefinablePrecision();

    final LogManager logger = valueAnalysisCpa.getLogger();
    final Configuration config = valueAnalysisCpa.getConfiguration();
    final CFA cfa = valueAnalysisCpa.getCFA();

    final StrongestPostOperator<ValueAnalysisState> strongestPostOp =
        new ValueAnalysisStrongestPostOperator(logger, Configuration.builder().build(), cfa);

    final ValueAnalysisFeasibilityChecker checker =
        new ValueAnalysisFeasibilityChecker(strongestPostOp, logger, cfa, config);

    final GenericPrefixProvider<ValueAnalysisState> prefixProvider =
        new ValueAnalysisPrefixProvider(logger, cfa, config);

    return new ValueAnalysisRefiner(
        argCpa,
        checker,
        strongestPostOp,
        new PathExtractor(logger, config),
        prefixProvider,
        config,
        logger,
        valueAnalysisCpa.getShutdownNotifier(),
        cfa);
  }
 private Configuration getConfigFromFile(Path path)
     throws IOException, InvalidConfigurationException {
   ConfigurationBuilder singleConfigBuilder = Configuration.builder();
   singleConfigBuilder.copyFrom(globalConfig);
   singleConfigBuilder.clearOption("restartAlgorithm.configFiles");
   singleConfigBuilder.loadFromFile(path);
   Configuration singleConfig = singleConfigBuilder.build();
   return singleConfig;
 }