function _assertSignaturesMatch()

in src/validator.ts [306:364]


    function _assertSignaturesMatch(expected: spec.Method, actual: spec.Method, label: string, action: string) {
      if (!!expected.protected !== !!actual.protected) {
        const expVisibility = expected.protected ? 'protected' : 'public';
        const actVisibility = actual.protected ? 'protected' : 'public';
        diagnostic(
          JsiiDiagnostic.JSII_5002_OVERRIDE_CHANGES_VISIBILITY.createDetached(
            label,
            action,
            actVisibility,
            expVisibility,
          ),
        );
      }
      if (!deepEqual(actual.returns, expected.returns)) {
        const expType = spec.describeTypeReference(expected.returns?.type);
        const actType = spec.describeTypeReference(actual.returns?.type);
        diagnostic(
          JsiiDiagnostic.JSII_5003_OVERRIDE_CHANGES_RETURN_TYPE.createDetached(label, action, actType, expType),
        );
      }
      const expectedParams = expected.parameters ?? [];
      const actualParams = actual.parameters ?? [];
      if (expectedParams.length !== actualParams.length) {
        diagnostic(
          JsiiDiagnostic.JSII_5005_OVERRIDE_CHANGES_PARAM_COUNT.createDetached(
            label,
            action,
            actualParams.length,
            expectedParams.length,
          ),
        );
        return;
      }
      for (let i = 0; i < expectedParams.length; i++) {
        const expParam = expectedParams[i];
        const actParam = actualParams[i];
        if (!deepEqual(expParam.type, actParam.type)) {
          diagnostic(
            JsiiDiagnostic.JSII_5006_OVERRIDE_CHANGES_PARAM_TYPE.createDetached(label, action, actParam, expParam),
          );
        }
        // Not-ing those to force the values to a strictly boolean context (they're optional, undefined means false)
        if (expParam.variadic !== actParam.variadic) {
          diagnostic(
            JsiiDiagnostic.JSII_5007_OVERRIDE_CHANGES_VARIADIC.createDetached(
              label,
              action,
              actParam.variadic,
              expParam.variadic,
            ),
          );
        }
        if (expParam.optional !== actParam.optional) {
          diagnostic(
            JsiiDiagnostic.JSII_5008_OVERRIDE_CHANGES_PARAM_OPTIONAL.createDetached(label, action, actParam, expParam),
          );
        }
      }
    }