void afterComputation(MyKey realKey, int sizeBefore, int sizeAfter) {
      exits++;
      if (sizeAfter != progressMap.size()) {
        LOG.error("Map size changed: " + progressMap.size() + " " + sizeAfter + " " + realKey.userObject);
      }

      if (depth != progressMap.size()) {
        LOG.error("Inconsistent depth after computation; depth=" + depth + "; map=" + progressMap);
      }

      StackFrame value = progressMap.remove(realKey);
      depth--;
      if (!preventions.isEmpty()) {
        preventions.remove(realKey);
      }

      if (depth <= firstLoopStart) {
        firstLoopStart = Integer.MAX_VALUE;
        intermediateCache.clear();
      }

      if (sizeBefore != progressMap.size()) {
        LOG.error("Map size doesn't decrease: " + progressMap.size() + " " + sizeBefore + " " + realKey.userObject);
      }

      reentrancyCount = value.reentrancyStamp;
    }
void afterComputation(MyKey realKey, int sizeBefore, int sizeAfter)