在抽象解释中使用 precise/unprecise DomainValues 是 OPAL

Working with precise/unprecise DomainValues in Abstract Interpretation is OPAL

在我的 OPAL 分析中,我按以下方式创建域值:

domain.TypedValue(org.opalj.ai.parameterToValueIndex(
    caller.isStatic, caller.descriptor, index), typeApproximation.upperTypeBound)

在我的 typeApproximation 对象中,我有信息,它的类型是类型上限还是精确的运行时类型。但是,我不知道如何将此信息传递给相应的 DomainValue。

我将这些 DomainValues 传递给 BaseAI.perform 方法以执行 java 方法的抽象解释:

BaseAI.perform(classFile, caller, domain)(Some(parameters))

DomainValues 包含在参数值中。

有没有可能告诉抽象解释,我的一些参数是精确的运行时类型,而其他一些参数只是类型上限?

org.opalj.ai.ReferenceValuesFactory定义的工厂方法(始终可用)使您能够创建具有所需属性的值。例如。使用 InitializedObjectValue 将在假定类型准确的地方创建一个 DomainValue。使用工厂方法:ReferenceValue 给定类型被视为类型上限。此外,org.opalj.ai.l1.DefaultReferenceValuesBinding 定义了通用工厂方法:

def ObjectValue(
    origin:            ValueOrigin,
    isNull:            Answer,
    isPrecise:         Boolean,
    theUpperTypeBound: ObjectType,
    t:                 Timestamp
): SObjectValue 

让您完全掌控。