Class ReflectiveModelExecutor

  • All Implemented Interfaces:
    Executor

    public class ReflectiveModelExecutor
    extends java.lang.Object
    implements Executor
    An Executor with support for ReflectiveModels.

    Checks the parameters sanity so that the models can work assuming they get clean data and matches the target ReflectiveModel and executes the method on it via the reflection supported by ModelHelper.

    • Method Detail

      • getMethodResult

        public MethodResult getMethodResult​(MethodExecutionInfo methodExecutionInfo,
                                            ValueCalculator valueCalculator)
        Description copied from interface: Executor
        Calculate the result of a given method. This is the return value for a non-constructor method (null if it returns void) and the instantiated object for a constructor.
        Specified by:
        getMethodResult in interface Executor
        Parameters:
        methodExecutionInfo - Information about the called method.
        valueCalculator - a function mapping the result of a method invocation (can be an Object with the result if the executor calculates a real value or a Model) to the appropriate Value used by the analysis. Should also be used to create values of unknown value since the executor might be able to provide additional information on them even if the value itself is not known (e.g., on the identifier of the returned value).
        Returns:
        The result of the method call, including information on the returned value or values or arguments on which side effects happened during the method execution. If the executor is not able to provide any additional information for any reason the returned value should be MethodResult.invalidResult(), so that the caller can know that execution failed and just provide its best approximation of the result.
      • getSupportedMethodSignatures

        public java.util.Set<MethodSignature> getSupportedMethodSignatures()
        Description copied from interface: Executor
        Get a list of method signatures that indicate which methods are supported by this executor.

        The returned methods should be exactly the ones that the executor is expected to be able to handle. The invocation unit does not make any additional assumption on the executors available to execute a method and will match them iff the signature of the target method matches exactly.

        Only full method signatures should be returned, the invocation unit does not support wildcards.

        Specified by:
        getSupportedMethodSignatures in interface Executor
        Returns:
        a set of methods the executor can handle.
      • generateMethodSignaturesForModel

        public static <T extends ReflectiveModel<T>> java.util.Set<MethodSignature> generateMethodSignaturesForModel​(ReflectiveModelExecutor.SupportedModelInfo<T> modelInfo,
                                                                                                                     HierarchyProvider hierarchy)
        Computes the methods the executor needs to support for the specified classes. This consists in all the methods implemented by the specified ReflectiveModel and additionally a signature for each class extending the class if inheritance has to be supported.
        Type Parameters:
        T - the model modeling the clazz.
        Parameters:
        modelInfo - information on which classes the executor wants to support (e.g., only the class modeled by a model or also everything implementing it, etc.)
        hierarchy - the class hierarchy.
        Returns:
        the signatures the executor supports for the clazz.