コード例 #1
0
ファイル: Remover.cpp プロジェクト: plast-lab/redex
void RemoverPass::run_pass(DexStoresVector& dexen, ConfigFiles& cfg, PassManager& mgr) {
  CMethodStrs rMethodStrs;
  CMethodStrs aMethodStrs;
  std::ifstream aFile;

  f_name_rmethods = cfg.get_rmethods();
  if (f_name_rmethods.empty()) {
      f_name_rmethods = "methods_to_remove.csv";
      std::cout << "Using default file " << f_name_rmethods << std::endl;
  } else
      std::cout << "Using custom file " << f_name_rmethods << std::endl;

  f_name_amethods = cfg.get_amethods();
  if (f_name_amethods.empty()) {
      f_name_amethods = "methods_to_make_abstract.csv";
      std::cout << "Using default file " << f_name_amethods << std::endl;
  } else
      std::cout << "Using custom file " << f_name_amethods << std::endl;

  std::cout << "Reading list of methods to remove from " << f_name_rmethods << "..." << std::endl;
  read_methods(f_name_rmethods, rMethodStrs);

  std::cout << "Reading list of methods to make abstract from " << f_name_amethods << "..." << std::endl;
  read_methods(f_name_amethods, aMethodStrs);

  Scope scope = build_class_scope(dexen);
  std::cout << "Method removal pass" << std::endl;
  remove_methods(scope, rMethodStrs);

  std::cout << "Method abstraction optimization" << std::endl;
  make_methods_abstract(scope, aMethodStrs);

  std::cout << "Method removal pass done." << std::endl;
}