void StaticSinkPass::run_pass(DexClassesVector& dexen, ConfigFiles& cfg) { auto method_list = cfg.get_coldstart_methods(); auto methods = strings_to_dexmethods(method_list); TRACE(SINK, 1, "methods used in coldstart: %lu\n", methods.size()); auto coldstart_classes = get_coldstart_classes(dexen, cfg); count_coldstart_statics(coldstart_classes); auto statics = get_noncoldstart_statics(coldstart_classes, methods); TRACE(SINK, 1, "statics not used in coldstart: %lu\n", statics.size()); remove_primary_dex_refs(dexen[0], statics); TRACE(SINK, 1, "statics after removing primary dex: %lu\n", statics.size()); auto sink_map = get_sink_map(dexen, coldstart_classes, statics); TRACE(SINK, 1, "statics with sinkable callsite: %lu\n", sink_map.size()); auto holder = move_statics_out(statics, sink_map); TRACE(SINK, 1, "methods in static holder: %lu\n", holder->get_dmethods().size()); DexClasses dc(1); dc.insert_at(holder, 0); dexen.emplace_back(std::move(dc)); }