Class AppOnlyClinitCallResolver
- All Implemented Interfaces:
VirtualCallResolver
VirtualCallResolver that drops <clinit> candidates declared on a library class
(see SootClass.isLibraryClass()) and delegates every other candidate - including
<clinit>s of application classes - to a wrapped VirtualCallResolver (default: VirtualCallResolver.all()).
Paired with seedEntryPointClinits=false on AbstractCallGraphAlgorithm, this is
equivalent to Soot/Qilin's classic APP static-initializer handling mode: like
ON_THE_FLY, every <clinit> triggered during traversal is modeled as it's discovered,
except those belonging to library classes.
-
Constructor Summary
ConstructorsConstructorDescriptionAppOnlyClinitCallResolver(@NonNull View view) AppOnlyClinitCallResolver(@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
-
AppOnlyClinitCallResolver
-
AppOnlyClinitCallResolver
-
-
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
-