docs: private void recordCompatibilityInfo(JMFType access, JSchema accSchema, JMFType encoding,
        JSchema encSchema) throws JMFSchemaViolationException
    {
      if (access instanceof JSPrimitive)
        if (encoding instanceof JSPrimitive)
          recordCompatibilityInfo((JSPrimitive)access, accSchema, (JSPrimitive)encoding,
            encSchema);
        else if (encoding instanceof JSVariant)
          checkForDeletingVariant(access, (JSVariant)encoding, false, accSchema, encSchema);
        else {
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) JmfTr.debug(this, tc, "Compatibility violation (type mismatch) for JSPrimitive");
          violation(access, encoding);
         }
      else if (access instanceof JSEnum)
        if (encoding instanceof JSEnum)
          recordCompatibilityInfo((JSEnum)access, accSchema, (JSEnum)encoding, encSchema);
        else if (encoding instanceof JSVariant)
          checkForDeletingVariant(access, (JSVariant)encoding, false, accSchema, encSchema);
        else {
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) JmfTr.debug(this, tc, "Compatibility violation (type mismatch) for JSEnum");
          violation(access, encoding);
        }
      else if (access instanceof JSDynamic)
        if (encoding instanceof JSDynamic)
          recordOnePair((JSField)access, accSchema, (JSField)encoding, encSchema);
        else if (encoding instanceof JSVariant)
          checkForDeletingVariant(access, (JSVariant)encoding, false, accSchema, encSchema);
        else {
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) JmfTr.debug(this, tc, "Compatibility violation (type mismatch) for JSDynamic");
          violation(access, encoding);
        }
      else if (access instanceof JSRepeated)
        if (encoding instanceof JSRepeated)
          recordCompatibilityInfo(((JSRepeated)access).getItemType(), accSchema,
            ((JSRepeated)encoding).getItemType(), encSchema);
        else if (encoding instanceof JSVariant)
          checkForDeletingVariant(access, (JSVariant)encoding, false, accSchema, encSchema);
        else {
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) JmfTr.debug(this, tc, "Compatibility violation (type mismatch) for JSRepeated");
          violation(access, encoding);
        }
      else if (access instanceof JSTuple)
        if (encoding instanceof JSTuple)
          recordCompatibilityInfo((JSTuple)access, accSchema, (JSTuple)encoding, encSchema);
        else if (encoding instanceof JSVariant)
          checkForDeletingVariant(access, (JSVariant)encoding, false, accSchema, encSchema);
        else {
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) JmfTr.debug(this, tc, "Compatibility violation (type mismatch) for JSTuple");
          violation(access, encoding);
        }
      else if (access instanceof JSVariant) {
        JSVariant accVar = (JSVariant)access;
        if (encoding instanceof JSVariant) {
          JSVariant encVar = (JSVariant)encoding;
          recordCompatibilityInfo(accVar, accSchema, encVar, encSchema);
        } else
          checkForDeletingVariant(encoding, accVar, true, accSchema, encSchema);
      }
    }