Class PointerAnalysisConfig

java.lang.Object
qilin.core.config.PointerAnalysisConfig

public final class PointerAnalysisConfig extends Object
Immutable, type-safe replacement for the old CoreConfig/PTAConfig singletons. An instance is threaded explicitly through PTAScene (and from there reachable via PTA#getConfig()) so that multiple independent analysis runs - each with their own config - can coexist in the same JVM.
  • Method Details

    • builder

      public static PointerAnalysisConfig.Builder builder()
    • getContextSensitivity

      public ContextSensitivity getContextSensitivity()
    • getHeapAbstractionPolicy

      public PointerAnalysisConfig.HeapAbstractionPolicy getHeapAbstractionPolicy()
    • isSingleEntry

      public boolean isSingleEntry()
    • isSeedEntryPointClinits

      public boolean isSeedEntryPointClinits()
      Whether each entry point's declaring-class <clinit> is eagerly seeded as a root before traversal starts, independently of whether the fake-main body actually triggers it. See AbstractCallGraphAlgorithm(sootup.core.views.View, sootup.callgraph.scope.CallResolver, VirtualCallResolver, boolean) for the four classic static-initializer handling modes this, combined with getClinitVirtualCallResolver(), reproduces: FULL = true + new SuppressClinitCallResolver(view); ON_THE_FLY (default) = false + VirtualCallResolver.all(); APP = false + new AppOnlyClinitCallResolver(view); NONE = false + new SuppressClinitCallResolver(view).
    • getClinitVirtualCallResolver

      public VirtualCallResolver getClinitVirtualCallResolver()
      Governs admission of <clinit> calls discovered on the fly as the points-to analysis grows (see isSeedEntryPointClinits() for how the two combine into the four classic modes). Qilin does not track the statement that triggered a given <clinit>, so resolvers consulted here receive a synthetic invoke statement standing in for it - resolvers that only inspect the callee (as SuppressClinitCallResolver/ AppOnlyClinitCallResolver do) are unaffected by this.
    • isPreciseArrayElement

      public boolean isPreciseArrayElement()
    • isStringConstants

      public boolean isStringConstants()
    • isPreciseExceptions

      public boolean isPreciseExceptions()
    • isEnforceEmptyContextForIgnoreTypes

      public boolean isEnforceEmptyContextForIgnoreTypes()
    • getReflectionLogPath

      public String getReflectionLogPath()
      Path to a Tamiflex reflection log, or null if reflection resolution is disabled.
    • isResolveDynamicInvoke

      public boolean isResolveDynamicInvoke()
      Whether to resolve invokedynamic call sites bootstrapped by LambdaMetafactory (lambdas and method references) to their target method. Unlike reflection resolution this needs no external log - the target is a constant in the bootstrap args - so it defaults to enabled.
    • isPreAnalysisOnly

      public boolean isPreAnalysisOnly()
    • isContextDebloating

      public boolean isContextDebloating()
    • getDebloatApproach

      public PointerAnalysisConfig.DebloatApproach getDebloatApproach()
    • getTurnerConfig

      public PointerAnalysisConfig.TurnerConfig getTurnerConfig()
    • getAnalysisName

      public String getAnalysisName()
      Human-readable analysis name used for report/output directory naming.
    • getOutputDirectory

      public String getOutputDirectory()
    • isDumpJimple

      public boolean isDumpJimple()
    • isDumpPointsToSet

      public boolean isDumpPointsToSet()
    • isDumpLibraryPointsToSet

      public boolean isDumpLibraryPointsToSet()
    • isDumpStats

      public boolean isDumpStats()