Работа с точными / неточными значениями DomainValues в абстрактной интерпретации является 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 содержатся в значении параметров.
Есть ли возможность сказать абстрактной интерпретации, что некоторые из моих параметров являются точными типами времени выполнения, а некоторые другие параметры являются только верхними границами типов?
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
который дает вам полный контроль.