def METHOD_NAME(self, _locals):
    # type: (t.Dict[str, t.Any]) -> None
    probe = t.cast(SpanDecorationMixin, self.probe)
    if probe.target_span == SpanDecorationTargetSpan.ACTIVE:
        span = ddtrace.tracer.current_span()
    elif probe.target_span == SpanDecorationTargetSpan.ROOT:
        span = ddtrace.tracer.current_root_span()
    else:
        log.error("Invalid target span for span decoration: %s", probe.target_span)
        return
    if span is not None:
        log.debug("Decorating span %r according to span decoration probe %r", span, probe)
        for d in probe.decorations:
            try:
                if not (d.when is None or d.when(_locals)):
                    continue
            except DDExpressionEvaluationError as e:
                self.errors.append(
                    EvaluationError(expr=e.dsl, message="Failed to evaluate condition: %s" % e.error)
                )
                continue
            for tag in d.tags:
                try:
                    tag_value = tag.value.render(_locals, serialize)
                except DDExpressionEvaluationError as e:
                    span.set_tag_str(
                        "_dd.di.%s.evaluation_error" % tag.name, ", ".join([serialize(v) for v in e.args])
                    )
                else:
                    span.set_tag_str(tag.name, tag_value if _isinstance(tag_value, str) else serialize(tag_value))
                    span.set_tag_str("_dd.di.%s.probe_id" % tag.name, t.cast(Probe, probe).probe_id)