final void onCommandFinished(Project project, Object commandGroupId) {
    Object lastGroupId = SoftReference.dereference(this.lastGroupId);
    if (!CommandMerger.canMergeGroup(commandGroupId, lastGroupId)) registeredBackPlaceInLastGroup = false;
    if (commandGroupId != lastGroupId) {
      this.lastGroupId = commandGroupId == null ? null : new WeakReference<>(commandGroupId);
    }

    if (commandStartPlace != null && currentCommandIsNavigation && currentCommandHasMoves) {
      if (!myBackInProgress) {
        if (!registeredBackPlaceInLastGroup) {
          registeredBackPlaceInLastGroup = true;
          putLastOrMerge(commandStartPlace, BACK_QUEUE_LIMIT, false, commandGroupId);
          registerViewed(commandStartPlace.myFile);
        }
        if (!forwardInProgress) {
          forwardPlaces.clear();
        }
      }
      removeInvalidFilesFromStacks();
    }

    if (currentCommandHasChanges) {
      setCurrentChangePlace(project == this.project);
    }
    else if (currentCommandHasMoves) {
      currentIndex = changePlaces.size();
    }
  }
final void onCommandFinished(Project project, Object commandGroupId)