2016-06-24 1 views
0

Dans mon OPAL-analyse, je crée des valeurs de domaine de la manière suivante:Travailler avec DomainValues ​​précis/imprécis dans l'interprétation abstraite est OPAL

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

Dans mes objets typeApproximation, j'ai les informations, que ce soit son type un type supérieur lié ou un type d'exécution précis. Cependant, je ne sais pas, comment transmettre cette information à la DomainValue respective.

Je passe ces DomainValues ​​à la méthode BaseAI.perform pour effectuer une interprétation abstraite d'une méthode Java:

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

Les DomainValues ​​sont contenues dans la valeur des paramètres.

Y a-t-il une possibilité de dire l'interprétation abstraite, que certains de mes paramètres sont des types d'exécution précis, tandis que d'autres paramètres ne sont que des bornes de type supérieur?

Répondre

1

Les méthodes d'usine définies par org.opalj.ai.ReferenceValuesFactory (qui sont toujours disponibles) vous permettent de créer des valeurs ayant les propriétés requises. Par exemple. en utilisant InitializedObjectValue une DomainValue sera créée où le type est supposé être précis. En utilisant la méthode usine: ReferenceValue le type donné est traité comme un type supérieur lié. En outre, org.opalj.ai.l1.DefaultReferenceValuesBinding définit la méthode d'usine générique:

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

qui vous donne un contrôle complet.

+0

Merci. Depuis que j'ai quelques types précis, ainsi que certaines limites de type supérieur, j'ai utilisé la méthode flexible ObjectValue. Cependant, j'ai dû définir un nouveau domaine, ce qui a rendu cette méthode publique, puisqu'elle est déclarée protégée. – mariotrageser