Package qilin.core.config
Class ContextSensitivity
java.lang.Object
qilin.core.config.ContextSensitivity
- Direct Known Subclasses:
BeanObjectSensitivity,DataDrivenCallSiteSensitivity,DataDrivenHybridObjectSensitivity,DataDrivenObjectSensitivity,EagleObjectSensitivity,MahjongCallSiteSensitivity,MahjongObjectSensitivity,SelectxCallSiteSensitivity,TunnelingCallSiteSensitivity,TunnelingHybridObjectSensitivity,TunnelingObjectSensitivity,TunnelingTypeSensitivity,TurnerObjectSensitivity,ZipperCallSiteSensitivity,ZipperObjectSensitivity
Type-safe, IDE-assisted description of a pointer-analysis context-sensitivity variant. Each
factory method validates its arguments at construction time instead of relying on regex parsing
plus a hand-written compatibility matrix, and
createPTA(qilin.core.PTAScene, qilin.core.config.PointerAnalysisConfig) builds the concrete BasePTA for the variant (context-debloating, where applicable, is applied per-variant here too)
- this is the single place a PTA gets constructed from, covering both the core
context-sensitivity variants (implemented alongside this class) and the research-toolkit ones
(bean, zipper, eagle, turner, mahjong, selectx, data-driven, tunneling - each implemented in its
own toolkit package, next to the *PTA class it builds). Not sealed: the toolkit
implementations live in different packages, and this project has no module-info.java, so
cross-package permits isn't available - the only publicly-constructible variants are
still exactly the ones exposed by the factory methods below.-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic ContextSensitivityBEAN-guided 2-object-sensitivity.static ContextSensitivitycallSite(int k) static ContextSensitivitycallSite(int k, int hk) abstract intThe method-context depth (k).abstract ContextConstructorBuilds theContextConstructorimplementing this context-sensitivity variant.abstract BasePTAcreatePTA(PTAScene scene, PointerAnalysisConfig config) Builds the concreteBasePTAfor this variant.static ContextSensitivityData-driven 2-callsite-sensitivity.static ContextSensitivityData-driven hybrid-2-object-sensitivity.static ContextSensitivityData-driven 2-object-sensitivity.static ContextSensitivityeagleObjectSensitive(int k) EAGLE-guided k-object-sensitivity.abstract intThe heap-context depth (hk).static ContextSensitivityhybridObjectSensitive(int k, int hk) static ContextSensitivityhybridTypeSensitive(int k, int hk) static ContextSensitivityprotected static Stringstatic ContextSensitivitymahjongCallSite(int k, int hk) MAHJONG-guided k-callsite-sensitivity.static ContextSensitivitymahjongObjectSensitive(int k, int hk) MAHJONG-guided k-object-sensitivity.protected static BasePTAmaybeDebloat(BasePTA pta, PointerAnalysisConfig config) static ContextSensitivityobjectSensitive(int k) static ContextSensitivityobjectSensitive(int k, int hk) protected static voidrequireNonNegative(int v, String name) protected static voidrequireObjectOrTypeHeapRange(int k, int hk) Shared by every object/type-sensitive variant: hk must be k or k-1.protected static voidrequirePositive(int v) intThe context depth passed to theUniformSelector.static ContextSensitivityselectxCallSite(int k) SELECTX-guided k-callsite-sensitivity.static ContextSensitivitytunnelingCallSite(int k, int hk) Tunneling k-callsite-sensitivity.static ContextSensitivitytunnelingHybridObjectSensitive(int k, int hk) Tunneling hybrid-k-object-sensitivity.static ContextSensitivitytunnelingObjectSensitive(int k, int hk) Tunneling k-object-sensitivity.static ContextSensitivitytunnelingTypeSensitive(int k, int hk) Tunneling k-type-sensitivity.static ContextSensitivityturnerObjectSensitive(int k) TURNER-guided k-object-sensitivity.static ContextSensitivitytypeSensitive(int k, int hk) static ContextSensitivityzipperCallSite(int k, int hk) ZIPPER-guided k-callsite-sensitivity.static ContextSensitivityzipperExpressCallSite(int k, int hk) Zipper-e (express): ZIPPER-guided k-callsite-sensitivity with the express-mode threshold cutoff.static ContextSensitivityzipperExpressObjectSensitive(int k, int hk) Zipper-e (express): ZIPPER-guided k-object-sensitivity with the express-mode threshold cutoff.static ContextSensitivityzipperObjectSensitive(int k, int hk) ZIPPER-guided k-object-sensitivity.
-
Constructor Details
-
ContextSensitivity
protected ContextSensitivity()
-
-
Method Details
-
createContextConstructor
Builds theContextConstructorimplementing this context-sensitivity variant. -
contextDepth
public abstract int contextDepth()The method-context depth (k). -
heapContextDepth
public abstract int heapContextDepth()The heap-context depth (hk). -
selectorContextDepth
public int selectorContextDepth()The context depth passed to theUniformSelector. Equal tocontextDepth()for every variant except hybrid-object-sensitivity, which selects on k+1. -
createPTA
Builds the concreteBasePTAfor this variant. -
insensitive
-
callSite
-
callSite
-
objectSensitive
-
objectSensitive
-
typeSensitive
-
hybridObjectSensitive
-
hybridTypeSensitive
-
beanObjectSensitive
BEAN-guided 2-object-sensitivity. Only k=2/hk=1 is supported byBeanPTA. -
zipperObjectSensitive
ZIPPER-guided k-object-sensitivity. -
zipperCallSite
ZIPPER-guided k-callsite-sensitivity. -
zipperExpressObjectSensitive
Zipper-e (express): ZIPPER-guided k-object-sensitivity with the express-mode threshold cutoff. -
zipperExpressCallSite
Zipper-e (express): ZIPPER-guided k-callsite-sensitivity with the express-mode threshold cutoff. -
eagleObjectSensitive
EAGLE-guided k-object-sensitivity. Heap-context depth is always k-1. -
turnerObjectSensitive
TURNER-guided k-object-sensitivity. -
mahjongObjectSensitive
MAHJONG-guided k-object-sensitivity. -
mahjongCallSite
MAHJONG-guided k-callsite-sensitivity. -
dataDrivenObjectSensitive
Data-driven 2-object-sensitivity. Only k=2/hk=1 is supported byDataDrivenPTA. -
dataDrivenCallSite
Data-driven 2-callsite-sensitivity. Only k=2/hk=1 is supported byDataDrivenPTA. -
dataDrivenHybridObjectSensitive
Data-driven hybrid-2-object-sensitivity. Only k=2/hk=1 is supported byDataDrivenPTA. -
tunnelingObjectSensitive
Tunneling k-object-sensitivity. -
tunnelingCallSite
Tunneling k-callsite-sensitivity. -
tunnelingTypeSensitive
Tunneling k-type-sensitivity. -
tunnelingHybridObjectSensitive
Tunneling hybrid-k-object-sensitivity. -
selectxCallSite
SELECTX-guided k-callsite-sensitivity. -
requireNonNegative
-
requirePositive
protected static void requirePositive(int v) -
requireObjectOrTypeHeapRange
protected static void requireObjectOrTypeHeapRange(int k, int hk) Shared by every object/type-sensitive variant: hk must be k or k-1. -
label
-
maybeDebloat
-