Class SuppressClinitCallResolver
- All Implemented Interfaces:
VirtualCallResolver
VirtualCallResolver that drops every <clinit> candidate and delegates every
other candidate to a wrapped VirtualCallResolver (default: VirtualCallResolver.all()).
Combined with seedEntryPointClinits on AbstractCallGraphAlgorithm, this
reproduces two of Soot/Qilin's classic static-initializer handling modes: paired with
seedEntryPointClinits=true it is equivalent to FULL (only entry points' own
<clinit>s are modeled); paired with seedEntryPointClinits=false it is equivalent to
NONE (no <clinit> call is modeled at all).
-
Constructor Summary
ConstructorsConstructorDescriptionSuppressClinitCallResolver(@NonNull View view) SuppressClinitCallResolver(@NonNull View view, @NonNull VirtualCallResolver delegate) -
Method Summary
Modifier and TypeMethodDescription@NonNull ExplorationVerdicttryAdvanceCall(@NonNull SootMethod caller, @NonNull MethodSignature callee, @NonNull InvokableStmt statement) Decides whether a single already-resolved dynamic-dispatch candidate should be admitted as an edge in the call graph, and whether the callee should be expanded via this edge.
-
Constructor Details
-
SuppressClinitCallResolver
-
SuppressClinitCallResolver
-
-
Method Details
-
tryAdvanceCall
public @NonNull ExplorationVerdict tryAdvanceCall(@NonNull SootMethod caller, @NonNull MethodSignature callee, @NonNull InvokableStmt statement) Description copied from interface:VirtualCallResolverDecides whether a single already-resolved dynamic-dispatch candidate should be admitted as an edge in the call graph, and whether the callee should be expanded via this edge.calleeis intentionally a bareMethodSignature, not a resolvedSootMethod: most implementations only need identity/name/declaring-class information already present on the signature. Implementations that need method-level metadata (e.g. whether the target is abstract or a library class) should resolve it lazily via their ownViewreference, the same wayDefaultCallResolveralready holds one — this avoids forcing a lookup for every dynamic-dispatch candidate when most resolvers don't need one.- Specified by:
tryAdvanceCallin interfaceVirtualCallResolver- Parameters:
caller- the caller methodcallee- the resolved dynamic-dispatch candidate's signaturestatement- the invokable statement causing the call- Returns:
- the verdict for this edge
-