@Override
  public List<VectorTile.Feature> postProcessLayerFeatures(String layer, int zoom, List<VectorTile.Feature> items)
    throws GeometryException {
    // delegate feature post-processing to each layer, if it implements FeaturePostProcessor
    List<LayerPostProcessor> postProcessers = layerPostProcessors.get(layer);
    List<VectorTile.Feature> result = makeMutable(items);
    if (postProcessers != null) {
      for (var handler : postProcessers) {
        var thisResult = handler.postProcess(zoom, result);
        if (thisResult != null && result != thisResult) {
          result = makeMutable(thisResult);
        }
      }
    }
    return result;
  }
Call {@code handler} for different events based on which interfaces {@code handler} implements:
{@link OsmRelationPreprocessor}, {@link FinishHandler}, {@link TilePostProcessor} or {@link LayerPostProcessor}.
planetiler-core/src/main/java/com/onthegomap/planetiler/ForwardingProfile.java