public CachedTextSymbolizer(
      final TextSymbolizer symbolizer,
      final SymbolizerRendererService<TextSymbolizer, ? extends CachedSymbolizer<TextSymbolizer>>
          renderer) {
    super(symbolizer, renderer);

    final org.opengis.style.Font font = styleElement.getFont();
    cachedFont = CachedFont.cache(font);

    final Fill fill = styleElement.getFill();
    cachedFill = CachedFill.cache(fill);

    // halo can be null.
    final Halo halo = styleElement.getHalo();
    if (halo != null) {
      cachedHalo = CachedHalo.cache(halo);
    } else {
      cachedHalo = null;
    }

    final LabelPlacement placement = styleElement.getLabelPlacement();
    if (placement instanceof PointPlacement) {
      cachedPlacement = CachedPointPlacement.cache((PointPlacement) placement);
    } else if (placement instanceof LinePlacement) {
      cachedPlacement = CachedLinePlacement.cache((LinePlacement) placement);
    } else {
      throw new IllegalArgumentException(
          "A text symbolizer must have a placement set of type : PointPlacement or LinePlacement.");
    }

    styleElement.getFont();
    //        symbol.getGeometryPropertyName();
    styleElement.getHalo();
    styleElement.getLabel();
    styleElement.getLabelPlacement();
    styleElement.getUnitOfMeasure();
  }