1

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

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

它看起来像这样:

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

其中参数是 IndexedSeq[FieldType]。

这会导致以下类型错误:

类型不匹配; 找到:scala.collection.immutable.IndexedSeq[org.opalj.br.FieldType] 需要:Option[scala.collection.IndexedSeq[domain.DomainValue]](扩展为)Option[scala.collection.IndexedSeq[domain.Value] ]

是否有可能将我的 FieldTypes 转换为 DomainValues?

我可以用吗

domain.ClassValue(origin, identifiedFieldType)

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

如果是,是否有一种方法可以计算方法参数的原始索引?

4

1 回答 1

1

问题的第一部分:

您可以使用:

domain.TypedValue(origin, parameterType) 

在这种情况下 parameterType 可以是“任何类型”。

问题的第二部分:

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

def parameterToValueIndex(
    isStaticMethod: Boolean,
    descriptor:     MethodDescriptor,
    parameterIndex: Int
): Int = {
于 2016-06-14T15:38:47.747 回答