0

在我的 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 包含在参数值中。

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

4

1 回答 1

1

定义的工厂方法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 

这使您可以完全控制。

于 2016-06-24T09:17:56.713 回答