docs: protected EventSubscriptionDeclaration parseSignalEventDefinition(Element signalEventDefinitionElement, boolean isThrowing) {
      String signalRef = signalEventDefinitionElement.attribute("signalRef");
      if (signalRef == null) {
        addError("signalEventDefinition does not have required property 'signalRef'", signalEventDefinitionElement);
        return null;
      } else {
        SignalDefinition signalDefinition = signals.get(resolveName(signalRef));
        if (signalDefinition == null) {
          addError("Could not find signal with id '" + signalRef + "'", signalEventDefinitionElement);
        }
  
        EventSubscriptionDeclaration signalEventDefinition;
        if (isThrowing) {
          CallableElement payload = new CallableElement();
          parseInputParameter(signalEventDefinitionElement, payload);
          signalEventDefinition = new EventSubscriptionDeclaration(signalDefinition.getExpression(), EventType.SIGNAL, payload);
        } else {
          signalEventDefinition = new EventSubscriptionDeclaration(signalDefinition.getExpression(), EventType.SIGNAL);
        }
  
        boolean throwingAsync = TRUE.equals(signalEventDefinitionElement.attributeNS(CAMUNDA_BPMN_EXTENSIONS_NS, "async", "false"));
        signalEventDefinition.setAsync(throwingAsync);
  
        return signalEventDefinition;
      }
    }