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:
ClassLoaderModel, 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 Details

    • log

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

    • 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.