Interface ReflectiveModel<T extends ReflectiveModel<T>>

  • Type Parameters:
    T - Recursive generic type of the class implementing this interface.
    All Superinterfaces:
    Model
    All Known Implementing Classes:
    ClassModel

    public interface ReflectiveModel<T extends ReflectiveModel<T>>
    extends Model
    A mixin fully implementing the Model interface, so that the classes implementing the model don't have to do it themselves. This mixin assumes, that the class implementing it follows these rules:
    • Has a constructor with no arguments (can be private) that will be used for creating instances for static methods, constructors and instance methods with unknown values
    • Uses ModeledConstructor, ModeledStaticMethod and ModeledInstanceMethod to mark the model methods. These methods should be private.

    All annotated methods should take ModelHelper.MethodExecutionContext as the first argument, the remaining arguments are Value arguments where their number corresponds to the number of arguments the modelled method expects.

    • Field Detail

      • log

        static final org.apache.logging.log4j.Logger log
    • Method Detail

      • init

        default MethodResult init​(MethodExecutionInfo methodExecutionInfo,
                                  ValueCalculator valueCalculator)
        Description copied from interface: Model
        Execute a constructor call for the modeled class.

        It is suggested to add logic to allow running this only on a dummy model without any state.

        Specified by:
        init in interface Model
        Parameters:
        methodExecutionInfo - execution info of the target method.
        valueCalculator - the value calculator that should be used to create any value in the result.
        Returns:
        the result of the method invocation. Since it's a constructor invocation the return value of the result is expected to be empty and the constructed value should be set as the updated instance.
      • invoke

        default MethodResult invoke​(MethodExecutionInfo methodExecutionInfo,
                                    ValueCalculator valueCalculator)
        Description copied from interface: Model
        Execute an instance method on the modeled object. The state of the instance is represented by the state of the model.

        It is suggested to add logic to allow running this only on a model representing an initialized object.

        Specified by:
        invoke in interface Model
        Parameters:
        methodExecutionInfo - execution info of the target method.
        valueCalculator - the value calculator that should be used to create any value in the result.
        Returns:
        the result of the method invocation.
      • invokeStatic

        default MethodResult invokeStatic​(MethodExecutionInfo methodExecutionInfo,
                                          ValueCalculator valueCalculator)
        Description copied from interface: Model
        Execute a static method for the modeled class.

        It is suggested to add logic to allow running this only on a dummy model without any state.

        Specified by:
        invokeStatic in interface Model
        Parameters:
        methodExecutionInfo - execution info of the target method.
        valueCalculator - the value calculator that should be used to create any value in the result.
        Returns:
        the result of the method invocation.