我可以将 FieldValue 转换为 OPAL 中的 DomainValue 吗?

Can I convert a FieldValue to a DomainValue in OPAL?

我正在使用 OPAL 框架编写静态分析。

因此,我调用了一个方法的抽象解释,其中我将传递的参数的类型上限设置为 FieldTypes。

看起来像这样:

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

其中参数是 IndexedSeq[FieldType]。

这会导致以下类型错误:

type mismatch; found : scala.collection.immutable.IndexedSeq[org.opalj.br.FieldType] required: Option[scala.collection.IndexedSeq[domain.DomainValue]] (which expands to) Option[scala.collection.IndexedSeq[domain.Value]]

是否可以将我的 FieldType 转换为 DomainValues?

我可以使用

domain.ClassValue(origin, identifiedFieldType)

转换它,即使类型是例如一个整数? (因为 int 不是 class)

如果是,是否有计算方法参数来源索引的方法?

问题的第一部分:

您可以使用:

domain.TypedValue(origin, parameterType) 

在这种情况下parameterType可以是"any type"。

问题的第二部分:

包对象 org.opalj.ai 定义的以下函数可用于计算正确的值索引。

def parameterToValueIndex(
    isStaticMethod: Boolean,
    descriptor:     MethodDescriptor,
    parameterIndex: Int
): Int = {