Могу ли я преобразовать FieldValue в DomainValue в OPAL?

Я пишу статический анализ с использованием фреймворка OPAL.

Поэтому я вызываю абстрактную интерпретацию метода, где у меня есть верхние границы типа для переданных параметров как FieldTypes.

Это выглядит так:

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

Где параметры это IndexedSeq[FieldType].

Это приводит к следующей ошибке типа:

несоответствие типов; найдено: scala.collection.immutable.IndexedSeq[org.opalj.br.FieldType] обязательно: опция [scala.collection.IndexedSeq[domain.DomainValue]] (которая расширяется до) Option[scala.collection.IndexedSeq[domain.Value]]

Есть ли возможность конвертировать мои FieldTypes в DomainValues?

Могу ли я использовать

domain.ClassValue(origin, identifiedFieldType)

преобразовать его, даже если тип, например, int? (так как int не является классом)

Если да, есть ли метод, который вычисляет исходный индекс для параметров метода?

1 ответ

Решение

Часть первая вопроса:

Ты можешь использовать:

domain.TypedValue(origin, parameterType) 

В этом случае параметром Type может быть "любой тип".

Вторая часть вопроса:

Следующая функция, определенная объектом пакета org.opalj.ai, может использоваться для вычисления правильного индекса значения.

def parameterToValueIndex(
    isStaticMethod: Boolean,
    descriptor:     MethodDescriptor,
    parameterIndex: Int
): Int = {
Другие вопросы по тегам