code: public BoltDeclarer setBolt(String id, BaseWindowedBolt<Tuple> bolt, Number parallelism_hint) throws
              IllegalArgumentException {
          boolean isEventTime = WindowAssigner.isEventTime(bolt.getWindowAssigner());
          if (isEventTime && bolt.getTimestampExtractor() == null) {
              throw new IllegalArgumentException("timestamp extractor must be defined in event time!");
          }
          return setBolt(id, new WindowedBoltExecutor(bolt), parallelism_hint);
      }
docs: Define a new bolt in this topology. This defines a windowed bolt, intended
  for windowing operations.
  
  @param id the id of this component. This id is referenced by other components that want to consume this bolt's outputs.
  @param bolt the windowed bolt
  @param parallelism_hint the number of tasks that should be assigned to execute this bolt. Each task will run on a thread in a process somwehere around the cluster.
  @return use the returned object to declare the inputs to this component
  @throws IllegalArgumentException if {@code parallelism_hint} is not positive