test_class.declarator: ID = ProjectId.newBuilder()
                                                   .setId("prj-01")
                                                   .build()
test_class.modifier: private static final
test_class.original_string: private static final ProjectId ID = ProjectId.newBuilder()
                                                   .setId("prj-01")
                                                   .build();
test_class.type: ProjectId
test_class.var_name: ID
test_class.declarator: createProject = Given.CommandMessage.createProject(ID)
test_class.modifier: private static final
test_class.original_string: private static final AggCreateProject createProject = Given.CommandMessage.createProject(ID);
test_class.type: AggCreateProject
test_class.var_name: createProject
test_class.declarator: pauseProject = Given.CommandMessage.pauseProject(ID)
test_class.modifier: private static final
test_class.original_string: private static final AggPauseProject pauseProject = Given.CommandMessage.pauseProject(ID);
test_class.type: AggPauseProject
test_class.var_name: pauseProject
test_class.declarator: cancelProject = Given.CommandMessage.cancelProject(ID)
test_class.modifier: private static final
test_class.original_string: private static final AggCancelProject cancelProject = Given.CommandMessage.cancelProject(ID);
test_class.type: AggCancelProject
test_class.var_name: cancelProject
test_class.declarator: addTask = Given.CommandMessage.addTask(ID)
test_class.modifier: private static final
test_class.original_string: private static final AggAddTask addTask = Given.CommandMessage.addTask(ID);
test_class.type: AggAddTask
test_class.var_name: addTask
test_class.declarator: startProject = Given.CommandMessage.startProject(ID)
test_class.modifier: private static final
test_class.original_string: private static final AggStartProject startProject = Given.CommandMessage.startProject(ID);
test_class.type: AggStartProject
test_class.var_name: startProject
test_class.declarator: aggregate
test_class.modifier: private
test_class.original_string: private TestAggregate aggregate;
test_class.type: TestAggregate
test_class.var_name: aggregate
test_class.declarator: amishAggregate
test_class.modifier: private
test_class.original_string: private AmishAggregate amishAggregate;
test_class.type: AmishAggregate
test_class.var_name: amishAggregate
test_class.declarator: context
test_class.modifier: private
test_class.original_string: private BoundedContext context;
test_class.type: BoundedContext
test_class.var_name: context
test_class.declarator: repository
test_class.modifier: private
test_class.original_string: private TestAggregateRepository repository;
test_class.type: TestAggregateRepository
test_class.var_name: repository
test_class.file: server/src/test/java/io/spine/server/aggregate/AggregateTest.java
test_class.identifier: AggregateTest
test_case.body: @Test
      @DisplayName("record modification time when command is handled")
      void recordModificationUponCommandHandled() {
          try {
              Timestamp frozenTime = Time.currentTime();
              Time.setProvider(new TimeTests.FrozenMadHatterParty(frozenTime));
  
              dispatchCommand(aggregate, command(createProject));
  
              assertEquals(frozenTime, aggregate.whenModified());
          } finally {
              Time.resetProvider();
          }
      }
test_case.class_method_signature: AggregateTest.recordModificationUponCommandHandled()
test_case.full_signature: @Test @DisplayName("record modification time when command is handled") void recordModificationUponCommandHandled()
test_case.identifier: recordModificationUponCommandHandled
test_case.invocations: currentTime setProvider dispatchCommand command assertEquals whenModified resetProvider
test_case.modifiers: @Test @DisplayName("record modification time when command is handled")
test_case.parameters: ()
test_case.return: void
test_case.signature: void recordModificationUponCommandHandled()
focal_class.declarator: eventCountAfterLastSnapshot = 0
focal_class.modifier: private
focal_class.original_string: private int eventCountAfterLastSnapshot = 0;
focal_class.type: int
focal_class.var_name: eventCountAfterLastSnapshot
focal_class.declarator: uncommittedEvents = UncommittedEvents.ofNone()
focal_class.modifier: private
focal_class.original_string: private UncommittedEvents uncommittedEvents = UncommittedEvents.ofNone();
focal_class.type: UncommittedEvents
focal_class.var_name: uncommittedEvents
focal_class.declarator: idempotencyGuard
focal_class.modifier: private
focal_class.original_string: private IdempotencyGuard idempotencyGuard;
focal_class.type: IdempotencyGuard
focal_class.var_name: idempotencyGuard
focal_class.file: server/src/main/java/io/spine/server/aggregate/Aggregate.java
focal_class.identifier: Aggregate
focal_class.interfaces: implements EventPlayer, EventReactor
focal_class.class_method_signature: Aggregate.Aggregate()
focal_class.full_signature: protected  Aggregate()
focal_class.identifier: Aggregate
focal_class.modifiers: protected
focal_class.parameters: ()
focal_class.signature:  Aggregate()
focal_class.class_method_signature: Aggregate.Aggregate(I id)
focal_class.full_signature: protected  Aggregate(I id)
focal_class.identifier: Aggregate
focal_class.modifiers: protected
focal_class.parameters: (I id)
focal_class.signature:  Aggregate(I id)
focal_class.class_method_signature: Aggregate.setIdempotencyGuard()
focal_class.full_signature: private void setIdempotencyGuard()
focal_class.identifier: setIdempotencyGuard
focal_class.modifiers: private
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void setIdempotencyGuard()
focal_class.class_method_signature: Aggregate.thisClass()
focal_class.full_signature: @Override protected AggregateClass<?> thisClass()
focal_class.identifier: thisClass
focal_class.modifiers: @Override protected
focal_class.parameters: ()
focal_class.return: AggregateClass<?>
focal_class.signature: AggregateClass<?> thisClass()
focal_class.class_method_signature: Aggregate.modelClass()
focal_class.full_signature: @Internal @Override protected AggregateClass<?> modelClass()
focal_class.identifier: modelClass
focal_class.modifiers: @Internal @Override protected
focal_class.parameters: ()
focal_class.return: AggregateClass<?>
focal_class.signature: AggregateClass<?> modelClass()
focal_class.class_method_signature: Aggregate.builder()
focal_class.full_signature: @Override protected final B builder()
focal_class.identifier: builder
focal_class.modifiers: @Override protected final
focal_class.parameters: ()
focal_class.return: B
focal_class.signature: B builder()
focal_class.class_method_signature: Aggregate.dispatchCommand(CommandEnvelope command)
focal_class.full_signature: @Override protected DispatchOutcome dispatchCommand(CommandEnvelope command)
focal_class.identifier: dispatchCommand
focal_class.modifiers: @Override protected
focal_class.parameters: (CommandEnvelope command)
focal_class.return: DispatchOutcome
focal_class.signature: DispatchOutcome dispatchCommand(CommandEnvelope command)
focal_class.class_method_signature: Aggregate.reactOn(EventEnvelope event)
focal_class.full_signature:  DispatchOutcome reactOn(EventEnvelope event)
focal_class.identifier: reactOn
focal_class.parameters: (EventEnvelope event)
focal_class.return: DispatchOutcome
focal_class.signature: DispatchOutcome reactOn(EventEnvelope event)
focal_class.class_method_signature: Aggregate.invokeApplier(EventEnvelope event)
focal_class.full_signature: final DispatchOutcome invokeApplier(EventEnvelope event)
focal_class.identifier: invokeApplier
focal_class.modifiers: final
focal_class.parameters: (EventEnvelope event)
focal_class.return: DispatchOutcome
focal_class.signature: DispatchOutcome invokeApplier(EventEnvelope event)
focal_class.class_method_signature: Aggregate.play(Iterable<Event> events)
focal_class.full_signature: @Override public final BatchDispatchOutcome play(Iterable<Event> events)
focal_class.identifier: play
focal_class.modifiers: @Override public final
focal_class.parameters: (Iterable<Event> events)
focal_class.return: BatchDispatchOutcome
focal_class.signature: BatchDispatchOutcome play(Iterable<Event> events)
focal_class.class_method_signature: Aggregate.play(AggregateHistory history)
focal_class.full_signature: final BatchDispatchOutcome play(AggregateHistory history)
focal_class.identifier: play
focal_class.modifiers: final
focal_class.parameters: (AggregateHistory history)
focal_class.return: BatchDispatchOutcome
focal_class.signature: BatchDispatchOutcome play(AggregateHistory history)
focal_class.class_method_signature: Aggregate.apply(List<Event> events)
focal_class.full_signature: final BatchDispatchOutcome apply(List<Event> events)
focal_class.identifier: apply
focal_class.modifiers: final
focal_class.parameters: (List<Event> events)
focal_class.return: BatchDispatchOutcome
focal_class.signature: BatchDispatchOutcome apply(List<Event> events)
focal_class.class_method_signature: Aggregate.restore(Snapshot snapshot)
focal_class.full_signature: final void restore(Snapshot snapshot)
focal_class.identifier: restore
focal_class.modifiers: final
focal_class.parameters: (Snapshot snapshot)
focal_class.return: void
focal_class.signature: void restore(Snapshot snapshot)
focal_class.class_method_signature: Aggregate.getUncommittedEvents()
focal_class.full_signature:  UncommittedEvents getUncommittedEvents()
focal_class.identifier: getUncommittedEvents
focal_class.parameters: ()
focal_class.return: UncommittedEvents
focal_class.signature: UncommittedEvents getUncommittedEvents()
focal_class.class_method_signature: Aggregate.commitEvents()
focal_class.full_signature: final void commitEvents()
focal_class.identifier: commitEvents
focal_class.modifiers: final
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void commitEvents()
focal_class.class_method_signature: Aggregate.missingTxMessage()
focal_class.full_signature: @Override protected final String missingTxMessage()
focal_class.identifier: missingTxMessage
focal_class.modifiers: @Override protected final
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String missingTxMessage()
focal_class.class_method_signature: Aggregate.toSnapshot()
focal_class.full_signature: final Snapshot toSnapshot()
focal_class.identifier: toSnapshot
focal_class.modifiers: final
focal_class.parameters: ()
focal_class.return: Snapshot
focal_class.signature: Snapshot toSnapshot()
focal_class.class_method_signature: Aggregate.clearRecentHistory()
focal_class.full_signature: @Override protected final void clearRecentHistory()
focal_class.identifier: clearRecentHistory
focal_class.modifiers: @Override protected final
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void clearRecentHistory()
focal_class.class_method_signature: Aggregate.recentHistory()
focal_class.full_signature: @VisibleForTesting @Override protected final RecentHistory recentHistory()
focal_class.identifier: recentHistory
focal_class.modifiers: @VisibleForTesting @Override protected final
focal_class.parameters: ()
focal_class.return: RecentHistory
focal_class.signature: RecentHistory recentHistory()
focal_class.class_method_signature: Aggregate.historyBackward()
focal_class.full_signature: protected final Iterator<Event> historyBackward()
focal_class.identifier: historyBackward
focal_class.modifiers: protected final
focal_class.parameters: ()
focal_class.return: Iterator<Event>
focal_class.signature: Iterator<Event> historyBackward()
focal_class.class_method_signature: Aggregate.historyContains(Predicate<Event> predicate)
focal_class.full_signature: protected final boolean historyContains(Predicate<Event> predicate)
focal_class.identifier: historyContains
focal_class.modifiers: protected final
focal_class.parameters: (Predicate<Event> predicate)
focal_class.return: boolean
focal_class.signature: boolean historyContains(Predicate<Event> predicate)
focal_class.class_method_signature: Aggregate.versionNumber()
focal_class.full_signature: @Override @VisibleForTesting protected final int versionNumber()
focal_class.identifier: versionNumber
focal_class.modifiers: @Override @VisibleForTesting protected final
focal_class.parameters: ()
focal_class.return: int
focal_class.signature: int versionNumber()
focal_class.class_method_signature: Aggregate.eventCountAfterLastSnapshot()
focal_class.full_signature: final int eventCountAfterLastSnapshot()
focal_class.identifier: eventCountAfterLastSnapshot
focal_class.modifiers: final
focal_class.parameters: ()
focal_class.return: int
focal_class.signature: int eventCountAfterLastSnapshot()
focal_class.class_method_signature: Aggregate.setEventCountAfterLastSnapshot(int count)
focal_class.full_signature: final void setEventCountAfterLastSnapshot(int count)
focal_class.identifier: setEventCountAfterLastSnapshot
focal_class.modifiers: final
focal_class.parameters: (int count)
focal_class.return: void
focal_class.signature: void setEventCountAfterLastSnapshot(int count)
focal_class.superclass: extends CommandHandlingEntity<I, S, B>
focal_method.body: @Override
      protected DispatchOutcome dispatchCommand(CommandEnvelope command) {
          Optional<Error> error = idempotencyGuard.check(command);
          if (error.isPresent()) {
              DispatchOutcome outcome = DispatchOutcome
                      .newBuilder()
                      .setPropagatedSignal(command.messageId())
                      .setError(error.get())
                      .vBuild();
              return outcome;
          } else {
              CommandHandlerMethod method = thisClass().handlerOf(command.messageClass());
              DispatchOutcome outcome = method.invoke(this, command);
              return outcome;
          }
      }
focal_method.class_method_signature: Aggregate.dispatchCommand(CommandEnvelope command)
focal_method.full_signature: @Override protected DispatchOutcome dispatchCommand(CommandEnvelope command)
focal_method.identifier: dispatchCommand
focal_method.invocations: check isPresent vBuild setError setPropagatedSignal newBuilder messageId get handlerOf thisClass messageClass invoke
focal_method.modifiers: @Override protected
focal_method.parameters: (CommandEnvelope command)
focal_method.return: DispatchOutcome
focal_method.signature: DispatchOutcome dispatchCommand(CommandEnvelope command)