
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