All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ct.bytecode-representation_2.13.5.0.0.source-code.reference.conf Maven / Gradle / Ivy

The newest version!
org.opalj {

  br {
    # The CFG's structure is validated; primarily of interest when the algorithms related to
    # computing the CFG are maintained, extended, or changed.
    cfg.CFG.Validate = false,
    cfg.CFG.DF.Solver.Trace = false,

    # Allows to enforce Java 11+ call semantics (i.e., invokeinterface may invoke private methods)
    Project.enforceJava11CallSemantics = false,

    reader {
      ClassFileReader {
        BytecodeOptimizer {
          simplifyControlFlow = true, // default is "true"
          logControlFlowSimplification = false // default is "false"
        },
        Invokedynamic {
          rewrite = true, // default is "true"
          logLambdaRewrites = false, // default is "false"
          logStringConcatRewrites = false, // default is "false"
          logObjectMethodsRewrites = false, // default is "false"
          logUnknownInvokeDynamics = true // default is "true"
        },
        DynamicConstants {
          rewrite = true, // default is "true"
          logRewrites = false, // default is "false"
          logUnknownDynamicConstants = true, // default is "true"
          logUnresolvedDynamicConstants = true // default is "true"
        },
        deleteSynthesizedClassFilesAttributes = true // default is "true"
      }
    }

    analyses {
      cg {

        callBySignatureResolution = false

        ClosedPackagesKey {
          analysis = "org.opalj.br.analyses.cg.AllPackagesClosed" # considers all packages closed (e.g. suitable when analyzing an application)

          #analysis = "org.opalj.br.analyses.cg.OpenCodeBase" # considers all packages open (e.g. suitable for security analyses)

          #analysis = "org.opalj.br.analyses.cg.ClosedPackagesConfiguration"
          #closedPackages = "java(/.*)*"
          # Use a regular expresion (e.g. "java(/.*)*") to specify all packages
          # that shall be considered closed. In some cases, it might be easier to 
          # specify all open packages. In this case it's possible to invert the
          # specified regular expression (e.g. "^(java(/.*)*)"). The latter example
          # would consider all packages except the java packages as closed.

        }

        ClassExtensibilityKey {
          analysis = "org.opalj.br.analyses.cg.ConfiguredFinalClasses"
          finalClasses = [] # used by org.opalj.br.analyses.cg.ConfiguredFinalClasses
        }

        InitialEntryPointsKey {
          #analysis = "org.opalj.br.analyses.cg.ApplicationEntryPointsFinder"
          analysis = "org.opalj.br.analyses.cg.ApplicationWithoutJREEntryPointsFinder"
          #analysis = "org.opalj.br.analyses.cg.LibraryEntryPointsFinder"
          #analysis = "org.opalj.br.analyses.cg.MetaEntryPointsFinder"
          entryPoints = [
            {declaringClass = "java/lang/System", name = "initializeSystemClass", descriptor = "()V"},
            {declaringClass = "java/lang/Thread", name = "", descriptor = "(Ljava/lang/ThreadGroup;Ljava/lang/Runnable;)V"},
            {declaringClass = "java/lang/Thread", name = "", descriptor = "(Ljava/lang/ThreadGroup;Ljava/lang/String;)V"},
            {declaringClass = "java/lang/ThreadGroup", name = "", descriptor = "()V"},
            {declaringClass = "java/lang/Thread", name = "exit", descriptor = "()V"},
            {declaringClass = "java/lang/ThreadGroup", name = "uncaughtException", descriptor = "(Ljava/lang/Thread;Ljava/lang/Throwable;)V"},
            {declaringClass = "java/lang/ref/Reference$ReferenceHandler", name = "run", descriptor = "()V"},
            {declaringClass = "java/lang/ClassLoader", name = " ", descriptor = "()V"},
            {declaringClass = "java/lang/ClassLoader", name = "loadClassInternal", descriptor = "(Ljava/lang/String;)Ljava/lang/Class;"},
            {declaringClass = "java/lang/ClassLoader", name = "checkPackageAccess", descriptor = "(Ljava/lang/Class;Ljava/security/ProtectionDomain;)V"},
            {declaringClass = "java/lang/ClassLoader", name = "addClass", descriptor = "(Ljava/lang/Class;)V"},
            {declaringClass = "java/lang/ClassLoader", name = "findNative", descriptor = "(Ljava/lang/ClassLoader;Ljava/lang/String;)J"},
            {declaringClass = "java/security/PrivilegedActionException", name = "", descriptor = "(Ljava/lang/Exception;)V"}
          ]
          # additional entry points can be specified by adding a respective tuple that must consist of
          # a class name and a method name and can be refined by also defining a method descriptor.
          # In addition, the specified class name can be suffixed with a "+" which implies that all methods that match the
          # specified name -- and if definied descriptor -- from subtypes are considered too.
          # eg.:
          # entryPoints = [
          #   {declaringClass = "java/util/List", name = "add"},
          #   {declaringClass = "java/util/List", name = "remove", descriptor = "(I)Z"}
          # ]
          # Please note that the first entry point, by adding the "=" to the declaring class' name, considers all
          # "add" methods from all subtypes independently form the respective method's descriptor. In constrast,
          # the second entry does specify a descriptor and does not consider list subtypes (by not suffixing a plus to
          # the declaringClass) which implies that only the remove method with this descriptor is considered as entry point.
        }

        InitialInstantiatedTypesKey {
          analysis = "org.opalj.br.analyses.cg.ApplicationInstantiatedTypesFinder"
          #analysis = "org.opalj.br.analyses.cg.LibraryInstantiatedTypesFinder"

          instantiatedTypes = [

          ]
        }
      }
    }
  }

  fpcf {

    # Prints out information about the executed analyses.
    analyses.FPCFAnalysesManager {
      Trace = true
    }

    registry {
      analyses {
        "L0CompileTimeConstancyAnalysis" {
          description = "Determines if static fields are compile time constants.",
          eagerFactory = "org.opalj.br.fpcf.analyses.EagerL0CompileTimeConstancyAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.LazyL0CompileTimeConstancyAnalysis"
        },
        "L0SelfReferenceLeakageAnalysis" {
          description = "Determines if an object may leak its self reference (`this`).",
          eagerFactory = "org.opalj.br.fpcf.analyses.L0SelfReferenceLeakageAnalysis"
          #TODO This one does not yet have a lazy factory
        },
        "L1ThrownExceptionsAnalysis" {
          description = "Determines the exceptions that are thrown by a method.",
          eagerFactory = "org.opalj.br.fpcf.analyses.EagerL1ThrownExceptionsAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.LazyL1ThrownExceptionsAnalysis"
        },
        "L0AllocationFreenessAanalysis" {
          description = "Determines if a method may (transitively) cause allocations.",
          eagerFactory = "org.opalj.br.fpcf.analyses.EagerL0AllocationFreenessAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.LazyL0AllocationFreenessAnalysis"
        },
        "StaticDataUsageAnalysis" {
          description = "Determines if a method uses only compile time constant static state.",
          eagerFactory = "org.opalj.br.fpcf.analyses.EagerStaticDataUsageAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.LazyStaticDataUsageAnalysis"
        },
        "L0PurityAnalysis" {
          description = "Determines a method's purity.",
          eagerFactory = "org.opalj.br.fpcf.analyses.EagerL0PurityAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.LazyL0PurityAnalysis"
        },
        "ClassImmutabilityAnalysis" {
          description = "Determines the immutability of individual classes.",
          eagerFactory = "org.opalj.br.fpcf.analyses.immutability.EagerClassImmutabilityAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.immutability.LazyClassImmutabilityAnalysis"
        },
        "TypeImmutabilityAnalysis" {
          description = "Determines the immutability of types (i.e., sets of classes).",
          eagerFactory = "org.opalj.br.fpcf.analyses.immutability.EagerTypeImmutabilityAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.immutability.LazyTypeImmutabilityAnalysis"
        },
        // The virtual/aggregating ones...
        "VirtualMethodThrownExceptionsAnalysis" {
          description = "Determines the aggregated thrown exceptions for a virtual method.",
          eagerFactory = "org.opalj.br.fpcf.analyses.EagerVirtualMethodThrownExceptionsAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.LazyVirtualMethodThrownExceptionsAnalysis"
        },
        "VirtualMethodAllocationFreenessAnalysis" {
          description = "Determines the aggregated allocation freeness for a virtual method.",
          eagerFactory = "org.opalj.br.fpcf.analyses.EagerVirtualMethodPurityAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.LazyVirtualMethodPurityAnalysis"
        },
        "VirtualMethodStaticDataUsageAnalysis" {
          description = "Determines the aggregated static data use freeness for a virtual method.",
          eagerFactory = "org.opalj.br.fpcf.analyses.EagerVirtualMethodStaticDataUsageAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.LazyVirtualMethodStaticDataUsageAnalysis"
        },
        "VirtualMethodPurityAnalysis" {
          description = "Determines the aggregated purity for a virtual method.",
          eagerFactory = "org.opalj.br.fpcf.analyses.EagerVirtualMethodPurityAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.LazyVirtualMethodPurityAnalysis"
        },
        "VirtualCallAggregatingEscapeAnalysis" {
          description = "Determines the aggregated escape level for a virtual formal parameter.",
          eagerFactory = "org.opalj.br.fpcf.analyses.EagerVirtualCallAggregatingEscapeAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.LazyVirtualCallAggregatingEscapeAnalysis"
        },
        "VirtualReturnValueFreshnessAnalysis" {
          description = "Determines the aggregated return value freshness for a virtual method.",
          eagerFactory = "org.opalj.br.fpcf.analyses.EagerVirtualReturnValueFreshnessAnalysis",
          lazyFactory = "org.opalj.br.fpcf.analyses.LazyVirtualReturnValueFreshnessAnalysis"
        }
      }
    }

    analysis {
      L0SelfReferenceLeakage {
        debug = true // default is "false"
      }
    }
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy