In my OPAL-analysis, I create domain values in the following manner:
domain.TypedValue(org.opalj.ai.parameterToValueIndex(
caller.isStatic, caller.descriptor, index), typeApproximation.upperTypeBound)
In my typeApproximation objects, I have the information, whether its type is an upper type bound or a precise runtime type. However, I do not know, how to pass this information to the respective DomainValue.
I pass these DomainValues to the BaseAI.perform
method to perform an abstract interpretation of a java method:
BaseAI.perform(classFile, caller, domain)(Some(parameters))
The DomainValues are contained in the parameters value.
Is there any possibility to tell the abstract interpretation, that some of my parameters are precise runtime types, while some other parameters are only upper type bounds?
The factory methods defined by
org.opalj.ai.ReferenceValuesFactory
(which are always available) enable you to create values that have the required properties. E.g. usingInitializedObjectValue
a DomainValue will be created where the type is assumed to be precise. Using the factory method:ReferenceValue
the given type is treated as an upper type bound. Additionally, org.opalj.ai.l1.DefaultReferenceValuesBinding defines the generic factory method:which gives you complete control.