Class QilinCallGraphConfig

java.lang.Object
qilin.callgraph.QilinCallGraphConfig
All Implemented Interfaces:
CallGraphConfig

public final class QilinCallGraphConfig extends Object implements CallGraphConfig
Qilin-specific stage of the unified CallGraphConfig builder chain. Obtained via CallGraphConfigBuilder.into(QilinCallGraphConfig::from), since sootup.callgraph cannot depend on sootup.qilin directly:
   CallGraph cg = CallGraphConfig.builder()
       .view(view).entryPoints(entryPoints)
       .into(QilinCallGraphConfig::from)
       .mainClass(mainClassType)
       .pointerAnalysisConfig(PointerAnalysisConfig.builder().contextSensitivity(ContextSensitivity.callSite(2)))
       .build()
       .computeCallGraph();
 

Requires an explicit QilinCallGraphConfig.Builder.mainClass: PTAScene hard-requires exactly one main class at construction time (a real architectural constraint, not just a config-surface choice), so the common stage's entryPoints list - which may name several methods - is not used to derive it. It still feeds the seed flag/PointerAnalysisConfig.getClinitVirtualCallResolver() via CommonCallGraphSettings, which this stage overrides onto whatever PointerAnalysisConfig.Builder the caller supplies (or a fresh default one).

The common stage's CallResolver (pre-dispatch) is not consulted: qilin's own dispatch resolution (qilin.core.VirtualCalls) doesn't integrate with sootup.callgraph.scope.CallResolver.

  • Method Details

    • from

      public static @NonNull QilinCallGraphConfig.Builder from(@NonNull CommonCallGraphSettings common)
      Entry point for CallGraphConfigBuilder.into(QilinCallGraphConfig::from).
    • computeCallGraph

      public @NonNull CallGraph computeCallGraph()
      Description copied from interface: CallGraphConfig
      Builds the call graph for the analysis described by this configuration object. All state needed (view, entry points, algorithm-specific options) is already captured by the concrete implementation, typically via its own builder.
      Specified by:
      computeCallGraph in interface CallGraphConfig